PUN Classic (also called PUN1) is the original and first major version of PUN. It is now replaced by PUN2 which is refactored and enhanced. We highly recommend starting new projects with PUN2 and if possible migrating existing ones from PUN1 to PUN2 by following our "Migration Notes". PUN Classic will be maintained for the coming months. We will fix important bugs and support new Unity versions but new features will be added only to PUN2.

Photon Steam Authentication

Contents

應用程序設置

添加Steam作為認証提供者很簡單,可以在幾秒鐘內從您的Photon應用程序介面完成。 進入應用程序的 "管理 "頁面,向下滑動到 "認証"部分。

如果您為Steam添加一個新的認証提供者或編輯一個現有的認証提供者,此為強制性的設置:

  • apiKeySecret:Steam發行商網絡API密鑰。不要把它與Steam用戶密鑰混淆。請閱讀更多關於如何獲取點此
  • appid:Steam遊戲的ID。您可以在通過Steam Direct程序(以前稱為Steam Greenlight)後得到一個。
  • verifyOwnership:可以是truefalse:是否在認証過程中啟用所有權驗証。 這允許您驗証用戶是否真的擁有(購買了遊戲並在他的資料庫中)該遊戲。 這個步驟,如果啟用,將在驗証用戶的會話票後執行。 啟用這個功能可能會在驗証中增加額外的延遲,所以只有在您真的需要時才啟用它。
  • 驗証VacBan:可以是truefalse。在認証過程中是否檢查用戶是否被Valve的反作弊(VAC)禁止。 閱讀更多 點此。 啟用這個功能可能會增加認証的延遲,所以只有在真正需要時才啟用。
  • 驗証PubBan:可以是truefalse。在認証過程中是否檢查用戶是否被禁止使用發布者禁令。 閱讀更多 點此。 啟用這個功能可能會在認証中增加額外的延遲,所以只有在真正需要的時候才啟用它。

Back To Top

客戶端代碼 (Unity)

客戶端必須使用Valve的Steamworks API來獲得一個會話票。 這個票據可以証明客戶端是一個有效的Steam用戶。

Back To Top

Steamworks.NET

Steamworks.NET是一個流行的免費開源的Steamworks API包裝器。 按照本頁面列出的說明導入Unity版本的Steamworks.NET。

Back To Top

獲取票據

使用下面的代碼,使用Steamworks API獲得一個會話票,並將其轉換為十六進制編碼的UTF-8字符串:

// hAuthTicket should be saved so you can use it to cancel the ticket as soon as you are done with it
public string GetSteamAuthTicket(out HAuthTicket hAuthTicket)
{
    byte[] ticketByteArray = new byte[1024];
    uint ticketSize;
    hAuthTicket = SteamUser.GetAuthSessionTicket(ticketByteArray, ticketByteArray.Length, out ticketSize);
    System.Array.Resize(ref ticketByteArray, (int)ticketSize);
    StringBuilder sb = new StringBuilder();
    for(int i=0; i < ticketSize; i++)
    {
        sb.AppendFormat("{0:x2}", ticketByteArray[i]);
    }
    return sb.ToString();
}

Back To Top

發送票據

客戶端必須將用戶的會話票(在轉換為十六進制編碼的UTF-8字符串後)作為查詢字符串鍵 "ticket "的值發送。

PhotonNetwork.AuthValues = new AuthenticationValues();
PhotonNetwork.AuthValues.UserId = SteamUser.GetSteamID().ToString();
PhotonNetwork.AuthValues.AuthType = CustomAuthenticationType.Steam;
PhotonNetwork.AuthValues.AddAuthParameter("ticket", SteamAuthSessionTicket);
// connect

Back To Top

取消票據

建議在認証完成後取消或撤銷票據。

在PUN中,第一個被觸發的回調和可以取消票據的地方是OnConnectedToPhoton

private void OnConnectedToPhoton()
{
    SteamUser.CancelAuthTicket(hAuthTicket);
}

Back To Top

Facepunch.Steamworks

Facepunch.Steamworks是Steamworks API的另一個免費和開源的實現。 按照本頁所列的說明來導入Facepunch.Steamworks。

Back To Top

獲取票據

使用下面的代碼來獲取一個會話票據,並將其轉換為十六進制編碼的UTF-8字符串:

// authTicket should be saved so you can use it to cancel the ticket as soon as you are done with it
public string GetSteamAuthTicket(out AuthTicket authTicket)
{
    authTicket = SteamUser.GetAuthSessionTicket();
    StringBuilder ticketString = new StringBuilder();
    for (int i = 0; i < authTicket.Data.Length; i++)
    {
        ticketString.AppendFormat("{0:x2}", authTicket.Data[i]);
    }
    return ticketString.ToString();
}

Back To Top

發送票據

客戶端必須將用戶的會話票(在轉換為十六進制編碼的UTF-8字符串後)作為查詢字符串鍵 "ticket "的值發送。

PhotonNetwork.AuthValues = new AuthenticationValues();
PhotonNetwork.AuthValues.UserId = SteamClient.SteamId.ToString();
PhotonNetwork.AuthValues.AuthType = CustomAuthenticationType.Steam;
PhotonNetwork.AuthValues.AddAuthParameter("ticket", steamAuthSessionTicket);
// connect

Back To Top

取消票據

建議在認証完成後取消或撤銷票據。

在PUN中,第一個被觸發的回調和可以取消票據的地方是OnConnectedToPhoton

private void OnConnectedToPhoton()
{
    ticket.Cancel();
}


To Document Top