华为AppGallery Connect提供了一个云存储(CloudStorage)的服务,号称提供了一个便捷的云端存储服务,利用开发者应用的时候,能够不必关注服务器的部署,间接应用就行。
目前这个性能还在bate阶段,我先领先体验了一下。如果你想疾速体验云存储服务的性能,请参考demo。
1、环境与利用信息
版本名称 | 集成环境 | 测试设施 |
---|---|---|
agconnect-storage:1.3.1.100 | Android Studio | 光荣Magic 2 |
AGC地址:https://developer.huawei.com/consumer/cn/service/josp/agc/index.html
SDK集成形式:Maven仓集成,对接华为Maven仓:
implementation 'com.huawei.agconnect:agconnect-storage:1.3.1.100'
2、在AGC上开明云存储:
PS: 云存储服务目前还处于beta状态,我是发了邮件申请开明才能够应用的:
https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-cloudstorage-apply
在我的我的项目 下抉择你的开发我的项目,在构建上面,找到云存储服务,点击开明:
没有Android我的项目的话,能够先本人创立一个。
开明服务的时候,须要先配置存储实例,这里按需配置就能够,我就轻易配置一个。
下一步,还须要配置安全策略,这里应用默认的安全策略就好:
PS:默认的状况是,只有通过身份认证的用户能力进行读写。
3、在Android我的项目里集成SDK
a) 集成SDK
1、在我的项目级的gradle文件中增加华为Maven,配置如下内容
buildscript {repositories {//… maven {url 'https://developer.huawei.com/repo/'} } dependencies { //… classpath 'com.huawei.agconnect:agcp:1.4.1.300' }} allprojects {repositories {//… maven {url 'https://developer.huawei.com/repo/'} }}
2、关上利用级的build.gradle文件,配置好云存储的SDK和华为认证服务的SDK,配置上面标红的内容即可。留神别落了下面的agcp插件。
apply plugin: 'com.android.application'apply plugin: 'com.huawei.agconnect'android {…..} dependencies { //… implementation 'com.huawei.agconnect:agconnect-auth:1.4.1.300' implementation 'com.huawei.agconnect:agconnect-storage:1.3.1.100'}
b) 下载json文件,并且配置默认存储实例
1、在AGC界面上,抉择 我的我的项目 -> 我的项目设置–> 惯例 上面,下载agconnect-services.json文件到你的Android我的项目的app门路下。
2、记得查看你的json文件,留神是否有default_storage,如果没有的话,须要自行添加。
4、前置步骤
1、申请权限
须要先申请文件的读写权限和网络拜访权限,在Mainfest.xml文件外面application的外层,配置上面这些代码来申请权限:
留神android:allowBackup的参数必须为false。
<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"/>
2、界面布局
设置几个按钮,通过点击按钮来实现性能:包含上传,下载文件,和删除文件的按钮。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" tools:context=".MainActivity"> <Button android:onClick="uploadFile" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false" android:text="Upload File" /> <Button android:onClick="downloadFile" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false" android:text="Download File" /> <Button android:onClick="deleteFile" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false" android:text="Delete File" /> <TextView android:id="@+id/showResult" android:enabled="false" android:hint="This will display the result of the operation" android:layout_width="match_parent" android:layout_marginTop="10dp" android:gravity="center" android:layout_height="wrap_content" /> </LinearLayout>
5、性能开发:
1、先初始化参数
在MainActivity,先初始化参数:包含,云存储实例,展现音讯框,以及相干权限。
private AGCStorageManagement mAGCStorageManagement; private TextView mShowResultTv; private String[] permissions = { Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mShowResultTv = findViewById(R.id.showResult); AGConnectInstance.initialize(getApplicationContext()); login(); ActivityCompat.requestPermissions(this, permissions, 1); }
2、相干办法:匿名登录&获取门路
匿名认证办法:对于云存储的数据操作,须要通过华为认证服务,这里为了简化,就仅应用华为的匿名认证:
private void login() { if (AGConnectAuth.getInstance().getCurrentUser() != null) { System.out.println("already sign a user"); return; } AGConnectAuth.getInstance().signInAnonymously().addOnSuccessListener(new OnSuccessListener<SignInResult>() { @Override public void onSuccess(SignInResult signInResult) { System.out.println("AGConnect OnSuccess"); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { // onFail } });}
获取文件门路的办法:对于云存储的数据操作,上传时候本地文件的获取,以及云端文件的下载寄存,都是在这个门路下, 即 /AGCSdk门路下
private String getAGCSdkDirPath() { String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AGCSdk/"; System.out.println("path=" + path); File dir = new File(path); if (!dir.exists()) { dir.mkdirs(); } return path; }
3、初始化云存储实例
云存储的每一步操作之前,都须要确保曾经进行初始化了云存储实例
private void initAGCStorageManagement() { mAGCStorageManagement = AGCStorageManagement.getInstance();}
4、上传文件:
须要先获取到本地文件 ,以及这个文件的门路,而后创立文件援用,对文件的进行上传的uploadTask操作。
public void uploadFile(View view) { if (mAGCStorageManagement == null) { initAGCStorageManagement(); } final String path = "test.jpg"; String fileName = "test.jpg"; String agcSdkDirPath = getAGCSdkDirPath(); final File file = new File(agcSdkDirPath, fileName); if (!file.exists()) { mShowResultTv.setText("file is not exist!"); return; } StorageReference storageReference = mAGCStorageManagement.getStorageReference(path); UploadTask uploadTask = storageReference.putFile(file); try { uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.UploadResult>() { @Override public void onSuccess(UploadTask.UploadResult uploadResult) { mShowResultTv.setText("upload success!"); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { mShowResultTv.setText("upload failure!" + e.getMessage()); } }); } catch (Exception e) { e.printStackTrace(); }}
5、下载文件:
须要先在本地设施中创立该文件,包含这个文件的门路和文件名。而后创立一个云端文件名称的援用,对这个文件的援用的进行下载的downloadTask操作。
public void downloadFile(View view) { if (mAGCStorageManagement == null) { initAGCStorageManagement(); } String fileName = "download_" + System.currentTimeMillis() + ".jpg"; final String path = "test.jpg"; String agcSdkDirPath = getAGCSdkDirPath(); final File file = new File(agcSdkDirPath, fileName); StorageReference storageReference = mAGCStorageManagement.getStorageReference(path); DownloadTask downloadTask = storageReference.getFile(file); try { downloadTask.addOnSuccessListener(new OnSuccessListener<DownloadTask.DownloadResult>() { @Override public void onSuccess(DownloadTask.DownloadResult downloadResult) { mShowResultTv.setText("download success!"); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { mShowResultTv.setText("download failure!" + e.getMessage()); } }); } catch (Exception e) { e.printStackTrace(); }}
6、删除文件:
首先,先指定一个文件名为test.jpg的文件,对这个文件名创立一个援用,而后对该援用执行deleteTask操作,就能够将云端的test.jpg删除了。
public void deleteFile(View view) { if (mAGCStorageManagement == null) { initAGCStorageManagement(); } final String path = "test.jpg"; System.out.println(String.format("path=%s", path)); StorageReference storageReference = mAGCStorageManagement.getStorageReference(path); Task<Void> deleteTask = storageReference.delete(); try { deleteTask.addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { mShowResultTv.setText("delete success!"); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { mShowResultTv.setText("delete failure!" + e.getMessage()); } }); } catch (Exception e) { e.printStackTrace(); } }
6、打包测试:
Android Studio连贯手机,而后将该安卓我的项目运行到手机上。
1、筹备好初始文件
关上手机的文件管理器,找到 外部存储/AGCSdk/ 门路下,增加并且筹备一个test.jpg文件。如下图所示:
2、上传文件 & 上传后果
关上刚刚的利用,点击Upload File 按钮,查看上传后果
此时AGC界面上,也能够看到刚刚上传的文件:
2、下载文件 & 下载后果
在利用内点击下载按钮,能够看到界面显示 下载胜利。
此时回到文件管理器,能够看到刚刚下载的文件。
2、删除文件 & 删除后果
点击利用外面的删除按钮,能够看到利用界面上显示删除胜利。
此时到AGC界面上确认下载后果,发现刚刚的test.jpg文件曾经被删除了
7、总结
仅关注前端利用的开发,就能够开发一个带云端存储服务器的利用。再也不必为了服务器的搭建和运维放心,省时省力。而且还提供了相似于管理员模式的web控制台,能够简略直观的对服务器上的文件进行治理。
这个云存储服务,除了最一般的上传下载和删除性能,还包含有列举文件,设置元数据等性能,具体能够看官网文档:
云存储服务开发指南:
https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-cloudstorage-introduction
云存储codelab:
https://developer.huawei.com/consumer/cn/codelab/CloudStorage/index.html#1
原文链接:https://developer.huawei.com/consumer/cn/forum/topic/0201411971207960391?fid=0101271690375130218
原作者:Mayism