Unity | 快速集成華為AGC雲存儲服務


華為AppGallery Connect提供了一個雲存儲(CloudStorage)的服務,號稱提供了一個便捷的雲端存儲服務,應用開發者使用的時候,可以不用關注服務器的部署,直接使用就行。

目前這個功能還在bate階段,我先搶先體驗了一下。

1、 環境與應用信息

版本名稱 集成環境 測試設備
agconnect-storage:1.3.1.100 Unity 2019.4.17f1c1 榮耀magic2

AGC地址:https://developer.huawei.com/consumer/cn/service/josp/agc/index.html

2、開通雲存儲服務

PS: 雲存儲服務目前還處於beta狀態,使用前應該發郵件去申請開通:
https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-cloudstorage-apply

開通步驟也就是界面點擊而已,此處就不詳細介紹了,大家可以參考之前的文檔
https://developer.huawei.com/consumer/cn/forum/topic/0201411971207960391?fid=0101271690375130218

3、導入Unity Package:

官方文檔:
https://docs.unity.cn/cn/Packages-cn/com.unity.huaweiservice@1.3/manual/cloudstorage.html

1、 下載Unity Hub,安裝Unity
https://unity.cn/releases。 下載安裝就不詳細介紹了。

2、 Android環境配置:可參考如下截圖

在這里插入圖片描述

3、導入HuaweiServices的Package包:
首先從鏈接下載package:
https://share.unity.com/receive/?thread=237D-JA9D&packageCode=DzIiMvUpSO7GsT3dPV2M8qyBaw3R5bcbRhwD5RurQNM#keyCode=lkkIcH1nco7DIoL90AOReE0hwINGMsFP7mjwBAkg4_c

(當前該包還未完全對外開放)

下載到本地以后,在Unity中點擊assets – Import package
在這里插入圖片描述

然后,然后選擇需要的包,點擊Import即可

4、AGC環境配置

1、 配置華為AGC上的參數:回到AGC控制台:找到之前創建的App:

https://developer.huawei.com/consumer/cn/service/josp/agc/index.html

2、選擇:我的項目-> 構建 – 雲存儲 點擊開通,開通雲存儲服務,需要配置默認的存儲實例名稱。(按需配置即可)

為方便無需認證即可讀寫數據,安全策略配置為:

agc.cloud.storage[
   match: /{bucket}/{path=**} {
      allow read, write:  if true;
   }
]

3、 服務開通以后,回到項目設置界面,下載最新的json文件。

在這里插入圖片描述

4、 將剛下載好json文件,放到Unity項目Assets / Plugins / Android目錄下:

注意,如果下載的json文件中,cloudstorage下沒有default_storage參數,請手動添加:此處添加的值即為步驟三中配置的默認存儲實例。

在這里插入圖片描述

5、設置Unity中的Android環境:

1、在Player-Publish Setting中啟用Android的自定義清單和gradle

在這里插入圖片描述

2、在Other Setting中配置包名:注意需要和AG官網的包名保持一致:

在這里插入圖片描述

3、配置項目級gradle,此處對應Assets\Plugins\Android路徑下的baseProjectTmeplate.gradle文件,添加如下內容

    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/' }
        }
    }
  1. 配置應用級gradle,此處對應Assets\Plugins\Android路徑下的LauncherTmeplate.gradle文件,添加如下內容:
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'
  1. 配置Manifest文件:申請讀寫權限,用於讀寫文件
<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、從零開發雲存儲功能

1、界面布局:

依次點擊GameObject- UI –Button, 創建一個按鈕。 點擊選中按鈕,然后在右側選擇 Add Component, 創建並且添加一個Script文件。在文件中創建對應的方法

在這里插入圖片描述

2、初始化雲存儲實例、並且申請讀寫權限。

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、上傳文件:

     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、下載文件

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、刪除文件

public void deleteFile() {
        if (mAGCStorageManagement == null){
            initAGCStorageManagement();
        }
        
        StorageReference reference = mAGCStorageManagement.getStorageReference("testUnity.jpg");
        reference.delete();
        Debug.Log("DeleteFileTest success.");
    }

6、打包測試

打包的安裝好以后,點擊每個按鈕的同時,可以在Android Logcat中,篩選Unity關鍵字,查看Debug.Log輸出的相關日志。

上傳和下載時,同步關注agc界面上文件的變化

7、總結

僅關注前端應用的開發,就可以利用AGC雲存儲服務在unity上開發一個帶雲端存儲服務功能的游戲,不用為了服務器的搭建和運維擔心,省時省力。而且雲存儲服務還提供了類似於管理員模式的web控制台,可以簡單直觀的對服務器上的文件進行管理。

這個雲存儲服務,除了最普通的上傳下載和刪除功能,還包括有設置元數據等功能,具體可以看官方文檔:

欲了解更多詳情,請參見:

雲存儲服務開發指南:

https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-cloudstorage-introduction

Unity關於雲存儲的文檔:

https://docs.unity.cn/cn/Packages-cn/com.unity.huaweiservice@1.3/manual/cloudstorage.html

雲存儲服務codelab:

https://github.com/AppGalleryConnect/agc-android-demos/tree/master/agc-cloudstorage-demo-java


原文鏈接:https://developer.huawei.com/consumer/cn/forum/topic/0201454878602100779?fid=0101271690375130218

原作者:Mayism


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM