2012-05-29 3 views
0

J'essaye d'autoriser mon application mobile avec facebook, mais quand la fenêtre d'autorisation de facebook est fermée, elle ne revient pas à la méthode continueLoading (1) de mon application. ne peut pas comprendre pourquoi:android autorisant avec facebook

private void authorizeFacebook(final Loader loader) {  
    String[] permissions = new String[] {"friends_status", "user_status"}; 
    facebook.authorize(this, permissions , new DialogListener() { 
     @Override 
     public void onComplete(Bundle values) { 
      Log.e("finish", "oncomplete"); 
      //SharedPreferences.Editor editor = mPrefs.edit(); 
      //editor.putString("access_token", facebook.getAccessToken()); 
      //editor.putLong("access_expires", facebook.getAccessExpires()); 
      //editor.commit();     
      loader.continueLoading(1); 
     } 

     @Override 
     public void onFacebookError(FacebookError error) { 
      Log.i("FacebookAuthorize", error.toString());    
      app.alert("Facebook Connection Error", "Please try to re-open the application", "Ok", loader);  
     } 

     @Override 
     public void onError(DialogError e) { 
      Log.i("FacebookAuthorize", e.toString());    
      app.alert("Facebook Connection Error", "Please try to re-open the application", "Ok", loader); 
     } 

     @Override 
     public void onCancel() { 
      Log.i("FacebookAuthorize", "onCancel"); 
      app.alert("Facebook Connection Error", "Please try to re-open the application", "Ok", loader); 
     } 
    }); 

} 

    @Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    facebook.authorizeCallback(requestCode, resultCode, data); 
} 

la première étape du chargeur:

private void continueLoading(int step) {  
    switch(step) 
    { 
      //loading current user facebook profile 
    case 1: progressBar.incrementProgressBy(750);    
      loadingStatus.setText("Getting user's facebook details");        
      facebookRunner = new AsyncFacebookRunner(facebook);   
      facebookConnection = new FacebookConnection(this, 1); 
      facebookRunner.request("me",facebookConnection); 
      app.setFacebook(facebook); 
      app.setFacebookRunner(facebookRunner); 
      break; 

au lieu de revenir à mon application, il tout juste à proximité ..

+0

Qu'est-ce que cette ligne va faire? loader.continueLoading (1); – Venky

+0

continue le chargement ... je vais l'ajouter à ma question –

+0

Après la connexion réussit si vous devez passer à une nouvelle activité dites Activity_1, puis ajoutez les lignes startActivity (new Intent (this, Activity_1.class)); – Venky

Répondre

0

le facebook android sdk h comme deux flux d'authentification différents:

1) SSO - sera utilisé si l'utilisateur a installé l'application facebook sur le même appareil. Si tel est le cas, le sdk facebook que vous utilisez va lancer une nouvelle intention à l'application facebook pour authentifier l'utilisateur contre votre application. Pour être en mesure de savoir quand cela est fait vous devez ajouter ceci:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    facebook.authorizeCallback(requestCode, resultCode, data); 
} 

2) Si l'appareil ne dispose pas de l'application facebook installé, le SDK ouvrira sa propre boîte de dialogue pour l'authentification de l'utilisateur, dans ce Dans le cas où l'implémentation DialogListener que vous passez à la méthode authorize sera utilisée.

Vous devez avoir les deux (DialogListener et onActivityResult) pour gérer les deux cas.

+0

ohh donc vous dites que je devrais utiliser la méthode continueChargement à l'intérieur de l'écouteur de boîte de dialogue pour les utilisateurs sans application facebook et le onActivityResult pour les utilisateurs qui ont. donc si je comprends bien, je devrais ajouter le continueLoading (1) dans le onActivityResult? –

+0

Non. Vous appelez seulement 'facebook.authorize', alors le sdk décide d'utiliser sa boîte de dialogue ou d'utiliser une intention. Si une intention a été utilisée, alors la méthode 'onActivityResult' est exécutée, ce qui informe ensuite le sdk (' facebook.authorizeCallback') et le sdk devrait alors appeler le 'onComplete' de l'implémentation' DialogListener' que vous avez fournie. Tout ce que vous devez faire est d'ajouter la méthode 'onActivityResult'. –

+0

mais j'ai une méthode onActivityResult .. j'ai toujours eu .. je l'ai même coller dans mon extrait de code –

Questions connexes