Unity Firebase安卓端Apple登录后如何获取Apple ID Token?
Unity Firebase安卓端获取Apple登录的ID Token
场景与现有代码
已在Unity Firebase安卓端实现Apple登录,代码如下:
var providerData = new FederatedOAuthProviderData { ProviderId = "apple.com" }; var provider = new FederatedOAuthProvider(); provider.SetProviderData(providerData); await auth.SignInWithProviderAsync(provider).ContinueWith(task => { var result = task.Result; });
问题
如何从task.Result中获取Apple ID Token?
返回数据补充
登录成功后返回的数据包含两部分:
1. 用户信息
{ "PhotoUrl": null, "DisplayName": "", "Email": "bangminhkiet@hoppergames.io", "IsAnonymous": false, "IsEmailVerified": true, "Metadata": { "LastSignInTimestamp": 1660117698962, "CreationTimestamp": 1660116775373 }, "PhoneNumber": "", "ProviderData": [ { "PhotoUrl": null, "UserId": "elba7GqsGccUvQiYnEZr5KTtHlv2", "Email": "bangminhkiet@hoppergames.io", "DisplayName": "", "ProviderId": "firebase" }, { "PhotoUrl": null, "UserId": "000435.d5a5ca436f7645f992af1e1cc4d8e97b.0728", "Email": "bangminhkiet@hoppergames.io", "DisplayName": "", "ProviderId": "apple.com" } ], "ProviderId": "firebase", "UserId": "elba7GqsGccUvQiYnEZr5KTtHlv2" }
2. 额外信息
{ "Profile": { "at_hash": "W89x3Dkr7ri-mMHu2bHdiw", "aud": "com.m.obirix.mbgk.web", "auth_time": 1660117696, "email": "bangminhkiet@hoppergames.io", "email_verified": "true", "exp": 1660204098, "iat": 1660117698, "iss": "https://appleid.apple.com", "nonce_supported": true, "sub": "000435.d5a5ca436f7645f992af1e1cc4d8e97b.0728" }, "ProviderId": "apple.com", "UserName": "", "UpdatedCredential": { "Provider": "" } }
解决方案
要获取Apple ID Token,需从SignInResult的Credential属性中提取,具体代码修改如下:
await auth.SignInWithProviderAsync(provider).ContinueWith(task => { if (task.IsCompletedSuccessfully) { var result = task.Result; // 将凭证转换为OAuthCredential类型 var appleOAuthCredential = result.Credential as OAuthCredential; if (appleOAuthCredential != null) { // 获取Apple ID Token字符串 string appleIdToken = appleOAuthCredential.IdToken; // 后续可对Token进行使用或存储 } } else { // 处理登录失败逻辑 var exception = task.Exception; } });
说明
SignInResult.Credential存储了第三方登录的原始凭证信息,转换为OAuthCredential后,IdToken属性即为Apple官方返回的ID Token字符串。- 你补充信息中的
Profile是Apple ID Token解码后的JWT payload内容,而实际的Token字符串需要通过上述方式从凭证中获取。
内容的提问来源于stack exchange,提问作者Nguyen Hoai Nam
相关产品推荐
相关产品推荐

