You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS应用带邀请码的App Store下载链接创建及溯源方案咨询

创建带邀请码的iOS App Store下载链接 & 后续邀请码获取方案(基于Firebase Dynamic Links)

一、先搞定带邀请码的Firebase Dynamic Link构建

Firebase Dynamic Links是实现这个需求的绝佳方案,它能自动处理「App已安装直接跳转、未安装跳App Store」的逻辑,还能稳定携带你的邀请码参数。下面分两种方式构建链接:

1. 用Firebase控制台手动生成(适合快速测试或少量链接)

  • 打开你的Firebase项目,进入「Dynamic Links」模块,先完成基础配置:绑定自定义域名(比如your-app.page.link),并在iOS配置栏填入App的Bundle ID,同时开启Universal Links支持。
  • 点击「新建动态链接」,设置长链接为你的App Store官方链接(比如https://apps.apple.com/us/app/your-app/id123456789)。
  • 切换到「高级选项」,在「查询参数」里添加邀请码,比如invite_code=XYZ789。
  • 最后选择生成短链接或保留长链接,这个链接就是你可以分享给用户的带邀请码下载链接了。

2. 用代码/API批量生成(适合后端自动生成专属邀请链接)

如果需要给每个用户生成专属邀请链接,推荐用Firebase的API或后端SDK:

  • 示例:Node.js后端用Firebase Admin SDK生成
const admin = require('firebase-admin');
admin.initializeApp();

async function createInviteLink(inviteCode) {
  const targetLink = `https://apps.apple.com/us/app/your-app/id123456789?invite_code=${inviteCode}`;
  const dynamicLinkParams = {
    dynamicLinkInfo: {
      domainUriPrefix: 'https://your-app.page.link',
      iosInfo: {
        iosBundleId: 'com.yourcompany.yourapp',
        iosAppStoreId: '123456789' // 替换成你的App Store ID
      },
      link: targetLink
    }
  };
  const shortLinkResult = await admin.dynamicLinks().createShortLink(dynamicLinkParams);
  return shortLinkResult.shortLink;
}
  • 也可以直接调用Firebase Dynamic Links的REST API,发送POST请求到https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=YOUR_FIREBASE_API_KEY,请求体结构和上面的SDK参数一致。

是的,你必须处理Universal Links——因为Firebase Dynamic Links在iOS上是基于Universal Links实现无缝跳转的,配置和处理步骤如下:

1. 先完成iOS项目的基础配置

  • 在Xcode的「Signing & Capabilities」里添加「Associated Domains」,填入applinks:your-app.page.link(替换成你的Dynamic Link域名)。
  • 通过CocoaPods或Swift Package Manager集成Firebase Dynamic Links SDK:
    # Podfile示例
    pod 'Firebase/DynamicLinks'
    

2. 在App中处理链接并提取邀请码

根据你的App使用的UI框架,分两种情况:

情况1:UIKit(AppDelegate)

在AppDelegate.swift中实现两个关键方法:

import Firebase

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    FirebaseApp.configure()
    // 检查启动时是否有Dynamic Link(比如用户刚安装完App打开)
    if let launchUrl = launchOptions?[.url] as? URL {
      _ = handleDynamicLink(launchUrl)
    }
    return true
  }

  // 处理App已安装时的Universal Link跳转
  func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let webUrl = userActivity.webpageURL {
      return handleDynamicLink(webUrl)
    }
    return false
  }

  // 解析链接并提取邀请码
  private func handleDynamicLink(_ url: URL) -> Bool {
    let dynamicLinks = DynamicLinks.dynamicLinks()
    guard let dynamicLink = dynamicLinks.handleUniversalLink(url)?.dynamicLink else {
      return false
    }
    // 从链接的查询参数中提取邀请码
    if let inviteCode = dynamicLink.url?.queryParameters?["invite_code"] {
      // 这里拿到邀请码后,就可以做后续逻辑了:比如绑定用户、给邀请者发奖励等
      print("用户携带的邀请码:\(inviteCode)")
    }
    return true
  }
}
情况2:SwiftUI(SceneDelegate)

如果你的App用SwiftUI+SceneDelegate,在SceneDelegate.swift中处理:

import Firebase

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
  var window: UIWindow?

  func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    FirebaseApp.configure()
    // 处理启动时的链接
    if let urlContext = connectionOptions.urlContexts.first {
      _ = handleDynamicLink(urlContext.url)
    }
    // ... 其他SwiftUI初始化代码
  }

  // 处理App运行时的跳转链接
  func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    if let targetUrl = URLContexts.first?.url {
      _ = handleDynamicLink(targetUrl)
    }
  }

  // 解析邀请码的逻辑和UIKit一致
  private func handleDynamicLink(_ url: URL) -> Bool {
    let dynamicLinks = DynamicLinks.dynamicLinks()
    guard let dynamicLink = dynamicLinks.handleUniversalLink(url)?.dynamicLink else {
      return false
    }
    if let inviteCode = dynamicLink.url?.queryParameters?["invite_code"] {
      print("获取到邀请码:\(inviteCode)")
      // 执行你的业务逻辑
    }
    return true
  }
}

3. 关键注意点

  • 测试时:建议用真机测试(模拟器可能无法正确处理Universal Links),可以直接点击Firebase控制台生成的测试链接验证流程。
  • 首次安装跳转:用户通过链接跳转到App Store安装后,第一次打开App时,Firebase会自动把链接参数传递给App,所以启动时的链接检查逻辑不能少。
  • 参数一致性:确保邀请码的参数名(比如invite_code)在所有生成的链接中保持一致,避免大小写或拼写错误导致无法识别。

内容的提问来源于stack exchange,提问作者zeus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:32:06