Cocos|快速集成华为AGC云存储服务

华为AppGallery Connect提供了一个云存储(CloudStorage)的服务,号称提供了一个便捷的云端存储服务,应用开发者使用的时候,能够不用关注服务器的部署,直接使用就行。html

目前这个功能还在beta阶段,我先抢先体验了一下。前端

一、环境与应用信息

在这里插入图片描述

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

SDK集成方式:在Cocos Creator中开通集成android

二、在AGC上开通云存储:

PS: 云存储服务目前还处于beta状态,使用前应该发邮件去申请开通:web

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

个人项目 下选择你的开发项目,在构建下面,找到云存储服务,点击开通:安全

没有Android项目的话,能够先本身建立一个。服务器

在这里插入图片描述

开通服务的时候,须要先配置存储实例,这里按需配置就能够,我就随便配置一个。app

在这里插入图片描述

下一步,还须要配置安全策略,这里使用默认的安全策略就好:运维

PS:默认的状况是,只有通过身份认证的用户才能进行读写。

在这里插入图片描述

三、在Cocos Creator项目集成SDK

3.1 集成SDK

官方文档:https://docs.cocos.com/creator/manual/zh/cocos-service/agc-applinking.html

(1)在 Cocos 服务面板接入所需的云存储服务。目前 SDK 仅支持 Android 平台

在这里插入图片描述

(2)接入相关的服务前,须要先关联APP,在服务界面点击启用后,再点击 关联 按钮,点击建立后,会跳转到Cocos的管理台,

在这里插入图片描述

(3)能够根据我的须要建立一个新游戏

(4)建立完成后,就能够回到Cocos Creator界面新建,刷新和选择进行应用的关联,
在这里插入图片描述

(5)而后就能够回到云存储界面,能够正式进行服务的开通了
在这里插入图片描述

(6)服务开通之后,须要配置默认的存储实例,此处须要填写AGC界面上的已经开通云存储的项目的默认桶。

在这里插入图片描述

3.2 下载json文件

(1) 服务开通之后,回到项目设置界面,下载最新的json文件。
在这里插入图片描述

(2)将刚下载好json文件,放到Cocos项目的settings目录下

在这里插入图片描述

四、前置步骤

4.1 修改安全规则

默认的安全规则下,须要通过华为认证的用户,才能进行云存储文件操做。

为了集成方便,特意修改云存储的安全规则,将安全规则修改成所有容许,此时无需通过华为认证,就能够对云存储中的文件进行操做。

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

在这里插入图片描述

4.2 界面布局

在Cocos Creator上设置几个按钮,经过点击按钮来实现功能:包括例举文件,上传,下载文件,和删除文件的按钮。

在这里插入图片描述

五、 功能开发:

5.1 初始化,而且在Start中建立监听

start () {      
        this._storage = huawei.agc.storage;
                 this._storage.storageService.on("error", data => console.log("Cloud Storage", `error : ${data.errCode}:${data.errMsg}`), this);
                 this._storage.storageService.on("get-file-metadata", data => console.log("Cloud Storage", JSON.stringify(data)), this);
                 this._storage.storageService.on("update-file-metadata", data => console.log("Cloud Storage", JSON.stringify(data)), this);
                 this._storage.storageService.on("delete-file", data => console.log("Cloud Storage", JSON.stringify(data)), this);
                 this._storage.storageService.on("list-file", data => console.log("Cloud Storage", JSON.stringify(data)), this);
                 this._storage.storageService.on("get-download-url", data => console.log("Cloud Storage", JSON.stringify(data)), this);
                 this._storage.storageService.on("task", data => {
                         console.log("Cloud Storage", JSON.stringify(data));
                         if (data.task instanceof this._storage.AGCDownloadTask && data.status === 'successful') {
                                  jsb.fileUtils.renameFile(jsb.fileUtils.getWritablePath() + "/output.json", jsb.fileUtils.getWritablePath() + "/output1.json");
                         }
                 }, this);
                 // 建立根目录的引用
                 this.rootReference = huawei.agc.storage.storageService.getInstance().getStorageReference();
    },

5.2 例举文件

使用ListALL方法,例举全部文件:

listAll:function () {
    this.rootReference.listAll();
    console.log('Cloud Storage', 'ListAll file');
}

5.3 下载文件

下载一个云端的,名为test.jpg的文件,而且从新命名为test1.jpg。

download:function () {
// 先 delete 文件,避免文件已存在致使下载失败
jsb.fileUtils.removeFile(jsb.fileUtils.getWritablePath() + "/test.jpg");
this.rootReference.child("test.jpg").getFile(jsb.fileUtils.getWritablePath() + "/test1.jpg");
console.log('Cloud Storage', 'download test.jpg, and reNamed test1.jpg');
},

5.4 上传文件

上传刚刚下载的test1.jpg文件

upload:function () {
                 if (!jsb.fileUtils.isFileExist(jsb.fileUtils.getWritablePath() + "/test1.jpg")) {
                         return console.log('Cloud Storage', 'local file test1.jpg not exist, please click Download!')
                 }
        this.rootReference.child("test1.jpg").putFile(jsb.fileUtils.getWritablePath() + "/test1.jpg");
        console.log('Cloud Storage', 'upload test1.jpg');
    },

5.5 删除文件

删除本地的,以及云端的test1.jpg文件。

delete:function () {
        this.rootReference.child("test1.jpg").delete();
        console.log('Cloud Storage', 'delete test1.jpg success!')
                 jsb.fileUtils.removeFile(jsb.fileUtils.getWritablePath() + "/test1.jpg");
        },

六、打包测试:

使用Cocos creator的build,打包一个Android文件,而且安装到设备上,验证功能点是否正确。

android:allowBackup="false"

注意打包的时候,若是API选择的是android-30,则须要把AndroidManifest文件中的android:allowBackup属性,修改成false。

6.1 例举文件

点击ListALL按钮,在Logcat中查看全部列举的文件:在日志中筛选查看Cloud Storage,查看结果
在这里插入图片描述

6.2 下载文件

点击download按钮,在日志中查看下载结果:

在这里插入图片描述

6.3 上传文件

点击Upload按钮,在日志中查看下载结果:

在这里插入图片描述

此时在AGC界面上,也能够看到刚刚上传的test1.jpg文件
在这里插入图片描述

6.4 删除文件

点击delete按钮,在日志中查看下载结果:
在这里插入图片描述

此时在AGC界面上,也能够刚刚上传的test1.jpg文件已经被删除

在这里插入图片描述

七、总结

仅关注前端应用的开发,就能够在Cocos上开发一个带云端存储服务功能的游戏。不再用为了服务器的搭建和运维担忧,省时省力。并且还提供了相似于管理员模式的web控制台,能够简单直观的对服务器上的文件进行管理。

这个云存储服务,除了最普通的上传下载和删除功能,还包括有设置元数据等功能,具体能够看官方文档:

  欲了解更多详情,请参见:

  云存储服务开发指南:

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

  Cocos关于云存储的文档:
https://docs.cocos.com/creator/manual/zh/cocos-service/agc-cloudstorage.html


原文连接:
https://developer.huawei.com/consumer/cn/forum/topic/0201419625098590546?fid=0101271690375130218做者:Jessyyyyy

相关文章
相关标签/搜索