在没有为会话设置 onActivityResult 的情况下从 facebook activity 获取结果

Get result from facebook activity without onActivityResult set for session

我正在使用 android facebook SDK,但我 运行 遇到了问题。 我创建了 2 个 classes,它们是:

public class FacebookSession implements Session.StatusCallback {

public interface SessionCallbacks {
    public void onSessionOpened(String token, User user, boolean isNewProfile);
    public void onSessionOpenFailed(String errorText);
}

public FacebookSession(Activity activity) {
    ...
}

@Override
public void call(Session session, SessionState sessionState, Exception e) {
    switch (sessionState) {
        case CLOSED:
            ...
            // Calling SessionCallbacks callbacks here
            break;

        case CLOSED_LOGIN_FAILED:
            ...
            // Calling SessionCallbacks callbacks here
            break;

        case OPENED:
            ...
            // Calling SessionCallbacks callbacks here
            break;

        case OPENED_TOKEN_UPDATED:
            ...
            // Calling SessionCallbacks callbacks here
            break;
    }
}
}

在我的 activity 调用 Facebook 会话中:

public class LoginActivity extends FragmentActivity implements
    FacebookSession.SessionCallbacks {

public LoginActivity() {

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    ...
}

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

    Session.getActiveSession().onActivityResult(this, requestCode,
            resultCode, data);
}

@Override
public void onSessionOpened(String token, User user, boolean isNewProfile) {
    ...
}
}

如您所见,如果我想要结果,我必须使用 FacebookSession class 在每个 activity 的 onActivityResult 方法中调用 Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);FacebookSessioncall 回调中返回。如果我不这样做,我的 FacebookSession 就无法工作。我想在这里做的是不必为每个使用 FacebookSession 的活动调用此 Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);。有解决方法吗?谢谢

如果您的所有活动都可能使用户登录或请求额外的权限,那么不,实现 onActivityResult 方法没有解决方法。通常情况下,使用 Facebook 登录功能的应用程序只会通过一些有限的活动来登录,所以这不是问题。

您要处理多少活动?如果您绝对认为这是一个问题,那么您可以

  1. 创建一个 BaseActivity class,你的所有 Activity 都扩展,并将 onActivityResult 放在父 class 中;或

  2. 将您所有的 Facebook 集成移动到一个集中的 activity。