Skip to content

Commit c7c1dba

Browse files
Kobikg78claude
andcommitted
fix(ios): pass source app options and handle cold-start Universal Links
Two fixes based on review feedback: 1. openURLContexts / willConnectToSession: pass sourceApplication from UIOpenURLContext.options instead of empty @{}, so AppsFlyer SDK receives correct attribution metadata on URI-scheme deep links. 2. willConnectToSession: also iterate connectionOptions.userActivities and forward NSUserActivityTypeBrowsingWeb entries to continueUserActivity:, fixing cold-start Universal Links under UIScene (the core reported issue). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 783530c commit c7c1dba

1 file changed

Lines changed: 17 additions & 3 deletions

File tree

ios/Classes/AppsflyerSdkPlugin.m

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -973,17 +973,31 @@ - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserAct
973973
// UIScene-based URI-scheme deep links (iOS 13+, Flutter 3.41+ UIScene migration)
974974
- (BOOL)scene:(UIScene*)scene openURLContexts:(NSSet<UIOpenURLContext*>*)URLContexts API_AVAILABLE(ios(13.0)) {
975975
for (UIOpenURLContext *context in URLContexts) {
976-
[[AppsFlyerAttribution shared] handleOpenUrl:context.URL options:@{}];
976+
NSDictionary *opts = @{};
977+
if (context.options.sourceApplication) {
978+
opts = @{UIApplicationOpenURLOptionsSourceApplicationKey: context.options.sourceApplication};
979+
}
980+
[[AppsFlyerAttribution shared] handleOpenUrl:context.URL options:opts];
977981
}
978982
return NO;
979983
}
980984

981-
// Cold-start URI-scheme deep links delivered via UISceneConnectionOptions (iOS 13+)
985+
// Cold-start deep links delivered via UISceneConnectionOptions (iOS 13+)
986+
// Handles both URI-scheme links (URLContexts) and Universal Links (userActivities)
982987
- (BOOL)scene:(UIScene*)scene
983988
willConnectToSession:(UISceneSession*)session
984989
options:(UISceneConnectionOptions*)connectionOptions API_AVAILABLE(ios(13.0)) {
985990
for (UIOpenURLContext *context in connectionOptions.URLContexts) {
986-
[[AppsFlyerAttribution shared] handleOpenUrl:context.URL options:@{}];
991+
NSDictionary *opts = @{};
992+
if (context.options.sourceApplication) {
993+
opts = @{UIApplicationOpenURLOptionsSourceApplicationKey: context.options.sourceApplication};
994+
}
995+
[[AppsFlyerAttribution shared] handleOpenUrl:context.URL options:opts];
996+
}
997+
for (NSUserActivity *activity in connectionOptions.userActivities) {
998+
if ([activity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
999+
[[AppsFlyerAttribution shared] continueUserActivity:activity restorationHandler:nil];
1000+
}
9871001
}
9881002
return NO;
9891003
}

0 commit comments

Comments
 (0)