ちょっと嵌ったのでメモ。
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