問題背景
- 項目包含微信分享功能,
- 通過deeplink喚起APP后,根據(jù)路徑中拼接的參數(shù)進行頁面跳轉(zhuǎn)等邏輯處理
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();
// 如果程序已經(jīng)正在運行,可以通過這種方式獲取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) {
}
}
結果:
首次點擊微信分享,跳轉(zhuǎn)到微信授權后,會再次跳轉(zhuǎn)回APP,但無法再次跳轉(zhuǎn)到微信進行分享了!
打印日志如下:
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)
}
參考文檔: