共计 5089 个字符,预计需要花费 13 分钟才能阅读完成。
简介
在上一篇场景开发实战中,咱们应用 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/…
应用 Applinking 分享链接:
https://developer.huawei.com/…
创立云函数:
https://developer.huawei.com/…
更多精彩内容,请见华为开发者官方论坛→https://developer.huawei.com/…