2010-06-27 2 views
0

J'utilise le signpost-oauth do oauth dans android, et après la connexion sur la page Web, revenez à l'activité, le fournisseur est parfois null.Le fournisseur est null en faisant oauth après avoir retourné de la page Web

public class LoginActivity extends Activity implements View.OnClickListener { 

private static OAuthConsumer consumer; 
private static OAuthProvider provider; 

private static final Uri CALLBACK= Uri.parse("xxx://callback?"); 

... 

@Override 
protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     final Uri uri = intent.getData(); 
     if (uri != null && uri.toString().startsWith(CALLBACK)) { 

      final String pin = uri.getQueryParameter(OAuth.OAUTH_VERIFIER); 

      try { 
       //provider.setOAuth10a(true); 
       provider.retrieveAccessToken(consumer, pin); 
        } catch (final Exception e) { 

      } 
      } 
} 
... 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.oAuthLoginBtn: 
     new Thread(new Runnable() { 
     public void run() { 
      LoginActivity.consumer = new CommonsHttpOAuthConsumer(
          apiKey, appSecret); 
      LoginActivity.provider = new CommonsHttpOAuthProvider(
          oauthUrl + Data.REQUEST_TOKEN_URL, oauthUrl 
            + Data.ACCESS_TOKEN_URL, oauthUrl 
            + Data.AUTHORIZE_URL); 

    LoginActivity.provider.setOAuth10a(true); 
      try { 
         final String authUrl = LoginActivity.provider 
           .retrieveRequestToken(LoginActivity.consumer, 
             CALLBACK); 

         final Uri uri = Uri.parse(authUrl); 
         final Intent it = new Intent(Intent.ACTION_VIEW, uri); 
         LoginActivity.this.startActivity(it); 
     } catch (final Exception e) { 

      } 
     } 
     }).start(); 
     break; 
    } 

}

et manifest.xml

<activity android:name=".ui.LoginActivity" android:label="@string/activity_login" 
      android:launchMode="singleInstance" android:configChanges="orientation|keyboardHidden"> 
      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <data android:scheme="xxx" /> 
      </intent-filter> 
     </activity> 

Je ne sais pas pourquoi le fournisseur est parfois nulle.

Répondre

0

Je pense que vous ne recevez pas les correctes oauth_token et oauth_verifier. définir un hôte

<data android:scheme="xxx" android:host="twitt" /> 

les bonnes valeurs.

xxx://twitt?oauth_token=it23W5yOy13x6s1ox6kpaOow2aM70OKTW3WTy4h8Q4&oauth_verifier=gRuGGE4osgjTwltooi9MG4u7a4EbxAsIxvVjZqd9dA 
+0

Salut, j'utiliser ceci: xxx: // rappel oauth_verifier = IMoNvawE3nA56zW8dkPl9L% 2FR & oauth_token = 4% 2FuvcAWpzjMNcRBvLKwW4xn9GZDp2a --- ----------------------------- Je vais le tester pendant un moment pour voir s'il est encore parfois nul, thx. – kmlzkma

+0

salut j'ai déplacé cette ligne Provider.setOAuth10a (true); et définissez CALLBACK comme une variable statique !, et j'ai une question pourquoi n'utilisez-vous pas onResume() au lieu de onNewIntent()? – Jorgesys

+0

Salut, j'ai trouvé qu'il est encore parfois null.J'ai utilisé launchMode = "singleInstance" dans le fichier manifest.xml, il faut donc utiliser onNewIntent() pour recevoir cela. – kmlzkma

0

Peut-être <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> et/ou <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> manque?

Questions connexes