Flutter集成Adjust SDK后Deferred deep link callback未触发问题
Adjust SDK deferredDeepLinkCallback 未触发的排查与解决思路
1. 确认初始化时机
确保Adjust SDK的初始化在App启动最早期执行,比如在main()函数中(需先初始化Flutter绑定),避免因初始化过晚错过Deep Link的回调触发时机:
void main() async { WidgetsFlutterBinding.ensureInitialized(); await yourAdjustInstance.initialize(); // 调用你的初始化方法 runApp(const YourApp()); }
2. 检查平台端配置完整性
Android 端
- 确认
AndroidManifest.xml中已注册Adjust的Referrer接收器:
<receiver android:name="com.adjust.sdk.AdjustReferrerReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver>
- 在
MainActivity中实现onNewIntent方法,将Intent传递给Adjust:
override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) Adjust.onNewIntent(intent) }
iOS 端
- 确保
Info.plist中配置了正确的CFBundleURLTypes,并开启Associated Domains(若使用Universal Links)。 - 在
AppDelegate中实现Deep Link传递逻辑:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { Adjust.appWillOpenUrl(url) return true } func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL { Adjust.appWillOpenUrl(url) } return true }
3. 处理回调线程问题
Adjust的回调可能在后台线程触发,Flutter的UI相关操作需切换到主线程执行,可调整回调代码:
config.deferredDeeplinkCallback = (String? uri) { if (uri == null) return; WidgetsBinding.instance.addPostFrameCallback((_) { printLog('[Adjust]: Received deferred deeplink: ' + uri); // 这里处理业务逻辑 }); };
4. 升级SDK版本
当前使用的adjust_sdk: ^5.1.1版本较旧,可能存在已知的回调触发bug,尝试升级到最新稳定版本,查看版本日志是否修复了同类问题。
5. 验证测试场景
Deferred Deep Link仅在用户点击链接时未安装App,安装后首次打开的场景下触发,若测试的是App已安装时的普通Deep Link,需通过Flutter自身的Uri获取逻辑处理,不会触发Adjust的deferred回调。
内容的提问来源于stack exchange,提问作者Jayadev Panthaplavil
相关产品推荐
相关产品推荐

