ビルドがターゲットにしている実稼働/テスト環境に基づいて、Facebook アプリに異なるアプリケーション ID があります。その結果、マニフェストではなくコードで ApplicationId を設定しています。
アプリが初めて起動されると、Session.openActiveSessionFromCache は NullPointerException をスローします (「引数 'applicationId' を null にすることはできません」)。エラーをキャッチし、SessionBuilder を使用してセッションの作成に進み、ユーザーがログインして権限を承認します。
ただし、アプリケーションのその後のすべての起動では、Session.openActiveSessionFromCache は引き続き NullPointerException をスローします。その後のすべての起動で、ユーザーがサイレントにログインすることを期待しています。ApplicationId がメタデータではなくコードで設定されている場合、キャッシュされたセッションにアクセスできないのはなぜですか?
//in MyActivity.onStart()
Session session = null;
if (BuildConfig.DEBUG == true) {
MY_FACEBOOK_APP_ID = "my debug applicationId";
} else {
MY_FACEBOOK_APP_ID = "my release applicationId";
}
try {
session = Session.openActiveSessionFromCache(getApplicationContext());
} catch (NullPointerException e) {
Log.e(TAG, e.getMessage());
}
if (session == null) {
session = new Session.Builder(getApplicationContext())
.setApplicationId(MY_FACEBOOK_APP_ID)
.build();
}