app_links和fluwx_no_pay针对deeplink的冲突处理

问题背景

  1. 项目包含微信分享功能,
  2. 通过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)
    }

参考文档:

  1. app_links
  2. fluwx
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容