Facebook Android SDK を 2.0 から 3.0 にアップグレードしようとしましたが、問題が発生しました。私の場合は次のとおりです。
私はウェブビューを持っており、ユーザーが「Facebook ログイン」をクリックすると次のコードを実行します。
SharedPreferences mPrefs = act.getPreferences(Context.MODE_PRIVATE);
String access_token = mPrefs.getString("access_token", null);
session = Session.getActiveSession();
if (session == null){
session = new Session(act.getApplicationContext());
if(access_token != null){
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", null);
editor.commit();
AccessToken accessToken = AccessToken.createFromExistingAccessToken(access_token,null, null, null, null);
session.open(accessToken, callback);
Session.setActiveSession(session);
}
}
Session.OpenRequest request = new Session.OpenRequest(act);
String[] permissions = {"email, user_likes, user_checkins, publish_checkins, publish_stream"};
request.setPermissions(Arrays.asList(permissions));
request.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
request.setCallback(callback);
session.openForPublish(request);
同じクラス(アクティビティを拡張する)で、次のコードを取得しました:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
ユーザーがボタンをクリックすると、すべて正常に動作します。Facebook ダイアログが開き、権限が必要になり、ダイアログが閉じます。問題は、インスタンス化されたものを返す代わりに、Session.getActiveSession() が null を返すことです。詳細には、これが返されます:
{who=null, request=64206, result=-1, data=Intent { (has extras) }}