2012-04-12 132 views
0

我试图将Facebook集成到Android应用程序。我已将代码添加到Facebook授权中(根据此处的指导原则,执行了所有步骤)http://developers.facebook.com/docs/mobile/android/build/)。 每当Facebook授权发生时,onActivityResult将被回调,但数据为null,resultCode为0(零/ RESULT_CANCELED)。Android的Facebook的授权onActivityResult()总是调用数据为空和resultCode为0(零/ RESULT_CANCELED)

这里是我的代码:

主要活动类

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

MCAndroidFBIntegration.java

公共类MCAndroidFBIntegration实现IFacebookIntegration {

private static final String APP_ID = APP_ID_NUMBER; 
private static Facebook facebook; 
private AsyncFacebookRunner mAsyncFBRunner; 
public Preferences mPrefs; 
private Context ctx; 
private static MCAndroidFBIntegration mcAndroidFBIntegration; 

public MCAndroidFBIntegration(Context ctx) { 
    this.ctx = ctx; 
} 

@Override 
public void integrate() { 
    // Integrate with Facebook 
    facebook = new Facebook(APP_ID); 
    mAsyncFBRunner = new AsyncFacebookRunner(facebook); 
    loginToFacebook();  
} 

private void loginToFacebook() { 
    mPrefs = GamePreference.getPreferences(); 
    String accessToken = mPrefs.getString(Config.ACCESS_TOKEN, null); 
    long expires = mPrefs.getLong(Config.ACCESS_EXPIRES, 0); 

    if (accessToken != null) { 
     facebook.setAccessToken(accessToken); 
    } 

    if (expires != 0) { 
     facebook.setAccessExpires(expires); 
    } 

    if (!facebook.isSessionValid()) { 
     facebook.authorize((Activity) ctx, new String[] { "publish_stream", 
       "read_stream", "offline_access"}, new DialogListener() { 

      @Override 
      public void onCancel() { 
       // Function to handle cancel event 
       System.out.println("Facebook:: event cancelled"); 
      } 

      @Override 
      public void onComplete(Bundle values) { 
       // Function to handle complete event 
       // Edit Preferences and update facebook acess_token 
       System.out 
         .println("Facebook:: setting access token and expire time in preferences"); 
       User user = User.getUser(); 
       if (user != null) { 
        user.setAccessToken(facebook.getAccessToken()); 
        user.setAccessExpires(facebook.getAccessExpires()); 
        user.updatePrefs(); 
        mPrefs.flush(); 
       } 
      } 

      @Override 
      public void onError(DialogError error) { 
       // Function to handle error 
       System.out.println("Facebook:: Error - " 
         + error.getLocalizedMessage()); 

      } 

      @Override 
      public void onFacebookError(FacebookError fberror) { 
       // Function to handle Facebook errors 
       System.out.println("Facebook:: fbError - code: " 
         + fberror.getErrorCode() + " message: " 
         + fberror.getLocalizedMessage()); 
      } 

     }); 
    } 
} 

public static void authorizeCallback(int requestCode, int resultCode, 
     Intent data) { 
    if (data != null) { 
     String error = data.getStringExtra("error"); 
     if (error != null) { 
      String description = data.getStringExtra("error_description"); 
      System.out.println("Facebook:: error desc - " + description); 
     } else { 
      String token = data.getStringExtra("access_token"); 
      String expires = data.getStringExtra("expires_in"); 
      System.out.println("Facebook:: call back access token - " 
        + token); 
      System.out.println("Facebook:: call back expires - " + expires); 
     } 
    } 
    facebook.authorizeCallback(requestCode, resultCode, data); 
} 

}

有人请告诉我什么是我在这里做的错误。

感谢, 卡迈勒

+0

我在日志中总是得到这个** **活动作为新任务启动,因此取消活动结果**。这是什么意思?我搜索了这个网络,发现这与android:launchMode =“singleInstance”有关。但是,当我改变了这一点,我得到了一些其他错误,如验证失败,因为无效的Android应用程序密钥。我该怎么办?我很困惑和疲惫 – Kamal 2012-04-12 08:49:00

+0

嗨Kamal,你设法解决这个问题吗?我面临同样的问题,但非常困惑 – user669231 2012-07-12 15:37:44

回答

1

我还挺面临同样的问题。并更新下面的代码来解决它。

public void loginAndPostToWall() { 
    facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, 
     new LoginDialogListener());} 
相关问题