AppGallery Connect場景化開發實戰—圖片存儲分享

簡介

在上一篇場景開發實戰中,我們使用AppGallery Connect(以下簡稱AGC)的認證服務、雲函數、短信服務等服務實現了用戶註冊通知的功能。 本次,我們使用AGC提供的雲函數、雲存儲和App Linking三大服務實現了圖片的存儲、在線剪輯和分享功能,相關代碼已同步至Github

實現概覽

1、用戶在客戶端選擇需要上傳的圖片,調用雲存儲Android/iOS的上傳接口將圖片上傳至雲存儲。

2、創建處理圖片的雲函數,選擇雲存儲觸發器,每當雲存儲有新的圖片上傳都會觸發雲函數進行縮略圖處理。

3、雲函數中調用雲存儲Node.js SDK的下載文件接口將圖片下載至內存,通過特定方法處理圖片,而後調用雲存儲Node.js SDK中的上傳接口將處理完的圖片上傳回雲存儲。

4、端側通過雲存儲Android/iOS SDK下載雲存儲上的縮略圖後,通過AppLinking生成分享鏈接分享給好友,好友點擊鏈接後即可直接打開到應用的指定頁面。

端側上傳圖片至雲存儲

請登錄AppGallery Connect官方網站,並在控制檯中進行操作:

1、啓用雲存儲服務

2、創建新的存儲實例

3、設置雲存儲安全策略

4、設置雲存儲文件夾結構

在您的應用中進行的操作:

1、使用雲存儲Android SDK中的getStorageReference方法爲存放上傳文件的雲端地址創建引用:

AGCStorageManagement storageManagement = AGCStorageManagement.getInstance();
StorageReference reference = storageManagement.getStorageReference("images/demo.jpg");

2、調用SDK中的上傳接口將本地的文件上傳至存儲實例中: ··· UploadTask task = reference.putFile(new File("path/images/test.jpg")); task.addOnFailureListener(new OnFailureListener(){ @Override public void onFailure(@NonNull Exception exception) { } }).addOnSuccessListener(new OnSuccessListener<UploadTask.UploadResult>(){ @Override public void onSuccess(UploadTask.UploadResult uploadResult) { } }); ···

雲函數處理圖片尺寸

在您的應用中進行的操作:

1、調用雲存儲Node.js SDK指定需要下載的實例與存儲桶並指定本地地址:

const storage = new StorageManagement();
const bucket = storage.bucket("photo-7iawi");
const remoteFile = bucket.file(fileAddr);
localAddr = “\ImageProcess\picture”;

2、調用方法下載文件:

try {
        remoteFile.createReadStream()
        .on('error', err => {
          result = {"message":"download file error, " + err.message};
          callback(result);
        })
        .on('end', () => {
            result = {"message":"download file success"};
            // callback(result);
        })
        .pipe(fs.createWriteStream(localFile));
    } catch (error) {
        result = {"message":"download file error, " + error.message};
        callback(result);
    }

3、下載文件完成後進行處理圖片分辨率的操作。

4、圖片處理完成後將新的圖片上傳回雲存儲。

const options = {
        destination: 'thumbnail/' + fileName,
        onUploadProgress: (event) => {
        }
    };

    bucket.upload(imageAddr, options)
        .then(res => {
            result = {"message":"All Success"};
            callback(result);
        }).catch(err => {
            result = {"message":"upload failed"};
            callback(result);
        });

雲存儲觸發雲函數

在AppGallery Connect控制檯中進行的操作:

1、登錄AppGallery Connect,找到雲函數並啓用。

2、新建函數並設置函數名稱,部署信息等相關設置。

3、在“代碼文件”配置項處,上傳處理圖片尺寸的函數部署包至雲函數。

4、創建雲存儲觸發器,輸入之前創建的存儲實例名稱並選擇事件名稱爲Complete(意爲上傳圖片成功後開始觸發雲函數剪裁圖片)。

App Linking鏈接分享

請登錄AppGallery Connect官方網站,並在控制檯中進行操作:

1、啓用App Linking服務

2、啓用服務以後,在鏈接前綴頁籤,創建一個全網唯一的鏈接前綴。

3、配置您應用簽名的SHA256文件,具體的配置方法可參考 配置簽名指紋證書

在您的應用中進行的操作:

1、使用雲存儲接口獲取對應圖片的下載鏈接。

private String downloadUrl;
private void getDownLoadUrl() {
    AGCStorageManagement storageManagement = AGCStorageManagement.getInstance();
        StorageReference reference = storageManagement.getStorageReference("images/demo.jpg");
        Task<Uri> task = reference.getDownloadUrl();
        task.addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) { 
                String downloadUrl = uri.toString();
            }
        });
        task.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
            }
        });
    }

2、將下載鏈接和對應的圖片ID生成分享鏈接。


private String shortLink;
private static final String DOMAIN_URI_PREFIX = "https:// DomainUriPrefix.drcn.agconnect.link";
    private static final String SHARE_DEEP_LINK = "share://photo.share.com";
    private void createShareLinking(String UserName, String PhotoID, String ImageUrl) {
        String newDeep_Link = SHARE_DEEP_LINK  + "?PhotoID=" + PhotoID;
        AppLinking.Builder builder = AppLinking.newBuilder()
                .setUriPrefix(DOMAIN_URI_PREFIX)
                .setDeepLink(Uri.parse(ImageUrl))
                .setAndroidLinkInfo(AppLinking.AndroidLinkInfo.newBuilder()
                        .setAndroidDeepLink(newDeep_Link)
                        .build())
                .setSocialCardInfo(AppLinking.SocialCardInfo.newBuilder()
                        .setTitle("It is a beautiful Photo")
                        .setImageUrl(ImageUrl)
                        .setDescription(UserName + " share a Photo to you")
                        .build())
                .setCampaignInfo(AppLinking.CampaignInfo.newBuilder()
                        .setName("UserSharePhoto")
                        .setSource("ShareInApp")
                        .setMedium("MediumExample")
                        .build());
        builder.buildShortAppLinking().addOnSuccessListener(shortAppLinking -> {
            shortLink = shortAppLinking.getShortUrl().toString();
        }).addOnFailureListener(e -> {
        });
    }
		```
		
3、在AndroidManifest中配置Intent-Filter,用於接收App Linking鏈接並且直接拉起應用

<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host=" DomainUriPrefix.drcn.agconnect.link" android:scheme="http"/> <data android:host=" DomainUriPrefix.drcn.agconnect.link" android:scheme="https"/> </intent-filter> </activity> ```

4、在應用啓動頁的OnCreate方法中, 接收並且處理App Linking鏈接的方法。

AGConnectAppLinking.getInstance().getAppLinking(LoginActivity.this).addOnSuccessListener(resolvedLinkData -> {
	Log.i(TAG,"StartUp From AppLinking");
	if (resolvedLinkData!= null) {
		String deepLink = resolvedLinkData.getDeepLink().toString();
		// your action of StartUp From AppLinking 
	}
}).addOnFailureListener(e-> {
	Log.i(TAG,"Normal StartUp");
	// your action of Normal StartUp 
});

測試功能

您可以執行以下操作來測試圖片或視頻是否可以正常分享:

1、打開您的應用,隨機拍攝一張圖片存儲於手機中。

2、查看圖片上傳後的處理效果。

3、進入圖片詳情界面,點擊右上角的分享鏈接,查看是否生成鏈接併發送給好友。

4、使用好友帳號登錄應用,查收並點擊鏈接,測試是否可正常打開分享的圖片頁面。

更多參考,請下載Demo

參考文檔:

使用雲存儲上傳圖片:

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

使用Applinking分享鏈接:

https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-applinking-createlinks-bysdk-android-0000001055674692

創建雲函數:

https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-cloudfunction-config-0000001058511532

更多精彩內容,請見華爲開發者官方論壇→https://developer.huawei.com/consumer/cn/forum/home?ha_source=sanfang

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