Я ввел Google Login, используя Xamarin.Auth в Xamarin. iOS, но после входа он не перенаправляет обратно в мое приложение? Как это исправить? - PullRequest
0 голосов
/ 01 мая 2020

Вот что я сделал до сих пор:

LoginViewController.cs

public static GoogleAuthenticator gAuth;

public override void ViewDidLoad()
{
     gAuth = new GoogleAuthenticator("MyAppClientId", "email","reversed_url", this);
     this.btnGoogleLogin.TouchUpInside += this.BtnGoogleLogin_TouchUpInside;
}

private void BtnGoogleLogin_TouchUpInside(object sender, EventArgs e)
{
    var authenticator = gAuth.GetAuthenticator();
    var viewcontroller = authenticator.GetUI();
    this.PresentViewController(viewcontroller, false, null);
}

Код аутентификатора:

public class GoogleAuthenticator
{
    private const string AuthorizeUrl = "https://accounts.google.com/o/oauth2/v2/auth";
    private const string AccessTokenUrl = "https://www.googleapis.com/oauth2/v4/token";
    private const bool IsUsingNativeUI = true;
    private OAuth2Authenticator _auth;
    private IGoogleAuthDelegate _authenticationDelegate;

    public GoogleAuthenticator(string clientId, string scope, string redirectUrl, IGoogleAuthDelegate authenticationDelegate)
    {
        this._authenticationDelegate = authenticationDelegate;

        this._auth = new OAuth2Authenticator(clientId, string.Empty, scope,
                                        new Uri(AuthorizeUrl),
                                        new Uri(redirectUrl),
                                        new Uri(AccessTokenUrl),
                                        null, IsUsingNativeUI);
        this._auth.Completed += this.OnAuthenticationCompleted;
        this._auth.Error += this.OnAuthenticationFailed;
        AuthenticationState.Authenticator = this._auth;
    }

    public OAuth2Authenticator GetAuthenticator()
    {
        return this._auth;
    }

    public void OnPageLoading(Uri uri)
    {
       this._auth.OnPageLoading(uri);
    }

    private void OnAuthenticationCompleted(object sender, AuthenticatorCompletedEventArgs e)
    {
        if (e.IsAuthenticated)
        {
            var token = new GoogleOAuthToken
            {
                TokenType = e.Account.Properties["token_type"],
                AccessToken = e.Account.Properties["access_token"],
            };
            this._authenticationDelegate.OnAuthenticationCompleted(token);
        }
        else
        {
            this._authenticationDelegate.OnAuthenticationCanceled();
        }
    }

    private void OnAuthenticationFailed(object sender, AuthenticatorErrorEventArgs e)
    {
        this._authenticationDelegate.OnAuthenticationFailed(e.Message, e.Exception);
    }
}

AppDelegate.cs

public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)
{
    Uri uri = new Uri(url.AbsoluteString);
    GlobalConstants.AuthenticationState.OnPageLoading(uri);
    return true;
}

После входа в систему он показывает этот экран, а когда нажимает кнопку «Готово», он вызывает OnAuthenticationCompleted и показывает Аутентификацию как ложную и возвращает обратно в мое приложение.

Я добавил схему URL в файле Info.Plist.

Вывод:

enter image description here

...