2012-05-29 91 views
0

我试图授权我的手机应用程序与facebook,但是当facebook授权窗口关闭时,它不会回到我的应用程序的continueLoading(1)方法.. 无法理解为什么:android授权与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); 
} 

装载机的第一步:

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; 

回来我的应用程序,它只是接近的一切,而不是..

+0

这条线会做什么? loader.continueLoading(1); – Venky

+0

它继续加载...我会将它添加到我的问题 –

+0

登录成功后,如果您需要移动到新的活动说Activity_1,然后添加此行startActivity(new Intent(this,Activity_1.class)); – Venky

回答

0

Facebook的Android SDK中^ h作为两种不同的认证流程:

1)SSO - 将在用户在同一设备上安装facebook应用程序时使用。 如果是这种情况,那么您正在使用的Facebook sdk将启动Facebook应用的新意向,以针对您的应用对用户进行身份验证。 为了能够知道什么时候这样做了你需要补充一点:

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

2)如果设备没有安装,则SDK将打开它的用户认证自己的对话框的Facebook应用程序,在此将使用您传递给authorize方法的DialogListener实例。

您需要同时具备(DialogListeneronActivityResult)才能处理这两种情况。

+0

哦,所以你说我应该使用continueLoading方法在没有Facebook应用程序的用户的对话框侦听器内部以及具有的用户的onActivityResult。 因此,如果我正确理解这一点,我应该在onActivityResult中添加continueLoading(1)以及? –

+0

不可以。你只调用'facebook.authorize',那么sdk决定是使用它的'对话框还是使用一个意图。如果使用了intent,则会执行'onActivityResult'方法,然后通知sdk('facebook.authorizeCallback'),然后sdk应该调用您提供的'DialogListener'实现的'onComplete'。所有你需要做的就是添加'onActivityResult'方法。 –

+0

但我有一个onActivityResult方法..我一直有..我甚至将它粘贴在我的代码片段 –