iOS 分享小程序及配置Universal Links
最近要添加一个分享小程序的功能,顺便把以前手动集成的陈年SDK干掉,目前新的SDK多了个Universal Links,现在大致分享一下我的实现过程:
1.集成openSDK
1.手动集成。👉下载SDK.
2.通过 CocoaPods 集成。在工程的 Podfile 里面添加以下代码:
pod 'WechatOpenSDK'
保存并执行 pod install。
2.配置Universal Links
微信对Universal Links配置要求
a)Universal Links必须支持https
b)Universal Links配置的paths不能带query参数
c)微信使用Universal Links拉起第三方App时,会在Universal Links末尾拼接路径和参数,因此App配置的paths必须加上通配符/*
可以根据苹果文档配置,具体步骤如下:
1.服务器那边注册域名
服务器创建一个名字叫做apple-app-site-association,包含固定格式的json文件,不必添加.json的后缀名,放在https服务器的根目录下,文件中配置如下:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TeamID.BundleID",
"paths": [ "*" ]
}
]
}
}
登陆开发者中心,在Account -> Membership里面可以找到Team ID
如果服务器下面包括多个APP,可以在paths里面添加路径区分,例如:
"details": [
{
"appID": "TeamID.BundleID",
"paths": [ "/app1/*" ]
}
{
"appID": "TeamID.BundleID",
"paths": [ "/app2/*" ]
}
]
2.打开Capabilities → Associated Domains开关,将Universal Links域名加到配置上:
在这里插入图片描述例如:applinks:help.wechat.com
3. 验证你的Universal Links
a) Safari输入Universal Links(包括完整路径)+随机字符串(例如: abc)
下拉页面检查是否有打开app的入口提示(如下图)
image
b)在苹果官网验证: 验证地址
3.在微信开放平台注册APP
1.填写app相关信息,包括刚刚配置的通用链接,获得appid
[站外图片上传中...(image-f1c033-1586935178974)]
2.在URL Type中添加Schemes,填写注册的appid
image
- 在 “info.plist”中的“LSApplicationQueriesSchemes“添加
weixin
和weixinULAPI
image
4.分享小程序
1.向微信终端注册你的 id
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 向微信注册
[WXApi registerApp:APP_ID
universalLink:UNIVERSAL_LINK];
return YES;
}
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
如果你的程序要实现和微信终端交互的具体请求与回应,需要实现 WXApiDelegate 协议的两个方法
-(void) onReq:(BaseReq*)reqonReq
是微信终端向第三方程序发起请求,要求第三方程序响应。第三方程序响应完后必须调用 sendRsp 返回。在调用 sendRsp 返回时,会切回到微信终端程序界面。
-(void) onResp:(BaseResp*)resp
如果第三方程序向微信发送了 sendReq 的请求,那么 onResp 会被回调。sendReq 请求调用后,会切到微信终端程序界面。
2.分享小程序
WXMiniProgramObject *object = [WXMiniProgramObject object];
object.webpageUrl = webpageUrl; // 兼容低版本的网页链接
object.userName = userName; // 小程序的userName
object.path = path; // 小程序的页面路径
object.hdImageData = hdImageData; // 小程序新版本的预览图二进制数据,限制大小不超过128KB,自定义图片建议长宽比是 5:4
object.withShareTicket = withShareTicket; // 是否使用带shareTicket的分享
object.miniProgramType = programType; // 小程序的类型,默认正式版
WXMediaMessage *message = [WXMediaMessage message];
message.title = @"小程序标题";
message.description = @"小程序描述";
message.thumbData = nil; // 兼容旧版本节点的图片,小于32KB,新版本优先
// 使用WXMiniProgramObject的hdImageData属性
message.mediaObject = object;
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
req.bText = NO;
req.message = message;
req.scene = WXSceneSession; / /目前只支持会话
[WXApi sendReq:req];
官方提示:
1.发起分享的App与小程序属于同一微信开放平台帐号。
2.支持分享小程序类型消息至会话,暂不支持分享至朋友圈。
3.若客户端版本低于6.5.6或在iPad客户端接收,小程序类型分享将自动转成网页类型分享。开发者必须填写网页链接字段,确保低版本客户端能正常打开网页链接。
当用户首次使用新版本SDK发起分享时,将会出现如下交互流程:从App拉起微信-出现“正在连接”页面-返回App-重新打开微信。以上是新的安全验证流程,每个用户在首次使用时会出现上述跳转。(如同一用户多次使用分享都出现跳转,请Universal Links配置)
image
温馨提醒:
1.同一个微信开放平台帐号下的app和小程序不用特意添加关联,就可以分享。
2.webpageUrl这个链接必须设置,不然调不起微信
3.如果APP有转让到其他开发者账号的行为,记得更新Universal Links,更换新的TeamID,不然导致无法分享。
这是以小程序示例,微信分享及收藏目前支持文字、图片、音乐、视频、网页、小程序共六种类型(海外应用支持网页、小程序类型分享),官方文档上面写的很清楚,详情见👉分享指南