DEV Community

HuaweiDevsLATAM
HuaweiDevsLATAM

Posted on

Integrar Unity & Location Kit

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:

  1. Unity IDE
  2. Visual Code
  3. 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. Alt Text

Cambiar plataforma: haga clic en Configuración de compilación, seleccione Android y presione Cambiar plataforma.

Alt Text

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.

Alt Text

Alt Text

Actualice el nombre del paquete.
En Configuración del proyecto> Configuración de publicación, habilite las siguientes opciones.

Alt Text

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
Enter fullscreen mode Exit fullscreen mode

Alt Text

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).

Alt Text

Agregar aplicación

Alt Text

Guarde la clave SHA en la consola AGC.

Alt Text

Habilitar el kit de ubicación
Alt Text

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>
Enter fullscreen mode Exit fullscreen mode

En LaucherTemplate agregue el complemento y las dependencias

apply plugin: 'com.huawei.agconnect'
Enter fullscreen mode Exit fullscreen mode
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'
Enter fullscreen mode Exit fullscreen mode

En MainTemplate agregue las dependencias:

implementation 'com.huawei.hms:location:5.0.0.302'
Enter fullscreen mode Exit fullscreen mode

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'
Enter fullscreen mode Exit fullscreen mode

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/' }
        }
}
Enter fullscreen mode Exit fullscreen mode

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

Alt Text

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.

Alt Text

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);
            }
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

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.

Alt Text

Discussion (0)