Вот что я сделал до сих пор:
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.
Вывод: