Closed lexrus closed 4 years ago
LGTM 😍
LGTM,hopper 默认字体真能看瞎眼。 (demo version 看个半小时就强制关闭了)
public class func handleOpenUserActivity(_ userActivity: NSUserActivity)
方法需要返回 Bool 值,func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
会用到的
@gaoshanyu 那是应该返回 true 还是 false 呢?
Returns true to indicate that your app handled the activity or false to let iOS know that your app did not handle the activity.
还是把 deliver
方法的 DeliverCompletionHandler
有没有 error 作为 bool 返回?
handleOpenURL
与 handleOpenUserActivity
一般是多个 handler 使用 ||
顺序处理。
目前 handleOpenUserActivity
只有 WeChat,所以判断 webpageURL
是不是 help.wechat.com
即可。
@gaoshanyu @nuomi1 谢谢,改了。
QQ 也改。。 果然是一路的 QQ互联将于2020年7月6日进行universal link的校验工作
QQ SDK:
2019-08-21
支持 Universal Link。2019-09-10
将于 2019-12-01
进行校验。2020-07-03
将于 2020-07-6
进行校验。微博 SDK:
不更新 QQ SDK 好像不会造成什么伤害吧? 微信 SDK 不更新出『未验证应用』产品和 QA 都跳起来了。
@lexrus 有问题啊,“未识别应用”。
🤦 晚上抽空看一下是不是一样的改法
各位好, oauth 和 pay 也加上了,目前我这边没有开了这两个功能的 app,能不能麻烦你们测试一下。其它几个 universal link 不准备支持了,一是因为本来 MonkeyKing scheme 的实现也没支持,二是因为用到这些功能的应用更有可能会用官方 SDK。
oauth的回调还是调用application(_: UIApplication, open url:那就是还没成功走universal link的样子。。
@SuperY 只改了接收的部分,忘改发起的部分了,明天继续。
🐞 分享会提示universal link校验不通过
🐞 分享会提示universal link校验不通过
你这是没设置好吧,分享这块应该是通的,apple-app-site-association 写了吗。
OAuth 的 universal link 流程我也测通了。
let account = MonkeyKing.Account.weChat(
appID: kWXAppId,
appKey: kAppKey,
miniAppID: nil,
universalLink: kUniversalLink
)
MonkeyKing.registerAccount(account)
// 下面会开始访问 https://api.weixin.qq.com/sns/oauth2/access_token?grant_type=authorization_code&appid=...
// 微信会通过访问当前 app 的 universal link,从而把 OAuth 的结果 code 传递回来,MonkeyKing 把它存在 keychain 中。
MonkeyKing.oauth(for: .weChat) { result in
switch result {
case .success(let dictionary):
print(dictionary)
case .failure(let error):
print("error \(error.localizedDescription)")
}
}
没其它问题的话,这个 PR 就不再改了,请各位 review。
分享后的回调只跟了appID的path,按照我们产品的逻辑如果monkeyking不处理,会打开一个app内web页。还是说设计上需要自己处理这种回调结果?
分享后的回调只跟了appID的path,按照我们产品的逻辑如果monkeyking不处理,会打开一个app内web页。还是说设计上需要自己处理这种回调结果?
是的,目前没处理回调。分享成功后访问的 universal link 貌似没有带任何命令或参数。 刚用 SwiftTrace 跟了一下,貌似是从粘贴板里看 result 是不是等于 0 来判断成功的?然后触发回调? 如果是的话我可以加一下这个成功失败的判断。
@SuperY 已处理回调,试了一下是和原来 scheme 的姿势一样的,复用了用来的代码。
感谢汤哥 @lexrus 的贡献!🎉
为什么要第二天才能消除未验证的应用
为什么要第二天才能消除未验证的应用
测试下来第二天才能生效,我猜他们定时从日志里判断了『昨天』是不是有有效的 Universal Link 的分享,来决定要不要显示『未验证应用』。
为了解决『未验证应用』的问题,需要支持 Universal Link。 通过逆向分析
libWeChatSDK.a
,找到wechat_auth_token
和wechat_auth_context_id
的生成方式,生成有效的微信 Universal Link。为保证兼容官方 SDK,也使用相同的 KeyChain 存储了
wechat_auth_token
。由于 SHA1 不可逆,且 hash 的字符串有部分是用 timeIntervalSince1970 生成,所以并没有按照微信的方法来生成
wechat_auth_context_id
,理论上微信端是无法检测出来的。目前只实现了以下功能:
sendreq
- 分享,亲测上线后成功通过 universal link 分享后第二天可以去除『未验证应用』refreshToken
- 用于刷新wechat_auth_token
oauth
还有以下 universal link 功能没有处理:
pay
- 仅兼容了 universal link 的接收,发送部分没有帐号可测试resendContextReqByScheme
jointpay
offlinepay
cardPackage
choosecard
chooseinvoice
openwebview
openbusinesswebview
openranklist
opentypewebview
不依赖这些功能的话可以暂时直接使用我的分支。