【问题标题】:android facebook authorization onActivityResult() always getting called with data as null and resultCode is 0 (zero/RESULT_CANCELED)android facebook授权onActivityResult()总是被调用,数据为null,resultCode为0(零/RESULT_CANCELED)
【发布时间】:2012-04-12 05:58:31
【问题描述】:

我正在尝试将 facebook 集成到一个 android 应用程序中。我已将代码添加到 facebook 授权中(按照此处http://developers.facebook.com/docs/mobile/android/build/ 的指南执行所有步骤)。 每当 facebook 授权发生时,onActivityResult 将被回调,但数据为 null,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);
}

}

有人请告诉我我在这里犯了什么错误。

谢谢, 卡马尔

【问题讨论】:

  • 我总是在日志中看到这个。**活动作为新任务启动,因此取消活动结果**。这是什么意思?我在网上搜索了这个,发现这与 android:launchMode="singleInstance" 有关。但是当我改变这个时,我得到了一些其他的错误,比如 Authentication failed 因为无效的 android 应用程序密钥。我该怎么办?我很困惑和筋疲力尽
  • 嗨,Kamal,你解决了这个问题吗?我面临同样的问题,但很困惑

标签: android android-activity


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2019-05-02
    • 2019-10-14
    • 1970-01-01
    • 2012-06-08
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    相关资源
    最近更新 更多