Android通用分享技术

提供海外用户从app分享到其他社交平的功能,具体包括分享到Facebook、Instagram 、Tiktok 、Whats app 等平台。

技术方案对比

1.接入各个平台的分享SDK
优点:
(1)sdk有分享结果回调,可以知道用户是否分享成功或是否留在目标app
(2)sdk的数据传输和页面跳转适配的更好

缺点:
(1)需要申请各个平台开发者账号,流程冗杂,官方文档也不够全面,存在各种配置的疑难杂症。如facebook的调试和发布密钥不同,需要根据发布签名生产对应的密钥等
(2)引入sdk需要加入对应的maven仓库和依赖 ,需要对国内海外版本进行区分写两套代码,增加了编码的复杂度
(3)增加海外包体积
(4)因为是对方sdk,出现问题时较难分析,并且可能依赖对方平台解决

2.使用系统分享获取目标app具体的页面,指定该页面进行跳转
优点:
(1) 不需要申请各平台开发者账号、引入依赖,有各种配置问题等,实现成本较小
(2) 不会增加包体积
(3) 最终实现效果优于sdk效果,如facebook
(4) 出错概率较小,没有sdk的各种疑难杂症

缺点:
(1) 没有分享结果回调,不能精确知道用户在进入目标app后是否分享成功,是否留在目标app等
(2) 可能存在app跳转分享页后不回到咱们app的情况
(3) 部分app没有分享的标注
(4) android 各个手机系统兼容性可能会存在问题,增加了测试的成本

海外分享现状

大多数app如Twitter、YouTube、instagram、Facebook都倾向于调用系统分享,尽可能不引入sdk。
经过我的实操了解,即使instagram和facebook是同一家公司的app,但是ins也没有引入facebook的分享sdk,而是调用系统分享。

下面以facebook 分享为例实践说明

1.引入Facebook share-sdk
具体可以访问 https://developers.facebook.com/docs/sharing/android

2.获取目标页面类名进行系统分享
这个方式的难点在于我们需要知道唤起目标页面的意图Intent名称。而官方文档中只给出了STORY和REELS,并没有FEED动态的具体意图名。
在这里插入图片描述
在这里插入图片描述

(1)通过获取系统分享所有的意图,找到facebook对应的动态意图。
ACTION_SEND表示能够接受共享文件的Activity,setType设置了共享文件的类型,就排除了一些不能接受对应数据类型的Activity,这里我需要的是共享视屏的actvit,其他依次类推。

Intent it = new Intent(Intent.ACTION_SEND);
it.setType("video/*");
List<ResolveInfo> resInfo = activity.getPackageManager().queryIntentActivities(it, 0);
   if (!resInfo.isEmpty()) {
       for (ResolveInfo info : resInfo) {
           ActivityInfo activityInfo = info.activityInfo;
           Log.e("layfolk", "activityInfo:" + activityInfo);
       }
   }

在这里插入图片描述
这样就将系统分享意图的中的Facebook相关的具体意图找到了。再根据名称简单判断或者多次修改CompoentName尝试看看实现效果,最终可以找到我们的目标页面的类。

(2)设置intent 的CompoentName
这样我们就通过调用系统分享的方式,直接能够调起系统分享列表中的任何一个意图了。

在接入其他需要分享的平台时同样可以采取这种方式

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值