前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

FacebookCallbackが実行されない

ちょっと嵌ったのでメモ。

Facebook Android SDKの4.2でCallbackManagerのonActivityResultまでバッチリ呼ばれたにも関わらず、FacebookCallbackが呼ばれないケースがあった。

結論からいうとrequestCodeが一致していなかった。

//登録
        mCallbackManager = CallbackManager.Factory.create();
        LoginManager.getInstance().registerCallback(mCallbackManager, mFacebookLoginCallback); //requestCode=64206

ログインの呼び出し時にActivityを渡すか、Fragmentを渡すかで戻ってくるrequestCodeが異なってくる。

//Fragmentを渡す
LoginManager.getInstance().logInWithReadPermissions(this, Consts.FB_READ_PERMISSIONS); //requestCode=195278
//Activityを渡す
LoginManager.getInstance().logInWithReadPermissions(getActivity(), Consts.FB_READ_PERMISSIONS); //requestCode=64206

requestCodeの下位16bitだけ見るようにすれば呼び方は影響しない。

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

        int code = requestCode & 0xffff;
        mCallbackManager.onActivityResult(requestCode, resultCode, intent);
    }

おまけ

Facebook のrequestCodeの一覧は下記の通り。

CallbackManagerImpl.RequestCodeOffset[] offsets = CallbackManagerImpl.RequestCodeOffset.values();
for(CallbackManagerImpl.RequestCodeOffset offset :offsets){
            Log.d(TAG,offset.name() + ":" + offset.toRequestCode());
}
Login:64206
Share:64207
Message:64208
Like:64209
GameRequest:64210
AppGroupCreate:64211
AppGroupJoin:64212
AppInvite:64213