詳細な連携プロセスとフローチャート
ユーザーマッピングは 2 つの入場シナリオに対応しています。いずれの場合も、最終的にはお客様のユーザーキー(partnerUid)とワンタイムマッピングトークン(token)を Unifi サーバーへ送信してマッピングを完了し、その後ミッションの達成を記録するという構造になっています。
シナリオ A: Unifi → サービスアプリへの入場

- アプリ入場とトークン受信: ユーザーが Unifi 内でサービスミッションをクリックすると、サービスページにリダイレクトされます。その際、ワンタイムトークンが URL クエリパラメータとして渡されます。
例:https://miniapp.line.me/{Service_App_ID}/...?token={mapping_token} - ユーザーマッピング状態の確認: サービス入場時に、お客様のユーザー識別子(
partnerUid)を基に、ユーザーがすでに Unifi アカウントと連携済みかどうかを確認します。(ユーザーマッピング状態の確認を参照) - ユーザーマッピング登録のリクエスト(未マッピングの場合): 未連携の場合、受信したトークンと partnerUid を Unifi サーバーへ送信してマッピングを登録します。(Register User Mapping を参照)
- ミッション達成のリクエスト: ユーザーがマッピング済みの場合、ミッション達成 API の呼び出しにお客様のユーザーキーを含めて、ミッション完了を処理します。
シナリオ B: サービスアプリ → マッピングのための Unifi Login

- マッピング状態の確認: サービス内からユーザーの Unifi マッピング状態を確認します。(ユーザーマッピング状態の確認を参照)
- Unifi Login の案内: 未マッピングの場合、ミッションを実行するには Unifi login が必要であることを示すプロンプト(ポップアップなど)を表示します。
- Unifi Login への遷移(Auth API ブラウザリダイレクト): フロントエンド(FE)はブラウザ画面を直接 Unifi サーバーの Auth Endpoint へ遷移させます。この URL には、お客様の partnerId、browserType、およびログイン後に戻る最終遷移先
redirectUrlを含める必要があります。
Preview:https://app-api-reward.unifi.me/v1/mission-users/auth?partnerId={partnerId}&browserType={browserType}&redirectUrl={URL Encoded redirectUrl}
Prod:https://api-reward.unifi.me/v1/mission-users/auth?partnerId={partnerId}&browserType={browserType}&redirectUrl={URL Encoded redirectUrl} - ログイン後のサービスアプリへの復帰: Unifi login が完了すると、Unifi サーバーはお客様の redirectUrl にワンタイムマッピングトークン(
token=)を付加してユーザーを戻します。
復帰 URL の形式:https://miniapp.line.me/{Service_App_ID}/{path}?myParam=xyz&token={mapping_token} - マッピング登録とミッション達成: 復帰時に URL パラメータ経由で受信したトークンを使用してマッピングを登録し(Register User Mapping を参照)、シナリオ A と同様にミッション達成 API を呼び出します。
警告
Auth API のフロントエンド呼び出し方法(シナリオ B) /auth API は内部で LINE LIFF のログイン URL を構築し、302 Redirect レスポンスを返します。そのため、fetch や axios で呼び出すと、ユーザーの画面はログインページに遷移しません。テンプレートリテラルを用いて、ブラウザの window.location.href で遷移させる必要があります。
const redirectUrl = encodeURIComponent('https://miniapp.line.me/{Service_App_ID}/{path}?myParam=xyz'); window.location.href = `https://api-reward.unifi.me/v1/mission-users/auth?partnerId=${partnerId}&browserType=${browserType}&redirectUrl=${redirectUrl}`;