Huawei AppGallery Connect proporciona un servicio de almacenamiento en la nube (CloudStorage), que pretende proporcionar un servicio de almacenamiento en la nube conveniente. Cuando los desarrolladores de aplicaciones lo usan, pueden usarlo directamente sin prestar atención a la implementación del servidor.
En la actualidad, esta función aún se encuentra en la etapa de bate, primero la probé.
1. Información medioambiental y de aplicación
Nombre de la versión | Entorno integrado | Equipo de prueba |
---|---|---|
agconnect-storage: 1.3.1.100 | Unidad 2019.4.17f1c1 | Magia de gloria2 |
Dirección AGC:https://developer.huawei.com/consumer/cn/service/josp/agc/index.html
2. Servicio de almacenamiento en la nube abierta
PD: El servicio de almacenamiento en la nube se encuentra actualmente en estado beta, debe enviar un correo electrónico para solicitar la activación antes de su uso:
https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-cloudstorage-apply
El paso de apertura es solo un clic en la interfaz. No lo presentaré en detalle aquí. Puede consultar el documento anterior.
https://developer.huawei.com/consumer/cn/forum/topic/0201411971207960391?fid=0101271690375130218
3. Importar paquete de Unity:
Documentos oficiales:
https://docs.unity.cn/cn/Packages-cn/[email protected]/manual/cloudstorage.html
1. Descargue Unity Hub e instale Unity
https://unity.cn/releases . La descarga y la instalación no se introducirán en detalle.
2. Configuración del entorno Android: consulte la captura de pantalla a continuación
3. Importe el paquete de servicios de Huawei:
Primero descargue el paquete desde el enlace:
https://share.unity.com/receive/?thread=237D-JA9D&packageCode=DzIiMvUpSO7GsT3dPV2M8qyBaw3R5bcbRhwD5RurQNM#keyCode=lkkIcH1nco7DIoL90AOReE0hwINGMsFP7m
(Actualmente, el paquete aún no está completamente abierto al mundo exterior)
Después de descargar al local, haga clic en activos - Importar paquete en Unity
Luego, seleccione el paquete requerido y haga clic en Importar
4. Configuración del entorno AGC
1. Configure los parámetros en Huawei AGC: Regrese a la consola AGC: Busque la aplicación creada anteriormente:
https://developer.huawei.com/consumer/cn/service/josp/agc/index.html
2. Seleccione: Mi proyecto -> Build-Cloud Storage y haga clic en Activar para activar el servicio de almacenamiento en la nube Necesita configurar el nombre de la instancia de almacenamiento predeterminado. (Configure según sea necesario)
Para facilitar la lectura y escritura de datos sin autenticación, la política de seguridad se configura de la siguiente manera:
agc.cloud.storage[
match: /{bucket}/{path=**} {
allow read, write: if true;
}
]
3. Una vez activado el servicio, vuelva a la interfaz de configuración del proyecto y descargue el archivo json más reciente.
4. Coloque el archivo json recién descargado en el directorio Assets / Plugins / Android del proyecto Unity:
Tenga en cuenta que si no hay un parámetro default_storage en cloudstorage en el archivo json descargado, agréguelo manualmente: el valor agregado aquí es la instancia de almacenamiento predeterminada configurada en el paso 3.
5. Configure el entorno de Android en Unity:
1. Habilite la lista personalizada de Android y gradle en la configuración de publicación de jugador
2. Configure el nombre del paquete en Otra configuración: tenga en cuenta que debe ser coherente con el nombre del paquete en el sitio web oficial de AG:
3. Configure el gradle a nivel de proyecto, que corresponde al archivo baseProjectTmeplate.gradle en la ruta Assets \ Plugins \ Android, y agregue el siguiente contenido
allprojects {
buildscript {
repositories {
maven { url 'https://developer.huawei.com/repo/' }
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
classpath 'com.huawei.agconnect:agcp:1.4.2.301'
**BUILD_SCRIPT_DEPS**
}
}
repositories {
maven { url 'https://developer.huawei.com/repo/' }
}
}
- Configure el gradle a nivel de aplicación, aquí corresponde al archivo LauncherTmeplate.gradle en la ruta Assets \ Plugins \ Android, agregue el siguiente contenido:
apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'
dependencies {
implementation project(':unityLibrary')
implementation "com.huawei.agconnect:agconnect-storage:1.3.1.100"
implementation 'com.huawei.agconnect:agconnect-auth:1.4.2.301'
- Configure el archivo de manifiesto: solicite permisos de lectura y escritura para leer y escribir archivos
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="false"
android:requestLegacyExternalStorage="true" >
6. Desarrolle funciones de almacenamiento en la nube desde cero
1. Diseño de la interfaz:
Haga clic en GameObject-UI -Button a su vez para crear un botón. Haga clic en el botón de verificación y luego seleccione Agregar componente a la derecha para crear y agregar un archivo de secuencia de comandos. Crea el método correspondiente en el archivo.
2. Inicialice la instancia de almacenamiento en la nube y solicite permisos de lectura y escritura.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using HuaweiService;
using HuaweiService.CloudStorage;
using System;
public delegate void SuccessCallBack<T>(T o);
public class HmsSuccessListener<T>:OnSuccessListener{
public SuccessCallBack<T> CallBack;
public HmsSuccessListener(SuccessCallBack<T> c){
CallBack = c;
}
public void onSuccess(T arg0)
{
Debug.Log("OnSuccessListener onSuccess");
if(CallBack != null)
{
CallBack.Invoke(arg0);
}
}
public override void onSuccess(AndroidJavaObject arg0){
Debug.Log("OnSuccessListener onSuccess");
if(CallBack !=null)
{
Type type = typeof(T);
IHmsBase ret = (IHmsBase)Activator.CreateInstance(type);
ret.obj = arg0;
CallBack.Invoke((T)ret);
}
}
}
public class testStorageDemo : MonoBehaviour
{
private AGCStorageManagement mAGCStorageManagement;
private string[] permissions =
{
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE",
};
// Start is called before the first frame update
void Start()
{
AndroidJavaClass javaUnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = javaUnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
Activity aaa = HmsUtil.GetHmsBase<Activity>(currentActivity);
ActivityCompat.requestPermissions(aaa, permissions, 1);
}
// Update is called once per frame
void Update()
{
}
public void initAGCStorageManagement() {
mAGCStorageManagement = AGCStorageManagement.getInstance("9105385871708601205-ffeon");
Debug.Log("Instance is: "+ mAGCStorageManagement);
}
public class MySuccessListener : OnSuccessListener
{
private string m_name;
public MySuccessListener(string name)
{
m_name = name;
}
public MySuccessListener()
{
m_name = "default";
}
public override void onSuccess(AndroidJavaObject ex)
{
Debug.Log("download success: " + m_name);
}
}
}
3. Cargar archivos:
public void uploadFile() {
if (mAGCStorageManagement == null){
initAGCStorageManagement();
}
string fileName = "testUnity.jpg";
StorageReference reference = mAGCStorageManagement.getStorageReference(fileName);
string FileFolder = "/storage/emulated/0/AGCSdk/";
string FilePath = FileFolder + fileName;
Debug.Log("FilePath = " + FilePath);
File file = new File(FilePath);
Debug.Log("UploadFile = " + file);
UploadTask task = reference.putFile(file);
task.addOnSuccessListener(new MySuccessListener());
Debug.Log("UploadFile done:");
}
4. Descarga de archivos
public void downloadFile() {
if (mAGCStorageManagement == null){
initAGCStorageManagement();
}
StorageReference reference = mAGCStorageManagement.getStorageReference("test.jpg");
string FileFolder = "/storage/emulated/0/AGCSdk/";
string FilePath = FileFolder + "test.jpg";
Debug.Log("FilePath = " + FilePath);
File file = new File(FilePath);
Debug.Log("File = " + file);
DownloadTask task = reference.getFile(file);
task.addOnSuccessListener(new MySuccessListener("NormalListener"));
Debug.Log("DownloadTask Result:");
}
5. Eliminar archivos
public void deleteFile() {
if (mAGCStorageManagement == null){
initAGCStorageManagement();
}
StorageReference reference = mAGCStorageManagement.getStorageReference("testUnity.jpg");
reference.delete();
Debug.Log("DeleteFileTest success.");
}
6, prueba de paquete
Una vez instalado el paquete, al hacer clic en cada botón, puede filtrar las palabras clave de Unity en el Logcat de Android y ver la salida de registros relacionados por Debug.Log.
Al cargar y descargar, preste atención sincrónicamente a los cambios de los archivos en la interfaz agc
7. Resumen
Concentrándose únicamente en el desarrollo de aplicaciones front-end, puede utilizar el servicio de almacenamiento en la nube de AGC para desarrollar un juego con funciones de servicio de almacenamiento en la nube en Unity, sin preocuparse por la construcción, operación y mantenimiento del servidor, ahorrando tiempo y esfuerzo. Además, el servicio de almacenamiento en la nube también proporciona una consola web similar al modo administrador, que puede administrar archivos en el servidor de manera simple e intuitiva.
Además de las funciones de carga, descarga y eliminación más comunes, este servicio de almacenamiento en la nube también incluye funciones como la configuración de metadatos. Para obtener más información, consulte el documento oficial:
Para obtener más detalles, consulte:
Guía de desarrollo del servicio de almacenamiento en la nube:
https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-cloudstorage-introduction
Documentación de Unity sobre almacenamiento en la nube:
https://docs.unity.cn/cn/Packages-cn/[email protected]/manual/cloudstorage.html
Codelab del servicio de almacenamiento en la nube:
https://github.com/AppGalleryConnect/agc-android-demos/tree/master/agc-cloudstorage-demo-java
Enlace original:https://developer.huawei.com/consumer/cn/forum/topic/0201454878602100779?fid=0101271690375130218
Autor: Mayism