0

我想在 Xamarin Froms Essentials Web Authenticator 之后从 Apple 获取电子邮件和用户名和姓氏等。我只得到仅包含令牌、刷新令牌和令牌 ID 的 WebAuthenticatorResult。如何使用此令牌获取用户信息?我也将 Restful Web Api 与 asp net core 3.1 一起使用。

你能帮我么?苹果文档不清楚,而且很混乱。请帮助...谢谢。

4

1 回答 1

0

我不知道您是否可以从WebAuthenticatorResult.Properties Property获取这些用户信息。

如果不能,您可以按照此处所述自行实现 Apple SignIn ,您可以使用 Xamarin.forms 中的 DependencyService 获取这些信息:

public interface IAppleSignInService
{
    bool Callback(string url);

    Task<AppleAccount> SignInAsync();
}

在 iOS 项目中:

public async Task<AppleAccount> SignInAsync()
{
    // Fallback to web for older iOS versions
    if (!Is13)
        return await webSignInService.SignInAsync();

    AppleAccount appleAccount = default;

#if __IOS__13
    var provider = new ASAuthorizationAppleIdProvider();
    var req = provider.CreateRequest();

    authManager = new AuthManager(UIApplication.SharedApplication.KeyWindow);

    req.RequestedScopes = new[] { ASAuthorizationScope.FullName, ASAuthorizationScope.Email };
    var controller = new ASAuthorizationController(new[] { req });

    controller.Delegate = authManager;
    controller.PresentationContextProvider = authManager;

    controller.PerformRequests();

    var creds = await authManager.Credentials;

    if (creds == null)
        return null;

    appleAccount = new AppleAccount();
    appleAccount.IdToken = JwtToken.Decode(new NSString(creds.IdentityToken, NSStringEncoding.UTF8).ToString());
    appleAccount.Email = creds.Email;
    appleAccount.UserId = creds.User;
    appleAccount.Name = NSPersonNameComponentsFormatter.GetLocalizedString(creds.FullName, NSPersonNameComponentsFormatterStyle.Default, NSPersonNameComponentsFormatterOptions.Phonetic);
    appleAccount.RealUserStatus = creds.RealUserStatus.ToString();
#endif

    return appleAccount;
}
于 2020-06-08T02:42:44.803 回答