紹介リンクと Universal Links
紹介リンク
インフルエンサーの紹介リンクは次の形です。
https://goalong.me/{appSlug}/{CODE}
リンクを開くと、GoAlong の紹介ページが表示されます。ユーザーはそこでコードをコピーしてアプリをインストールし、アプリ内の入力欄で適用します(クリップボードの手がかりがあれば、入力欄が開いた状態で表示されます)。紹介ページには、アプリ内のどこでコードを入力するかのスクリーンショットも載せられます。
端末ごとの遷移先
紹介ページは、開いた端末に合わせてストアを選びます。
| 端末 | 遷移先 |
|---|---|
| iPhone・iPad | App Store |
| Android | iPhone 向けのアプリである旨と、App Store のリンク |
| PC など | App Store のリンク |
メモ
ベータ版の対象は App Store(iOS)のアプリです。Android(Google Play)は対応予定です。時期は決まり次第お知らせします。
注意
アプリの slug を変更すると、配布済みのリンクや QR コードは使えなくなります。
インストール済みのユーザー(Universal Links)
iOS でアプリをインストール済みのユーザーが紹介リンクを開いたとき、ストアを経由せずにアプリを直接開けます。
Team ID と Bundle ID を登録する
GoAlong のアプリ詳細(紹介リンクの設定)で、Apple Developer の Team ID と Bundle ID を登録します。Associated Domains を追加する
Xcode の Signing & Capabilities で、Associated Domains にapplinks:goalong.meを追加します。リンクを受け取る
アプリでリンクを受け取り、コードを取り出します。
@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)
}
}