重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
最近(2018年6月)微信要取消用户从第三方App分享内容到微信后的结果了,也就是不再回传分享结果,就突然想看看微信是怎么回传结果的。
10年积累的成都网站建设、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有张家口免费网站建设让你可以放心的选择与我们合作。
首先想到的是在appDelegate的application:openURL:sourceApplication:annotation方法加断点,查看url参数里面是否有带数据,但是居然没有在url发现任何和分享结果相关的数据。就这奇怪了,微信是怎么回传结果的呢?
然后回过来看一下iOS进程间共享/发送数据有哪些方式呢?
然后接下来就在application:openURL:sourceApplication:annotation处去查看generalPasteboard, 但没有发现什么异常,但是却发现WXApiDelegate的onResp:方法偶尔被调用,偶尔没有被调用,真是奇怪(后面才意识到是微信给回传数据的粘贴板item设置了一个较短的过期时间,在断点处停留的时间稍微长一点,这个item就失效消失了,所以也就看不到了)。但是偶尔又能看到一个item中有一个key为"content"的二进制数据,猜测是NSData,便取出来看一下。
不出所料,果然是NSData。(OS_dispatch_data是什么,百度一下就知道了)
然后就想怎么解析NSData数据呢,首先想到的是转成NSString。先用NSUTF8StringEncoding转换,结果为nil,失败了。然后用NSASCIIStringEncoding转换,依然不太成功,但是能看到一些东西,AppID以及SendMessageToWXResp类的成员country、language、result什么的,我知道自己接近了,就是这个,而且看起来像是序列化之类的方法产生的二进制数据。
然后我便尝试使用NSKeyedUnarchiver反序列化,可是怎么都不成功,然后我便尝试搜索上面那张截图里面的关键字,returnFromAppR-2S1.5U,bplist啥的,终于发现bplist是文件头标记,binary plist。接下来就是怎么解析binary plist文件啦,根据网上搜索到的命令 plutil -convert binary1 a.plist
然后就看到结果啦
暂时没有这个功能呢 朋友圈只能发图片和文字 文字是长摁朋友圈的照相机哦
/**
* 微信好友
*/
//SSDKPlatformSubTypeWechatSession
/**
* 微信朋友圈
*/
//SSDKPlatformSubTypeWechatTimeline
SSDKPlatformType platform = SSDKPlatformSubTypeWechatSession;
[ShareSDK shareWithContentName:@"这是一个分享消息" platform:platform customFields:nil onStateChanged:^(SSDKResponseState state, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error) {
NSLog(error?@"分享失败":@"分享成功");
}];
2019(为什么2020年现在写文章,是因为新项目有需要了 不如做个文章记录一下)项目初期需要配置微信分享进行引流,就阅读了微信开放平台的文档 发现微信在2019年9月份更新sdk 这样呢在项目配置中多了咱们标题上的Universal Link问题 但这个是什么呢
Universal Link 是 iOS9 推出的一项功能,使你的应用可以通过传统的HTTPS链接来启动APP,而不是使用 scheme 的方式了
接下来直接进入操作:
1.在微信应用配置中 就需要填写Universal Link配置了 (注意一定是https://开头 例:)
2.在项目配置的时候有用到://向微信注册 比如:
[WXApi registerApp:@"APPID" universalLink:@""];
3.然后去Apple开发官网去配置开启identifiers 在appid中找到需要配置app的appid,打开Associated Domains功能 一定配置新的证书文件,
4然后开发者平台配置完成 进入项目中--siigningcapablillities 点击..Capability-添加Associated Domains 然后配置Domains:一定是applinks:+微信配置的域名 (例:applinks:) (这个是固定格式applinks:加上什么什么域名 )
5.然后需要写一个apple-app-site-association文件不带任何后缀的文件 放在准备好的那个域名根目录或.well-known子目录下。
{"applinks":{"apps":[], "details":[{"paths":["*"],"appID":"TeamID.BundleIdetifier"}]}}
6.剩下的就是关于微信SDK文档中 关于xcode配置了 比如info文件中的配置 就可以根据文档来了