快速实现以深度链接为基础的闭环分享功能 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MobService
V2EX    问与答

快速实现以深度链接为基础的闭环分享功能

  •  
  •   MobService 2019-07-26 12:13:32 +08:00 1076 次点击
    这是一个创建于 2274 天前的主题,其中的信息可能已经有所发展或是发生改变。

    什么是闭环分享

    现在,市场上主流 app 都具有分享功能。但是绝大部分 app 的分享功能仅仅局限于分享出去,而且在微信限制了开发者获取分享结果状态后,通过分享功能进行 app 或者业务推广的方式受到很大的限制。比如说:

    1.你不知道用户是否真的分享了 2.不知道分享的链接传播效果怎么样,多少人点击 3.不知道如何有效的引导用户到 App,转化沉淀成自己的客户

    ShareSDK 从这几个问题入手,基于深度链接打造出闭环分享功能,从而真正意义上解决以上烦恼。使用体验如下:

    快速实现以深度链接为基础的闭环分享功能 快速实现流程

    一、注册、登陆开发者后台

    打开 Mob 官网 点击右上角登陆或注册

    成功登陆后,点击进入 “产品中心” ,如下图:

    快速实现以深度链接为基础的闭环分享功能 在 “开发者服务” --> “开发者平台” 栏目,点击 “立即进入” ,进入之后如下图:

    快速实现以深度链接为基础的闭环分享功能 二、下载 SDK 包

    先进入 Mob 官网 SDK 下载页 ,iOS 开发者请从官网下载,如下图:

    快速实现以深度链接为基础的闭环分享功能 保存配置后即可点击 “下载” ,如下图:

    快速实现以深度链接为基础的闭环分享功能 安卓请使用 Gradle 在线集成,先选择配置,再使用 Gradle 脚本,如下图:

    快速实现以深度链接为基础的闭环分享功能 快速实现以深度链接为基础的闭环分享功能 三、开发者后台配置

    如果您尚未使用 ShareSDK,请点击 “添加应用” ,输入您的 “应用名称” ,点击 “保存”,如下图:

    快速实现以深度链接为基础的闭环分享功能 然后在左边栏点击 “ ShareSDK ” ,在弹出框中选择 “确定添加” ,如下图:

    快速实现以深度链接为基础的闭环分享功能 如果您已经使用了 ShareSDK,请选择您的应用并打开 ShareSDK 边栏,点击 “闭环分享” 标签,如下图:

    快速实现以深度链接为基础的闭环分享功能 图上有对闭环分享功能的简单介绍和相关集成文档,直接点击 “立即体验” 即可开始使用,点击后如下图:

    快速实现以深度链接为基础的闭环分享功能 对于 iOS 开发者,请配置好 “ TeamID ” 、 “ Bundle ID ” 和 “下载地址” ,然后点击 “保存设置” ,如下图:

    快速实现以深度链接为基础的闭环分享功能 图上系统自动生成的 “ Scheme ” 和 “ Association Domain ” 是用于 Xcode 项目配置的,请参考下文: 五、iOS 客户端开发配置

    对于安卓开发者,请将配置标签切换到 “ Android ” 填写好 “下载地址” 和 “微信应用宝”的微下载链接, 如下图:

    快速实现以深度链接为基础的闭环分享功能 图上系统自动生成的 “ Scheme ” 和 “ App Links Host ” 是用于安卓项目配置的(使用 Gradle 集成的可以不用考虑这个),请参考下文 六、安卓客户端开发配置

    到此,开发者后台就完成了,下面请开始您简单轻松的客户端和网页端开发配置吧!

    四、前端网页 JS 初始化

    闭环分享讲究的是网页内容不仅能够被分享,更是能够回环到 App,所以使用闭环分享功能时需要前端网页做一个简单的 JS 集成初始化。

    打开您 App 中分享出去的网页源码 (仅在需要的网页中进行以下配置) ,在适当的位置引用我们提供的在线 JS,如下图:

    快速实现以深度链接为基础的闭环分享功能 在线 JS 地址为开发者后台看到的 iOS 配置中 “ Association Domain ” 的域名或者安卓配置中的**“ App Links Host ”** 域名下的 moblink.js ,例如根据上面开发者后台展示的结果则为:ahmn.t4m.cn/moblink.js ,在 JS 中直接通过 <script> 标签引入: <script type="text/Javascript" src="http://www.v2ex.com//ahmn.t4m.cn/moblink.js"></script> JS 引入之后即可写一段 JS 初始化代码了,如下图:

    快速实现以深度链接为基础的闭环分享功能 关于 JS 初始化代码的释义如下:

    <script type="text/Javascript"> MobLink([ //初始化对象叫 MobLink { path: "share/link", //path 字段保留字段,暂时不具使用意义 params: { //params 字段是网页回环跳转到 App 时带给 App 的参数 // targetAction_iOS 和 targetAction_And 这两个字段是必须字段,对应 iOS 的一个 Controller 的名字和安卓的一个 Activity 的名字,请让 iOS 和安卓的小伙伴提供 targetAction_iOS: "MOBAboutMobLinkViewController", targetAction_And: "ShareMobLinkActivity", // 以下是可选字段,这些字段会原封不动的带给客户端 App,以某小说 App 的网页为例,下面配置字段表示的含义是:跳转到 App 时告诉 App 这部小说名字[name]叫什么, 当前在读哪一页[pageid],阅读进度[process]是多少 name: "闭环分享", pageid: 1, process: 89, } } ]) </script>

    以上 JS 代码初始化完成之后您的网页上将会多出一个浮层类似于下图:

    快速实现以深度链接为基础的闭环分享功能 注意:仅手机模式下可见!建议通过谷歌浏览器的检查器调试。 至此,前端 JS 的配置工作就完成了,还是比较简单的。这个时候等客户端配置好了,点击上图浮层中的 “打开 App ” 按钮即可立即跳转到您的 App 客户端,并将对应的参数携带给您的 App 了。

    五、iOS 客户端开发配置

    iOS 客户端比较简单就只有两步,Xcode 配置和代码开发:

    1、Xcode 配置

    主要配置 Scheme 和 “ Association Domain ” ,直接从开发者后台复制、粘贴即可 scheme 配置如下图:

    快速实现以深度链接为基础的闭环分享功能 Association Domain 配置如下图:

    快速实现以深度链接为基础的闭环分享功能 提示:由于 “ Association Domain ” 是需要 iOS 证书打开该权限的,所以您可能需要更新一下您的证书,确保已开启该权限,否则 Xcode 会报错。 2、代码开发

    场景还原设置代理

    #import <ShareSDKExtension/ShareSDK+Extension.h> #import <ShareSDKExtension/SSERestoreSceneHeader.h> @interface AppDelegate () <isserestorescenedelegate> @end @implementation AppDelegate</isserestorescenedelegate>

    • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [ShareSDK setRestoreSceneDelegate:self]; ... } ... #pragma mark - ISSERestoreSceneDelegate
    • (void)ISSEWillRestoreScene:(SSERestoreScene *)scene Restore:(void (^)(BOOL))restoreHandler { //YES:进行场景还原,NO:不执行场景还原 restoreHandler(YES); } @end 还原的场景视图配置

    // 以下分类默认已经实现- (instancetype) initWithShareSDKScene:(SSERestoreScene *)scene 方法,Build Settings -> Other Linker Flags 添加 -ObjC 所有 ViewController 自动实现此方法 #import <ShareSDKExtension/UIViewController+SSERestoreScene.h> // 用户如果需要获取透传的参数,对 ViewController 其他属性赋初值可以重写覆盖- (instancetype) initWithShareSDKScene:(SSERestoreScene *)scene 方法如下: // 例如 DemoViewController 为还原回来的场景视图 @interface DemoViewController () @property(nonatomic, strong) SSERestoreScene *scene; @end @implementation DemoViewController

    • (instancetype) initWithShareSDKScene:(SSERestoreScene *)scene { if (self = [super init]) { self.scene = scene; ... } return self; }
    • (void)viewDidLoad { [super viewDidLoad]; ... } .... @end 六、安卓客户端开发配置

    指定跳转的 Activity

    在 四、前端网页 JS 初始化 部分,初始化代码中 targetAction_And 字段设定的值即为要跳转的 Activity 名称,您需要在项目中创建一个与设定的名称相同的 Activity。

    获取场景数据

    HashMap<String, Object> customDataMap = ShareSDK.getCustomDataFromLoopShare(); 在跳转的目标 Activity 内(即上一步中设定的 Activity ),调用此接口来获取所需的场景数据。类型已经转换为 HashMap 类型,可以直接调用 toString() 方法来获取数据。

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1190 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 23:44 PVG 07:44 LAX 16:44 JFK 19:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86