2017-10-10 2 views
0

J'ai parcouru le web en essayant d'obtenir une réponse à cette question et j'en ai trouvé beaucoup mais aucun d'entre eux ne fonctionne. Google exige que l'authentification se passe dans le navigateur et non dans un WebView. Je l'ai mis en œuvre comme ceci pour Android:Utilisation de Google pour me connecter à mon application en utilisant Xamarin Forms et Xamarin.Auth

var activity = this.Context as Activity; 

var auth = new OAuth2Authenticator(
    clientId: "xxxx.apps.googleusercontent.com", 
    scope: "", 
    authorizeUrl: new Uri("https://accounts.google.com/o/oauth2/auth"), 
    redirectUrl: new Uri("myredirecturi")); 
auth.Completed += (sender, eventArgs) => { 
    if (eventArgs.IsAuthenticated) 
     { 
      App.SuccessfulLoginAction.Invoke(); 
      App.SaveToken(eventArgs.Account.Properties["access_token"]); 
     } 
}; 
activity.StartActivity(auth.GetUI(activity)); 

Et comme ça pour iOS:

var auth = new OAuth2Authenticator(
    clientId: "xxxx.apps.googleusercontent.com", // your OAuth2 client id 
    scope: "", 
    authorizeUrl: new Uri("https://accounts.google.com/o/oauth2/auth"), 
    redirectUrl: new Uri("myredirecturi")); 

auth.Completed += (sender, eventArgs) => 
{ 
    App.SuccessfulLoginAction.Invoke(); 

    if (eventArgs.IsAuthenticated) 
    { 
     App.SaveToken(eventArgs.Account.Properties["access_token"]); 
    } 
    PresentViewController(auth.GetUI(), true, null); 
}; 

Mais cela fait exactement ce que je ne veux pas faire (ouvre une WebView) et chaque réponse que j'ai trouvé fait exactement cela. Comment puis-je faire correctement pour que le navigateur s'ouvre et retourne à mon application quand c'est fait?

En outre, je sais que la portée spécifie ce que je veux faire, et dans ce cas, c'est juste une connexion, mais je n'ai pas encore trouvé un exemple de ce qu'il faut réellement mettre là.

Tout exemple sera vraiment apprécié.

+0

J'ai trouvé cette question similaire [link] (https://stackoverflow.com/questions/45750554/xamarin-forms-google-authenticateion-error-disallowed-useragent?rq=1) et la réponse indique que si elle s'exécute sur un émulateur sans Chrome installé, il retournera à WebView. C'est ce que je faisais, mais j'ai débogué sur mon téléphone et j'ai eu le même problème. –

Répondre

0

Vous devez activer spécifiquement le type d'authentification native. Alors, ajoutez ce qui suit à vos OAuth2Authenticator s dans chaque projet:

new OAuth2Authenticator { 
    isUsingNativeUI = true 
} 

Assurez-vous également que vous utilisez au moins la version 1.5.0+ pour obtenir cette propriété.