[U] add PlayFab SDK and SNS login improvements
- Add PlayFabSDK as local package dependency - Add PlayFabTool.cs for PlayFab API integration - Implement LoginBySns method in TYSdkFacade - Add Android SNS login support in SDKManager and UnityBridgeFunc - Add Build Android With Debug menu option - Improve exception handling and timeout management 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
107
sdk-intergration/Assets/Scripts/PlayFabTool.cs
Normal file
107
sdk-intergration/Assets/Scripts/PlayFabTool.cs
Normal file
@@ -0,0 +1,107 @@
|
||||
using PlayFab.ClientModels;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using PlayFab;
|
||||
using UnityEngine;
|
||||
|
||||
public class PlayFabTool
|
||||
{
|
||||
public class PFPlayerInfo
|
||||
{
|
||||
public string DisplayName { get; set; }
|
||||
public string Avatar { get; set; }
|
||||
public int SdkId { get; set; }
|
||||
public string PlayFabId { get; set; }
|
||||
public int Level { get; set; }
|
||||
public int Diamond { get; set; }
|
||||
public int Energy { get; set; }
|
||||
|
||||
public static PFPlayerInfo Empty(int sdkId)
|
||||
{
|
||||
return new PFPlayerInfo()
|
||||
{
|
||||
DisplayName = "Unknown",
|
||||
SdkId = sdkId,
|
||||
PlayFabId = string.Empty,
|
||||
Level = 0,
|
||||
Diamond = 0,
|
||||
Energy = 0
|
||||
};
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return JObject.FromObject(this).ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task<PFPlayerInfo> GetPFPlayerInfoBySDKId(int sdkId, string playfabTitleId)
|
||||
{
|
||||
PlayFab.Internal.PlayFabWebRequest.SkipCertificateValidation();
|
||||
var tcs = new TaskCompletionSource<PFPlayerInfo>();
|
||||
var settings = new PlayFabApiSettings() { TitleId = playfabTitleId };
|
||||
var pfClient = new PlayFabClientInstanceAPI(settings);
|
||||
|
||||
var requestParams = new GetPlayerCombinedInfoRequestParams()
|
||||
{
|
||||
GetPlayerProfile = true,
|
||||
GetUserData = true,
|
||||
ProfileConstraints = new PlayerProfileViewConstraints()
|
||||
{
|
||||
ShowDisplayName = true,
|
||||
ShowAvatarUrl = true,
|
||||
},
|
||||
UserDataKeys = new List<string>() { "NewPlayerDataDic" }
|
||||
};
|
||||
|
||||
var request = new LoginWithCustomIDRequest()
|
||||
{
|
||||
CreateAccount = false,
|
||||
CustomId = sdkId.ToString(),
|
||||
InfoRequestParameters = requestParams
|
||||
};
|
||||
|
||||
pfClient.LoginWithCustomID(request,
|
||||
(result) =>
|
||||
{ var infoResultPayload = result.InfoResultPayload;
|
||||
|
||||
if(!infoResultPayload.UserData.TryGetValue("NewPlayerDataDic", out var userData))
|
||||
{
|
||||
tcs.SetResult(PFPlayerInfo.Empty(sdkId));
|
||||
return;
|
||||
}
|
||||
var playerProfile = infoResultPayload.PlayerProfile;
|
||||
var displayName = playerProfile.DisplayName;
|
||||
var avatar = playerProfile.AvatarUrl;
|
||||
var playfabId = result.PlayFabId;
|
||||
|
||||
JObject userDataJson = JObject.Parse(userData.Value);
|
||||
if(!userDataJson.TryGetValue("newData", out var newData))
|
||||
{
|
||||
tcs.SetResult(PFPlayerInfo.Empty(sdkId));
|
||||
return;
|
||||
}
|
||||
var dataList = newData.ToString().Split(',');
|
||||
var level = int.Parse(dataList[0]);
|
||||
var energy = int.Parse(dataList[3]);
|
||||
var diamond = int.Parse(dataList[11]);
|
||||
var pfPlayerInfo = new PFPlayerInfo(){
|
||||
DisplayName = displayName,
|
||||
Avatar = avatar,
|
||||
SdkId = sdkId,
|
||||
PlayFabId = playfabId,
|
||||
Level = level,
|
||||
Diamond = diamond,
|
||||
Energy = energy
|
||||
};
|
||||
tcs.SetResult(pfPlayerInfo);
|
||||
},
|
||||
(error) =>
|
||||
{
|
||||
Debug.LogWarning(error.ErrorMessage);
|
||||
tcs.SetResult(null);
|
||||
});
|
||||
return await tcs.Task;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user