2011-08-01 3 views
6

J'essaie une petite application pour Windows Phone 7 qui utilisent les services de tâches Google, le problème est que je ne suis pas en mesure de passer pour se connecter.Utilisation de Google oAuth sur WP7

J'ai lu toutes les étapes données dans la documentation et les suivant
http://code.google.com/apis/accounts/docs/OAuth2.html#IA selon le document J'ai besoin d'utiliser le contrôle web pour me connecter.

Y at-il un moyen que je peux attendre le mot de passe de nom d'utilisateur et obtenir le jeton d'authentification en arrière-plan?

Répondre

15

Vous pouvez utiliser ClientLogin pour faire les choses en arrière-plan, mais il est remplacé (lentement) et ne fonctionne pas avec tous les comptes Google (en deux étapes), donc je vous conseille de rester avec oAuth2.

Comment je le fais est ouvert un contrôle WebBrowser, en vous assurant IsScriptEnabled="true" puis pointer à

https://accounts.google.com/o/oauth2/auth?client_id=xxx&redirect_uri=https://www.mydomain.com/oauth2callback&scope=xxx&response_type=code 

La partie vraiment importante est l'URL de redirection. Vous devez ensuite connecter une méthode Navigating à votre contrôle WebBrowser pour intercepter la redirection vers cette URL.

<phone:WebBrowser Name="webbrowser" Navigating="webbrowser_Navigating" IsScriptEnabled="true" /> 

private void webbrowser_Navigating(object sender, NavigatingEventArgs e) { 
    if (e.Uri.Host.Equals("www.mydomain.com")) { 
    e.Cancel = true; 
    HandleOAuthResponse(e.Uri.Query); 
    } 
} 

Cela vous donnera de nouveau la chaîne de requête google réoriente qui a le code=xxx que vous suivez ensuite le reste de la documentation et l'échange pour un jeton qui va durer 30 minutes et un jeton de rafraîchissement pour maintenir l'authentification active.

+0

Cela a beaucoup aidé ... merci beaucoup – Apoorva

2

Avoir un look at this post il s'agit d'un client Twitter, mais twitter utilise OAuth aussi.

EDIT

Je lis plus sur ce sujet et il semble y avoir un problème, car il est obligatoire d'utiliser la page Web et avoir à l'utilisateur de copier le code d'accès à l'application. It appears to be hard/impossible to scrape the Webbrowser Je n'ai trouvé aucune référence à une vraie solution pour le moment.

0

Je pense que vous pouvez mettre au rebut le webBrowser en utilisant la méthode webBrowser.SaveToString().

-2

Vous pouvez réellement rayer l'adresse URI du navigateur en saisissant e.Uri.ToString() et utilisez la méthode de remplacement pour supprimer les éléments non nécessaires, par ex. thestring.Replace("http://fakeuri.com/code=","");

Le seul problème que j'ai est avec le jeton d'accès.