iOS端如何实现通过App Store传递推荐码的深度链接跳转功能?
未安装App场景推荐链路实现方案
一、前置改造:推荐链接落地页逻辑调整
你原来直接配置为Universal Link的推荐链接,先改成指向自己的H5落地页,落地页实现以下逻辑:
- 优先尝试唤起App:通过自定义Scheme或者Universal Link唤起本地App,用户已经安装的场景还是走你原来的直接唤起逻辑
- 未唤起判定:如果3秒内没有成功唤起App,说明用户未安装,自动执行两个操作:
- 把当前完整推荐链接(带推荐码)写入系统剪贴板,可同步给用户弱提示「推荐码已自动复制,安装后将自动填充」,符合隐私合规要求
- 跳转至你的App在App Store的下载页
- 落地页核心js逻辑示例:
const fullReferralUrl = window.location.href; // 尝试唤起App window.location.href = fullReferralUrl; // 3秒未唤起判定为未安装,走下载逻辑 setTimeout(() => { // 写入推荐链接到剪贴板 navigator.clipboard.writeText(fullReferralUrl).then(() => { // 跳转App Store下载页 window.location.href = "https://apps.apple.com/cn/app/你的App对应的AppStore地址"; }); }, 3000);
二、App端新增首次启动识别逻辑
在AppDelegate.m的didFinishLaunchingWithOptions方法中新增首次启动判定逻辑,直接复用你已经实现的handelReferral方法处理推荐码,无需重复开发注册跳转逻辑:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 保留你原来的所有启动逻辑 // 新增:判断是否是首次安装启动 if (![[NSUserDefaults standardUserDefaults] boolForKey:@"hasLaunchedBefore"]) { // 读取系统剪贴板内容 UIPasteboard *generalPasteboard = [UIPasteboard generalPasteboard]; NSString *pasteContent = generalPasteboard.string; // 校验剪贴板内容是否符合你的推荐链接格式,避免误处理其他内容 if (pasteContent && [pasteContent rangeOfString:@"ref/"].location != NSNotFound) { // 直接调用已有的推荐链接处理方法 [self handelReferral:pasteContent]; // 处理完成后清空剪贴板,避免后续重复触发 generalPasteboard.string = @""; } // 标记已完成首次启动,后续启动不再走该逻辑 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasLaunchedBefore"]; [[NSUserDefaults standardUserDefaults] synchronize]; } return YES; }
三、注意事项
- iOS16及以上系统读取系统剪贴板会弹出系统授权提示,落地页提前告知用户剪贴板用途,既能避免用户疑惑,也符合苹果审核规则
- 一定要加推荐链接格式校验逻辑,不要直接读取任意剪贴板内容就处理,避免误跳异常页面
- 如果不想用剪贴板方案,iOS14+也可以通过ASWebAuthenticationSession读取同域名下Cookie的方式传递推荐码,但剪贴板方案兼容性更高、实现成本最低
内容的提问来源于stack exchange,提问作者Vijay Kumar
相关产品推荐
相关产品推荐

