在上一篇场景开发实战中,我们使用AppGallery Connect(以下简称AGC)的认证服务、云函数、短信服务等服务实现了用户注册通知的功能。 本次,我们使用AGC提供的云函数、云存储和App Linking三大服务实现了图片的存储、在线剪辑和分享功能,相关代码已同步至Github。
请登录AppGallery Connect官方网站,并在控制台中进行操作:
在您的应用中进行的操作:
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) {
- }
- });
在AppGallery Connect控制台中进行的操作:
在您的应用中进行的操作:
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、使用云存储接口获取对应图片的下载链接。
- 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
- });
您可以执行以下操作来测试图片或视频是否可以正常分享:
更多参考,请下载Demo。
欲了解更多详情,请参见:
华为官网:
https://developer.huawei.com/consumer/cn/forum/topic/0203726140997690403?fid=0101271690375130218?ha_source=zzh
参考文档:
使用云存储上传图片:
使用Applinking分享链接:
创建云函数: