Integrar Unity & Location Kit
HuaweiDevsLATAM
Posted on March 4, 2021
Introducción:
En este artículo, aprenderemos cómo integrar el kit de ubicación y obtener la última latitud y longitud de ubicación conocidas en unidad utilizando el complemento Huawei HMS Core App Services.
Requisitos:
- Unity IDE
- Visual Code
- Dispositivo HMS #Output: Mostrar última latitud y longitud conocidas. #Consideraciones: Para las bibliotecas del kit de ubicación y conexión de App Gallery, usaremos una versión específica, verifique si hay una versión más nueva disponible. #Pasos para integrar: ##Crea un proyecto de Unity Abra Unity Hub y cree un proyecto (en nuestro caso, un proyecto 2D). El nombre del proyecto será UnityLocationKit. En Unity, vaya a Windows> Asset Store, busque HMS Core App Services y haga clic en Importar.
Cambiar plataforma: haga clic en Configuración de compilación, seleccione Android y presione Cambiar plataforma.
Seleccione Configuración del reproductor> Configuración de publicación> Administrador de almacén de claves y cree un nuevo archivo de almacén de claves de la siguiente manera.
Actualice el nombre del paquete.
En Configuración del proyecto> Configuración de publicación, habilite las siguientes opciones.
En el terminal de la línea de comandos, ejecute el siguiente comando y obtenga la clave SHA:
keytool -list -v -keystore D:\yourpath\UnityLocationKit.keystore
Crea y configura el proyecto en AppGallery
Navegue a AGC Console y cree un nuevo proyecto con el mismo nombre que el proyecto de Unity (en este caso, UnityLocationKit).
Agregar aplicación
Guarde la clave SHA en la consola AGC.
Descargue agconnect-services.json y cópielo en Assets> Plugins> Android in unity project.
Agregar complementos y dependencias de HMS
En Manifiesto, agregue permisos de uso y etiqueta de servicio:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<receiver android:name="com.unity.hms.location.LocationBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="com.huawei.hmssample.location.LocationBroadcastReceiver.ACTION_PROCESS_LOCATION" />
</intent-filter>
</receiver>
<receiver android:name="com.unity.hms.location.GeoFenceBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="com.huawei.hmssample.geofence.GeoFenceBroadcastReceiver.ACTION_PROCESS_LOCATION" />
</intent-filter>
</receiver>
En LaucherTemplate agregue el complemento y las dependencias
apply plugin: 'com.huawei.agconnect'
implementation 'com.huawei.agconnect:agconnect-core:1.2.0.300'
implementation 'com.huawei.hms:location:5.0.0.302'
implementation 'com.android.support:appcompat-v7:28.0.0'
En MainTemplate agregue las dependencias:
implementation 'com.huawei.hms:location:5.0.0.302'
En BaseProjectTemplate, agregue esto en los repositorios de buildscript y en todos los repositorios del proyecto y en la ruta de clases de App Gallery Connect.
maven { url 'https://developer.huawei.com/repo/' }
classpath 'com.huawei.agconnect:agcp:1.2.1.301'
Debe verse así:
allprojects {
buildscript {
repositories {**ARTIFACTORYREPOSITORY**
google()
jcenter()
maven { url 'https://developer.huawei.com/repo/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
classpath 'com.huawei.agconnect:agcp:1.2.1.301'
**BUILD_SCRIPT_DEPS**
}
}
repositories {**ARTIFACTORYREPOSITORY**
google()
jcenter()
flatDir {
dirs "${project(':unityLibrary').projectDir}/libs"
}
maven { url 'https://developer.huawei.com/repo/' }
}
}
Vaya a Archivo> Configuración de compilación> Configuración del reproductor> Reproductor y actualice el nombre de la empresa y el nombre del paquete
Crear GameObjects y codificación
Mostraremos la ubicación en un objeto de juego TEXT, haga clic en GameObject> UI> TEXT y cambiaremos el nombre del objeto creado a LocationText
Cree un GameObject vacío, haga clic en GameObject> Create Empty y cambie el nombre del objeto a LocationManagerGameObject.
Dentro de la carpeta de activos crear carpeta de script.
Haga clic derecho dentro de la carpeta y haga clic en Crear> C # Script y asígnele el nombre LocationManager.
Haga clic en LocationManagerGameObject, haga clic en Agregar componente y seleccione el script LocationManager.
Abrir secuencia de comandos LocationManager.
Agregue la siguiente secuencia de comandos:
using HuaweiHms;
using System;
using UnityEngine;
using UnityEngine.Android;
using UnityEngine.UI;
using Exception = HuaweiHms.Exception;
public class LocationManager : MonoBehaviour
{
private static Text locationText;
private FusedLocationProviderClient mFusedLocationProviderClient;
public delegate void SuccessCallBack<T>(T o);
public delegate void FailureCallBack(Exception e);
public LocationRequest mLocationRequest;
void Start()
{
locationText = GameObject.Find("LocationText").GetComponent<Text>();
locationText.text = "Location";
if (!Permission.HasUserAuthorizedPermission(Permission.CoarseLocation))
{
Permission.RequestUserPermission(Permission.CoarseLocation);
}
}
void OnGUI()
{
if (!Permission.HasUserAuthorizedPermission(Permission.CoarseLocation))
{
// permission denied, no access should be visible, when activated when requested permission
locationText.text = "Permission denied";
return;
}
GetLastLocation();
}
public void GetLastLocation()
{
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(new Context());
try
{
Task lastLocation = null;
mLocationRequest = new LocationRequest();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HD_ACCURACY);
lastLocation = mFusedLocationProviderClient.getLastLocationWithAddress(mLocationRequest);
lastLocation.addOnSuccessListener(new HmsSuccessListener<Location>((location) =>
{
if (location == null)
{
locationText.text = "getLastLocation onSuccess location is null";
return;
}
locationText.text = "getLastLocation onSuccess location[Longitude,Latitude]:" + location.getLongitude() + "," + location.getLatitude();
})).addOnFailureListener(new HmsFailureListener((Exception e) =>
{
locationText.text = "getLastLocation onFailure " + e.toString();
}));
}
catch (System.Exception e)
{
locationText.text = "getLastLocation exception:" + e.Message;
}
}
public class HmsSuccessListener<T> : OnSuccessListener
{
public SuccessCallBack<T> CallBack;
public HmsSuccessListener(SuccessCallBack<T> c)
{
CallBack = c;
}
public void onSuccess(T arg0)
{
locationText.text = "OnSuccessListener onSuccess";
if (CallBack != null)
{
CallBack.Invoke(arg0);
}
}
public override void onSuccess(AndroidJavaObject arg0)
{
locationText.text = "OnSuccessListener onSuccess";
if (CallBack != null)
{
Type type = typeof(T);
IHmsBase ret = (IHmsBase)Activator.CreateInstance(type);
ret.obj = arg0;
CallBack.Invoke((T)ret);
}
}
}
public class HmsFailureListener : OnFailureListener
{
public FailureCallBack CallBack;
public HmsFailureListener(FailureCallBack c)
{
CallBack = c;
}
public override void onFailure(Exception arg0)
{
locationText.text = "OnFailureListener onFailure";
if (CallBack != null)
{
CallBack.Invoke(arg0);
}
}
}
}
Cree su archivo apk haciendo clic en Archivo> Configuración de compilación> Compilar e instalarlo en su dispositivo.
Abra su juego, acepte la solicitud de permisos de ubicación y vea el resultado.
Posted on March 4, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.