问题背景
- 项目包含微信分享功能,
- 通过deeplink唤起APP后,根据路径中拼接的参数进行页面跳转等逻辑处理
pubspec.yaml文件
fluwx_no_pay: ^3.13.1
# 拉起app
app_links: ^5.0.0
项目中app_links部分代码,如下:
import 'package:app_links/app_links.dart';
_appLinks = AppLinks();
// 如果程序没在后台运行,也可以在刚唤醒事获取DeepLink URI
final appLink = await _appLinks.getInitialAppLink();
// 如果程序已经正在运行,可以通过这种方式获取DeepLink URI
_linkSubscription = _appLinks.uriLinkStream.listen((uri) async {
if (kDebugMode) {
FTLog.d('onAppLink: $uri');
}
openAppLink(uri);
});
项目中fluwx_no_pay部分代码,如下:
import 'package:fluwx_no_pay/fluwx_no_pay.dart' as fluwx;
fluwx.registerWxApi(
appId: kWechatPayAppId,
doOnIOS: true,
doOnAndroid: true,
universalLink: kIosUniversalLinks);
fluwx.weChatResponseEventHandler.asBroadcastStream().listen((event) {
if (event is fluwx.WeChatShareResponse) {
}
}
结果:
首次点击微信分享,跳转到微信授权后,会再次跳转回APP,但无法再次跳转到微信进行分享了!
打印日志如下:
flutter: ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
flutter: │ onAppLink: https://www.xxxxxxxxx/app/deeplink/wx11163xxxxxxe463/
flutter: └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
原因分析:
二者都对AppDelegate中的以下两个方法进行了覆盖,
override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
}
override func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
}
解决方案:
在以上两个方法中加入WXApi.handleOpen(url, delegate: self)
、WXApi.handleOpenUniversalLink(userActivity, delegate: self)
代码如下:
override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
WXApi.handleOpen(url, delegate: self)
return super.application(app, open: url, options: options)
}
override func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
WXApi.handleOpenUniversalLink(userActivity, delegate: self)
return super.application(application, continue: userActivity, restorationHandler: restorationHandler)
}
参考文档: