# ゲームからウェブショップを開く

> 認証されたプレイヤー セッションでゲームがWebショップを開く方法と、プレイヤーの認証方法を理解します。

Webshop は Unity ゲームコンテキストの外部で実行されます。Webshop でプレイヤーを識別するために、ゲームは認証されたプレイヤーセッションを含むアウトバウンドリンクを使用してショップを開きます。これはショップを開くのに推奨される方法です。プレイヤーは余分なサインインステップなしで購入を完了できます。

プレイヤーは、ブラウザー、ブックマーク、マーケティングリンク、または共有リンクから直接ショップを開くこともできます。ショップがプレイヤー セッションを受信しない場合は、製品リストの代わりに未認証のランディング ページが表示されます。購入後、ショップはディープリンクでプレイヤーをゲームに戻すことができます。また、このリンクを使用して、認証されていないプレイヤーを自動的にハンドルすることもできます。詳細は、「 [インバウンドディープリンクのハンドル](./integrate-into-game.md#handle-inbound-deep-links) 」を参照してください。

Web ショップは、ゲームが通過するセッションから認証をハンドルします。個別のサインインフローをビルドする必要はありません。詳細については、[プレイヤーの認証](#authenticate-players-and-persist-sessions)とセッションの永続化 を参照してください。

## アウトバウンドリンク##outbound-links

ゲームは、プラットフォームの標準外部 URL 処理を使用してショップ URL を開きます。モバイルデバイスでは、通常、システムブラウザーまたはアプリケーション内のビューップを開きます。

URL 形式は以下のとおりです。

```text
https://shop.unity.com/{studio}/game/{slug}?sessionToken={token}&projectId={projectId}&environment={env}
```

公開中のショップまたは環境のドラフトプレビューのランタイムにこの URL を解決するには、[Webshop を Unity ゲーム](./integrate-into-game.md#open-the-webshop-from-your-game)に統合 を参照してください。

以下のクエリはプレイヤーを識別し、正しいウェブショップコンテキストをロードします。

| パラメーター         | 目的                                                                                           |
| -------------- | -------------------------------------------------------------------------------------------- |
| `sessionToken` | Unity Authentication SDK からの短期セッション トークン。ショップは、プレイヤーのブラウザーでこのトークンを交換して、認証されたプレイヤーセッションを行います。 |
| `projectId`    | プレイヤーが属する Unity Cloud プロジェクト ID。ショップはこの値を使用して正しい Webshop とカタログをロードします。                       |
| `environment`  | ロードする Unity 環境名。このパラメーターは任意で、デフォルトは `production` です。                                         |

`locale`と`currency`を渡すことで、カタログがプレイヤーの地域のプロダクトを返すようにすることもできます。

```text
https://shop.unity.com/acme/game/dungeons?sessionToken=…&projectId=…&environment=production&locale=ja-JP&currency=JPY
```

ショップは認証とストアのパラメーターを解析した後、それらを URL から削除します。これにより、スクリーンショットや誤って共有された URL がセッショントークンを公開することを防ぐことができます。

`sessionToken` と `projectId` を省略すると、商品リストの代わりに未認証のランディングページが表示されます。プレイヤーIDがないと、プレイヤーは購入を完了できません。

認証された URL は、ゲームがショップを開くたびに必要になります。

## プレイヤーの認証とセッションの永続化##authenticate-players-and-persist-sessions

Webshop は Unity [Authentication](/authentication.md) でプレイヤー セッションを認証します。ゲームがショップを開くと、`sessionToken`クエリパラメーターに短期の Unity Authentication トークンが含まれます。ウェブショップは、プレイヤーのブラウザーでトークンを永続化された的なプレイヤーセッションと交換します。

プレイヤーは、認証を受けない限り、カタログをビューまたは購入を完了できません。プレイヤーが認証コンテキストなしでショップを開くと、ショップには製品リストではなく未認証のランディングページが表示されます。

`sessionToken`交換が成功すると、ショップはプレイヤーの ID をブラウザーの`localStorage`に保存します。格納された ID の範囲は、プロジェクトと環境です。同じプレイヤーが後で、例えばブラウザーのブックマークからショップのURLを開く場合、ショップはキャッシュされたIDを再利用し、認証交換をスキップできます。プレイヤーはゲームからショップを再度開く必要はありません。

保存されたセッショントークンの有効期間中、セッションは自動的に更新されます。

ダッシュボードのプレビューパス `/_preview/...` から開始するセッションでは、`localStorage` ではなく `sessionStorage` を使用します。これにより、現在のタブでのストライリダイレクト中に同じプレイヤー ID は維持されますが、タブが閉じた後のセッションは維持されません。

詳細については、[カタログと Webshop](./catalog-and-payments.md) での支払い を参照してください。

## 認証されていないランディングページのハンドル##handle-the-unauthenticated-landing-page

プレイヤーが認証コンテキストを使用せず、プロジェクトと環境の`localStorage`にキャッシュされたセッションを使用せずにショップのURLを開くと、ショップには製品リストの代わりに未認証のランディングページが表示されます。

プレイヤーは製品リストにアクセスするために、ゲームから Webshop を開きます。この Webshop には認証済みセッションが含まれています。

ランディングページには、**「Connect to game**(ゲームに接続)」ボタンも表示されます。プレイヤーがこのボタンを選択すると、ショップはディープリンクからゲームを開きます。プレイヤーの認証情報が自動的に収集され、Unity Iap SDK がプロダクトリストの認証済みセッションでショップを再開します。

ディープリンクが設定されていない場合は、ボタンを使用して、代わりにゲームからショップを開くようプレイヤーに求めます。

このサインイン フローでは、ショップは自動的に **Deeplink URL** を変更します。

## 購入後のゲームへの帰還##post-purchase-return-to-the-game

購入後、Webshop はプレイヤーをディープリンク付きでゲームに戻すことができます。ダッシュボードの「**Deeplink URL**」フィールド、例えば「`mygame://purchase-success`」で設定します。返品の場合、ウェブショップは入力したとおりにリンクを使用するため、カスタムの購入後パスを追加できます。

値を入力すると、戻るリンクと未認証のランディングページからの **Connect to game** 起動の両方が有効になります。フィールドを空にすると、両方が無効になります。個別のオン/オフ設定はありません。フィールドとその制限の詳細については、「 [Webshop の作成](./create-a-webshop.md#catalog-and-payment-provider-settings)と [Webshop の制限](./limits.md#naming-rules) 」リファレンスを参照してください。

> **Note:**
>
> 戻りディープリンクは、支払いプロバイダーのリダイレクト URL とは異なります。チェックアウト後、支払いプロバイダーはプレイヤーを Webshop にリダイレクトし、そこで購入結果画面が表示されます。ディープリンクの戻りは、その画面からゲームに戻る Webshop の次のステップです。**Back to game** ボタンとして表示されます。ディープリンクの戻りを設定しても、プロバイダーリダイレクト URL は変更されません。

戻りリンクが有効になっている場合、ウェブショップは購入結果をクエリとして追加します。

```text
mygame://purchase-success?status=success&playerId={playerId}
```

Webshop では、購入が完了した後に`status=success`が追加され、プレイヤー ID が使用可能になると`playerId`が追加されます。設定された URL にパスがない場合、Webshop はスキームに直接パラメータを追加します。

```text
mygame://?status=success
```

ゲームはカスタム URL スキームを登録し、クエリを読み取って中断オフたプレイヤーを再開します。

**Back to game** (ゲームに戻る) ボタンは、以下の条件がすべて満たされた場合にのみ購入結果画面に表示されます。

* プレイヤーは、ディープリンクからゲームからショップを開きました。
* プレイヤーはiOSやAndroidなどのモバイルデバイス上にあります。
* ウェブショップには戻りディープリンクが設定されています。

デスクトップの場合、またはプレイヤーがディープ リンクからショップを開かなかった場合、結果画面に代わりに**Continue shopping**と表示されます。**Back to game**(ゲームに戻る)ボタンも失敗画面に表示され、プレイヤーはキャンセルまたは購入が失敗した後にゲームに戻ることができます。
