简介

在上一篇场景开发实战中,咱们应用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(){

@Overridepublic void onFailure(@NonNull Exception exception) {}

}).addOnSuccessListener(new OnSuccessListener<UploadTask.UploadResult>(){

@Overridepublic 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/...

应用Applinking分享链接:

https://developer.huawei.com/...

创立云函数:

https://developer.huawei.com/...

更多精彩内容,请见华为开发者官方论坛→https://developer.huawei.com/...