紹介リンクと Universal Links

紹介リンク

インフルエンサーの紹介リンクは次の形です。

https://goalong.me/{appSlug}/{CODE}

リンクを開くと、GoAlong の紹介ページが表示されます。ユーザーはそこでコードをコピーしてアプリをインストールし、アプリ内の入力欄で適用します(クリップボードの手がかりがあれば、入力欄が開いた状態で表示されます)。紹介ページには、アプリ内のどこでコードを入力するかのスクリーンショットも載せられます。

端末ごとの遷移先

紹介ページは、開いた端末に合わせてストアを選びます。

端末遷移先
iPhone・iPadApp Store
AndroidiPhone 向けのアプリである旨と、App Store のリンク
PC などApp Store のリンク

メモ

ベータ版の対象は App Store(iOS)のアプリです。Android(Google Play)は対応予定です。時期は決まり次第お知らせします。

注意

アプリの slug を変更すると、配布済みのリンクや QR コードは使えなくなります。

iOS でアプリをインストール済みのユーザーが紹介リンクを開いたとき、ストアを経由せずにアプリを直接開けます。

  1. Team ID と Bundle ID を登録する

    GoAlong のアプリ詳細(紹介リンクの設定)で、Apple Developer の Team ID と Bundle ID を登録します。
  2. Associated Domains を追加する

    Xcode の Signing & Capabilities で、Associated Domains に applinks:goalong.me を追加します。
  3. リンクを受け取る

    アプリでリンクを受け取り、コードを取り出します。
@State private var pendingCode: String?

var body: some View {
    ContentView()
        .onOpenURL { url in
            // コードを取り出すだけ(まだ適用しない)
            pendingCode = GoAlong.handleDeepLink(url)
        }
        .alert(
            "紹介コード \(pendingCode ?? "") を使いますか?",
            isPresented: Binding(get: { pendingCode != nil }, set: { if !$0 { pendingCode = nil } })
        ) {
            Button("使う") {
                let code = pendingCode
                pendingCode = nil
                Task { if let code { try await GoAlong.applyCode(code, method: .deepLink) } }
            }
            Button("キャンセル", role: .cancel) { pendingCode = nil }
        }
}

handleDeepLink はコードを取り出すだけで、適用はしません。ユーザーの確認を挟んでから applyCode を呼んでください。

メモ

設定の反映には時間がかかることがあります(端末側のキャッシュを含む)。

クリップボードを自前で扱う場合

初回画面の入口(ReferralEntryView)を使えば不要です。独自の画面で扱う場合は、次の 2 段階で使います。

if await GoAlong.checkClipboardHint() {          // 内容は読まずに手がかりだけを確認(許可ダイアログなし)
    // 自前の同意 UI を表示し、同意されたら:
    if let code = GoAlong.requestClipboardCode() {   // ここで OS のペースト許可が出ることがあります
        try await GoAlong.applyCode(code, method: .clipboard)
    }
}