接上篇Swift手记1——Universal Links在Swift上的应用。学会如何使用通用链接(Universal Links)之后,接入微信分享SDK就手到擒来了。
直接对照微信官方文档iOS接入指南步骤进行即可,这里简单总结一下。
环境要求
SDK版本: SDK1.8.6或以上
微信版本: 7.0.7或以上
系统版本: iOS12或以上
微信Universal Links状态检查
也就是检查一下微信的通用链接是否可以正常使用,有两种方法(ps:使用真机且已安装微信):
1.在Safari中输入
https://help.wechat.com/app/
页面加载结束后下拉查看是否有跳转微信的入口,若无入口,可能是由于系统拉取微信Universal Links失败,请检查手机网络状态是否正常,或更新/重装微信,这也是接入指南中使用的方法。
2.在备忘录中输入
https://help.wechat.com/app/
输入完成后隐藏键盘,可以看到链接变成可点击的超链接状态,点击后可直接跳转到微信App。
确认App的Universal Links配置成功
即确认你的App是否已经支持Universal Links了,这个在上一篇文章Swift手记1——Universal Links在Swift上的应用中已经检查过了,pass。
开始接入
1.确保你的App已经完成Universal Links的配置且验证通过。
2.向微信注册你的应用程序id和Universal Links
请到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将获得AppID,可立即用于开发。但应用登记完成后还需要提交审核,只有审核通过的应用才能正式发布使用。
ps:这里记得要正确填写你的Bundle ID和在Universal Links。
3.通过cocoapods集成微信SDK。
⑴创建podfile文件
⑵添加pod 'WechatOpenSDK'
⑶执行pod install命令
⑷新建Header File文件(该SDK为OC版本,添加桥接文件后才能通过swift调用)
⑸添加代码#import "WXApi.h"
⑹编译通过,集成完毕
4. 在 Xcode 中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序 id(如下图所示)。
5.在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在 “info”标签栏的“LSApplicationQueriesSchemes“添加weixin 和weixinULAPI(如下图所示)。
6.在Appdelegate中实现WXApiDelegate协议,并实现两个方法
func onReq(_ req: BaseReq)
是微信终端向第三方程序发起请求,要求第三方程序响应。第三方程序响应完后必须调用 sendRsp 返回。在调用 sendRsp 返回时,会切回到微信终端程序界面。
func onResp(_ resp: BaseResp)
如果第三方程序向微信发送了 sendReq 的请求,那么 onResp 会被回调。sendReq 请求调用后,会切到微信终端程序界面。
具体在此两方法中所要完成的内容由你定义,具体可参考微信开发工具包中的 SDK Sample Demo 源码。
7.在Appdelegate中向微信终端注册你的id
func application(_application:UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey:Any]?) ->Bool{
// Override point for customization after application launch.
//向微信注册
WXApi.registerApp("YOUR_APP_ID", universalLink: "YOUR_UNIVERSAL_LINKS")
return true
}
8.重写 AppDelegate 的 handleOpenURL 和 openURL 方法:
func application(_application:UIApplication, handleOpen url:URL) ->Bool{
return WXApi.handleOpen(url, delegate:self)
}
func application(_app:UIApplication, open url:URL, options: [UIApplication.OpenURLOptionsKey:Any] = [:]) ->Bool{
let urlKey: String = options[UIApplication.OpenURLOptionsKey.sourceApplication] as! String
if urlKey == "com.tencent.xin" {
// 微信 的回调
return WXApi.handleOpen(url, delegate: self)
}
return true
}
9.重写AppDelegate的continueUserActivity方法:
func application(_application:UIApplication, continue userActivity:NSUserActivity, restorationHandler:@escaping([UIUserActivityRestoring]?) ->Void) ->Bool{
returnWXApi.handleOpenUniversalLink(userActivity, delegate:self)
}
10.最后,向微信发消息
可以在官网下载的demo中查看(WXApiRequestHandler中有各种消息分享的具体实现),这里提供一个发送文字消息和分享链接的Swift_demo
func sendText(text:String, inScene: WXScene){
let req=SendMessageToWXReq()
req.text=text
req.bText=true
req.scene=Int32(inScene.rawValue)
WXApi.send(req)
}
/// 微信sdk分享链接
/// - Parameters:
/// - urlString: 链接
/// - tagName: 分享标签
/// - title: 分享标题
/// - description: 分享描述
/// - thumbImage: 分享图片
/// - scene: 分享目标,会话(WXSceneSession)或者朋友圈(WXSceneTimeline)
class func sendLinkURL(_ urlString: String, tagName: String, title: String, description: String, thumbImage: UIImage, in scene: WXScene){
let ext = WXWebpageObject()
ext.webpageUrl = urlStringlet message = WXMediaMessage()
message.title = title
message.description = description
message.mediaObject = ext
message.messageExt = nil
message.messageAction = nil
message.setThumbImage(thumbImage)
message.mediaTagName = tagNamelet req = SendMessageToWXReq()
req.bText = false
req.scene = Int32(scene.rawValue)
req.message = message
WXApi.send(req)
}
收!