快速集成華爲AGC雲存儲服務-Android

華爲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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章