> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 帳戶連結快速入門

> 將 PlayFab 玩家帳戶連結至多部裝置和登入方法，為匿名帳戶新增可復原的登入方式，例如使用者名稱、Facebook 或 Google。

本帳戶連結快速入門示範如何將帳戶繫結至多部裝置和登入機制。

單一 PlayFab 帳戶可以透過多部裝置和登入認證存取。如我們在[登入基本概念和最佳做法](/zh-TW/services/playfab/identity/player-identity/login/login-basics-best-practices)教學課程中所述，使用者驗證有兩種形式：

1. **匿名**
2. **可復原**

## 將可復原的登入新增至現有的匿名帳戶

您的第一次登入是匿名登入是非常常見的。這可讓玩家毫無阻礙地進入遊戲。

但是一旦玩家投入您的遊戲，您就應該提示他們新增可復原的登入方法，讓他們的帳戶在裝置故障或發生其他問題時*可以復原*。

本節說明如何將可復原的登入機制新增至匿名帳戶。

<Note>
  匿名登入仍然適用，並且可以繼續作為玩家主要的無阻礙登入方式。許多玩家*只有*在嘗試復原帳戶、使用平台特定功能或連結第二部匿名裝置時，才會再次使用這些選項。
</Note>

<img src="https://mintcdn.com/microsoft-4404708b/3hg2JQs0m7qmDqay/images/playfab/identity/player-identity/tutorials/playfab-anonymous-login-and-recoverable-login.png?fit=max&auto=format&n=3hg2JQs0m7qmDqay&q=85&s=33569b13f8e303cf4cf96fa2673a975a" alt="PlayFab 匿名登入和可復原登入機制" width="866" height="802" data-path="images/playfab/identity/player-identity/tutorials/playfab-anonymous-login-and-recoverable-login.png" />

本教學課程的重點在於上圖底部的儲存格：**AddUsernamePassword**、**LinkWithFacebook** 或 **LinkWithGoogle**。這些表示可復原登入機制眾多可用選項中的其中幾個。

* [AddUsernamePassword](xref:titleid.playfabapi.com.client.accountmanagement.addusernamepassword) 用來啟用 [LoginWithPlayFab](xref:titleid.playfabapi.com.client.authentication.loginwithplayfab) 和 [LoginWithEmailAddress](xref:titleid.playfabapi.com.client.authentication.loginwithemailaddress) 其中之一或兩者。這些選項會直接在 PlayFab 中儲存使用者名稱/電子郵件/密碼認證。為了讓玩家復原其帳戶，您的遊戲、網站或客戶服務可以觸發：
  * 針對該電子郵件地址的 [SendAccountRecoveryEmail](xref:titleid.playfabapi.com.admin.accountmanagement.sendaccountrecoveryemail)。如果玩家輸入假的電子郵件地址，您*仍然*可以使用 PlayFab Game Manager 更新玩家的電子郵件地址，但請務必確保您的客戶服務代表經過訓練，能夠留意常見的社交工程詐騙手法，以便只為帳戶的實際擁有者更新電子郵件地址。

每個協力廠商可復原登入機制都涉及提示使用者透過適當的 SDK 或協力廠商 API 呼叫登入。將該帳戶連結至 PlayFab 通常遵循相同的模式：

1. 首先，提示使用者登入該服務 (詳細資訊請參閱[登入基本概念和最佳做法](/zh-TW/services/playfab/identity/player-identity/login/login-basics-best-practices))。
2. 登入之後，這些服務會提供某種權杖，可將其傳遞給 PlayFab。
3. 這可讓 PlayFab 安全地連結至該帳戶，而不需要知道使用者在該服務中的認證。

<Note>
  有些服務需要 PlayFab 具備一些額外資訊 (例如應用程式識別碼)，才能為您的遊戲對該服務進行驗證呼叫。在設定遊戲時，請務必查看相關服務的 **Add-on Marketplace** 頁面。
</Note>

### 最佳做法

使用匿名登入以零阻礙的方式建立新玩家。在教學階段之後，溫和地鼓勵玩家將您偏好的可復原認證連結至其帳戶。

如果您使用的是協力廠商驗證系統，請從該服務擷取適當的權杖 (透過 API 呼叫或 SDK 函式)，然後呼叫適當的 PlayFab API，將玩家在該服務的帳戶連結至其 PlayFab 帳戶：[LinkFacebookAccount](xref:titleid.playfabapi.com.client.accountmanagement.linkfacebookaccount)、[LinkGameCenterAccount](xref:titleid.playfabapi.com.client.accountmanagement.linkgamecenteraccount)、[LinkGoogleAccount](xref:titleid.playfabapi.com.client.accountmanagement.linkgoogleaccount)、[LinkKongregate](xref:titleid.playfabapi.com.client.accountmanagement.linkkongregate)、[LinkSteamAccount](xref:titleid.playfabapi.com.client.accountmanagement.linksteamaccount)、[LinkTwitch](xref:titleid.playfabapi.com.client.accountmanagement.linktwitch)、`LinkWindowsHello`\<!-- [LinkWindowsHello](xref:titleid.playfabapi.com.client.accountmanagement.linkwindowshello) -->。

### 最佳做法

* 為了保護使用者隱私，請*不要*儲存或保存任何使用者認證 (這也是符合 COPPA 規範所需的眾多步驟之一，如果您的遊戲有此需求，請務必與您的法律顧問討論，以確認您符合規範)。

* 如果您使用的是 PlayFab 認證，或直接呼叫協力廠商 API，則應盡快從記憶體中清除其登入資訊。一般而言，協力廠商 SDK 會為您處理這項工作。

* 請勿將任何可識別或安全資訊保留在記憶體中超過所需的時間，也不要將其儲存至檔案或遠端位置。PlayFab API 的設計是只使用最少的必要資訊。

## 將新裝置新增至現有的可復原帳戶

PlayFab 允許多個登入和裝置存取同一個帳戶。正確設定後，玩家可以在任何裝置上玩遊戲，放下該裝置，拿起新裝置 (即使是不同類型、品牌、平台或作業系統)，然後繼續玩同一款遊戲，而所有資料都完好無缺。

### 需求

玩家必須擁有兩部裝置：

* **Device1** - 已設定帳戶，且已正確設定可復原認證。理想情況下，第二部裝置也*未*繫結至帳戶。此流程會讓任何僅以第二部裝置識別碼作為登入機制的帳戶成為孤立帳戶，使其無法復原。不過，PlayFab 提供了可以安全偵測並警告此情況的選項。
* 此案例中的所有活動都發生在 **Device2** 上 - 首先，第二部裝置的使用者登入流程必須*反轉*。您必須為使用者提供透過可復原機制登入的選項，而*不要*自動以裝置識別碼登入。

若未執行此步驟，將導致不佳的玩家體驗，玩家會收到可能遺失一個他們從未打算建立之帳戶的警告。

因此，各種情況的流程如下所示，請注意，在所有情況下都只有*一個*玩家帳戶，且該帳戶已連結可復原的帳戶。

**Device1 狀態**：**裝置識別碼**已繫結至玩家帳戶。
**Device2 狀態**：**裝置識別碼***未*繫結至玩家帳戶。

* 在 **Device2** 上登入玩家帳戶 (使用可復原的帳戶認證) 之後，呼叫 [GetPlayerCombinedInfo](xref:titleid.playfabapi.com.client.accountmanagement.getplayercombinedinfo)。
  * 對於該資訊中傳回的每種裝置類型，最近登入的裝置識別碼會傳回在 [result.InfoResultPayload.AccountInfo](xref:titleid.playfabapi.com.client.accountmanagement.getplayercombinedinfo#getplayercombinedinforesultpayload) 中。

由於 **Device2** 尚未連結至此玩家帳戶，相關的裝置識別碼 (**AccountInfo.IosDeviceInfo**、**AccountInfo.AndroidDeviceInfo** 等) 將不會符合 **Device2 識別碼**。

**Device1 狀態**：**裝置識別碼**已繫結至玩家帳戶。
**Device2 狀態**：已使用可復原認證登入，但**裝置識別碼***未*繫結至玩家帳戶。

既然我們已確認 **Device2** 未繫結至此帳戶，就可以嘗試繫結它。

* 呼叫適當的 **LinkAndroidDeviceID**、**LinkIOSDeviceID** 或其他裝置特定的 API 呼叫。
* 如果成功，就完成了，繼續正常遊戲。
* 但就像任何 API 呼叫一樣，*請準備好擷取錯誤*。具體而言，請留意表示裝置已連結至帳戶的錯誤傳回。
* 在此情況下，以**您要將此裝置繫結至此帳戶嗎**訊息提示玩家。
* 請務必提供資訊，說明如果繼續操作，另一個帳戶可能會*遺失*。
* 如果玩家接受此警告，請將 **ForceLink** 屬性設定為 **True**，重新傳送連結要求。
* 這會將 **Device2 識別碼**從舊帳戶取消連結 (如果沒有其他登入機制連結至該帳戶，可能會使其成為孤立帳戶)，並將其繫結至新帳戶。

### 最佳做法

使用 CloudScript 或 PlayStream 事件，將已放棄帳戶的資訊記錄在客戶服務代表可以復原的地方，以防玩家犯錯。

<Note>
  即使是像將 PlayFabId 寫入雲端記錄檔這樣簡單的做法，也可能為忠實玩家挽救一個帳戶。
</Note>

**Device1 狀態**：**裝置識別碼**已繫結至玩家帳戶。
**Device2 狀態**：**裝置識別碼**已繫結至玩家帳戶。

此時，兩部裝置都在同一個帳戶上遊玩，而且兩部裝置都可以安全地使用無阻礙登入。

## 將無阻礙裝置識別碼繫結至現有的可復原帳戶

此案例與上述情況非常類似，差別在於帳戶是使用可復原認證建立的。

您可以在事後繫結匿名登入，將現有的遊戲登入畫面轉換為無阻礙登入。此處的步驟與上述情況幾乎相同，只是只有*單一*裝置 (也就是上述流程中的 **Device2**)。

**裝置狀態**：**裝置識別碼***未*繫結至玩家帳戶。

使用裝置執行可復原登入之後，呼叫 [GetPlayerCombinedInfo](xref:titleid.playfabapi.com.client.accountmanagement.getplayercombinedinfo)。同樣地，透過 [result.InfoResultPayload.AccountInfo](xref:titleid.playfabapi.com.client.accountmanagement.getplayercombinedinfo#getplayercombinedinforesultpayload) 中傳回的資訊，判斷裝置識別碼是否與已繫結的裝置識別碼相符。

由於該裝置從未登入過此帳戶，相關的裝置識別碼 (**AccountInfo.IosDeviceInfo**、**AccountInfo.AndroidDeviceInfo** 等) 將不會符合裝置識別碼。

**裝置狀態**：已使用可復原認證登入，但裝置識別碼未繫結至玩家帳戶。

由於裝置未繫結至此帳戶，我們可以嘗試繫結它。呼叫適當的 **LinkAndroidDeviceID**、**LinkIOSDeviceID** 或其他裝置特定的 API 呼叫。

如果成功，就完成了，繼續正常遊戲。

但同樣地，請準備好擷取錯誤。具體而言，請留意表示裝置已連結至帳戶的錯誤傳回。在此情況下，以**您要將此裝置繫結至此帳戶嗎**訊息提示玩家。

請務必提供資訊，說明如果繼續操作，另一個帳戶可能會遺失。如果玩家接受此警告，請將 **ForceLink** 屬性設定為 **True**，重新傳送連結要求。

這會將裝置識別碼從舊帳戶取消連結 (如果沒有其他登入機制連結至該帳戶，可能會使其成為孤立帳戶)，並將其繫結至新帳戶。

**最佳做法**：

使用 CloudScript 或 PlayStream 事件，將已放棄帳戶的資訊記錄在客戶服務代表可以復原的地方，以防玩家犯錯。即使是像將 PlayFabId 寫入雲端記錄檔這樣簡單的做法，也可能為忠實玩家挽救一個帳戶。

**裝置狀態**：裝置識別碼已繫結至玩家帳戶。

此時，可以在該裝置上使用無阻礙登入，而不是可復原認證。

## 其他最佳做法

上述步驟涉及在登入之前提示使用者。無阻礙登入則是在*不*事先詢問玩家的情況下登入。您可以透過下列建議找到理想的折衷方案：

無阻礙登入 API：您的無阻礙登入都有一個名為 **CreateAccount** 的要求參數。

範例：

* [**AndroidRequest**](xref:titleid.playfabapi.com.client.authentication.loginwithandroiddeviceid)**.CreateAccount**
* [**IosRequest**](xref:titleid.playfabapi.com.client.authentication.loginwithiosdeviceid)**.CreateAccount**。請依照下列指導方針，為此屬性選取 **true** 或 **false**：

**啟動時**：

* 在您的登入場景中，您的遊戲可以立即嘗試以 **CreateAccount=false** 進行無阻礙登入。如果成功，表示此玩家已使用此裝置登入過遊戲，可以安全地直接跳到遊戲場景。擷取此呼叫的錯誤回呼，並讓它顯示首次登入選項。

* **首次登入場景**：對於任何具備無阻礙登入功能的裝置，此場景應包含**立即遊玩**按鈕，以及可讓玩家透過 Facebook、Twitch、Google 或其他可復原登入選項登入現有帳戶的按鈕。**立即遊玩**按鈕應以 **CreateAccount=true** 啟動無阻礙登入。

* **登出**：提供**登出**按鈕，返回您的首次登入場景，但*不要*自動啟動無阻礙登入。這可讓使用者選擇以**可復原**選項登入，然後將裝置繫結至該帳戶，藉此放棄其裝置繫結帳戶。

透過這些建議，您可以避免*大多數*在將多部裝置繫結至同一帳戶時，要求使用者放棄帳戶的尷尬情況。


## Related topics

- [Unity 快速入門](/zh-TW/services/playfab/sdks/unity3d/quickstart.md)
- [快速入門 (Windows) - Core SDK 設定](/zh-TW/services/playfab/sdks/unified-sdk/quickstart-core.md)
- [PlayFab Game Saves 的帳戶連結策略](/zh-TW/services/playfab/player-progression/game-saves/linking.md)
- [Party 快速入門](/zh-TW/services/playfab/multiplayer/networking/quickstart.md)
- [Lobby SDK 快速入門](/zh-TW/services/playfab/multiplayer/lobby/lobby-getting-started.md)
