Как получить имя пользователя Apple, фамилию и адрес электронной почты после получения authToken с помощью Xamarin Essentials Web Authenticator

Я хочу получить электронную почту, имя пользователя, фамилию и т. д. от Apple после Xamarin Froms Essentials Web Authenticator. Я получаю только WebAuthenticatorResult, который содержит только токен, токен обновления и идентификатор токена. Как я могу получить информацию о пользователе с помощью этих токенов? Я также использую Restful Web Api с asp net core 3.1.

Не могли бы вы мне помочь? Документация Apple непонятна и запутана. ПОМОГИТЕ... Спасибо.


person N. OZER SENOL    schedule 06.06.2020    source источник


Ответы (1)


Я не знаю, можете ли вы получить эту информацию о пользователе из Свойство WebAuthenticatorResult.Properties.

Если вы не можете, вы можете реализовать Apple SignIn самостоятельно, как указано здесь вы можете получить эту информацию с помощью DependencyService в Xamarin.forms:

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;
}
person Jack Hua    schedule 08.06.2020