我在 Flutter 应用程序中使用 Branch 进行深层链接管理。
在 iOS 上,一切都很完美。
在 Android 上,当我从深层链接(例如,从 WhatsApp)打开应用程序时,应用程序会打开,但不会收到任何链接。如果我在不按后退按钮的情况下返回 WhatsApp,而是从最近使用的应用程序导航,它仍然无法工作。但是,如果我从 WhatsApp 打开它,然后按设备的后退按钮,它会将我带回到 WhatsApp,从那一刻起,链接开始正常工作,没有任何问题。
如果我手动启动应用程序(不是通过链接),转到 WhatsApp,然后单击链接,它会将我带到应用程序,但不会收到链接。如果我现在通过最近使用的应用程序进入 WhatsApp 并再次单击该链接,它仍然不起作用;它只打开应用程序而不接收链接。但是,如果我在打开应用程序的情况下单击“返回”,则会返回 WhatsApp,现在单击该链接可以正常工作,并且从那一刻起它会继续有效。
Android 清单活动:
<activity android:name=".MainActivity" android:exported="true" android:enableOnBackInvokedCallback="true" android:launchMode="singleTask" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
<!-- Branch URI Scheme -->
<intent-filter android:autoVerify="true">
<data android:scheme="..."/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
<!-- Branch App Links - Live App -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="https" android:host="....app.link"/>
<data android:scheme="https" android:host="...-alternate.app.link"/>
</intent-filter>
...
Flutter Doctor 输出:
[✓] Flutter (Channel stable, 3.19.3, on macOS 14.4 23E214 darwin-arm64, locale it-IT)
• Flutter version 3.19.3 on channel stable at /Users/dev/FlutterDev/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision ba39319843 (4 weeks ago), 2024-03-07 15:22:21 -0600
• Engine revision 2e4ba9c6fb
• Dart version 3.3.1
• DevTools version 2.31.1
[✓] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
• Android SDK at /Users/dev/Library/Android/sdk
• Platform android-34, build-tools 32.1.0-rc1
• Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 17.0.9+0-17.0.9b1087.7-11185874)
• All Android licenses accepted.
• No issues found!
我尝试将 launchMode 更改为 singleTop,但它多次打开链接并在 WhatsApp 上创建另一个实例。我还尝试添加 'android:allowTaskReparenting="true", 'android:alwaysRetainTaskState="true"' 和 singleInstance & standard,但它不起作用。
您似乎已经尝试过各种配置,但问题仍然存在。让我们尝试解决这个问题:
检查分支配置:确保您的分支配置正确,尤其是 URI 方案和应用程序链接。仔细检查 Branch 生成的链接是否与 AndroidManifest.xml 中指定的链接匹配。
Manifest 配置:乍一看,您的 AndroidManifest.xml 配置似乎是正确的。但是,请确保与清单文件中的其他深层链接处理程序或意图过滤器不存在冲突。
Flutter 版本:您使用的是 Flutter 3.19.3,截至我 2022 年 1 月的最后一次更新,该版本似乎已经过时。请考虑将 Flutter 更新到最新的稳定版本(如果可用),看看问题是否仍然存在。有时,较新的 Flutter 版本会修复与深度链接相关的错误或改进。
测试环境:确保您在真实设备而不是模拟器上进行测试,因为有时模拟器和真实设备之间的深度链接行为可能有所不同。
Branch SDK:确保您已集成最新版本的 Flutter Branch SDK。检查他们的文档或 GitHub 存储库,了解与 Android 深度链接相关的任何最新更新或错误修复。
日志记录和调试:在 Flutter 应用程序中实现日志记录,以跟踪与深度链接相关的生命周期事件。这可以帮助您确定问题可能发生在哪里。您还可以使用Android Studio的Logcat等工具来监控Android端与深度链接相关的日志。
在不同设备和 Android 版本上进行测试:有时,深层链接问题可能是特定于设备或 Android 版本的。在具有不同 Android 版本的多台设备上进行测试,看看问题是否在所有设备上一致出现。
咨询分支机构支持:如果尝试上述步骤后问题仍然存在,请考虑联系分支机构支持以获得进一步帮助。他们以前可能遇到过类似的问题,并且可以根据您的情况提供具体指导。
通过系统地进行故障排除和测试,您应该能够查明问题的原因并相应地解决它。