新しい Facebook SDK 3.0 を Android アプリに実装しようとしていますが、問題が発生しました。私が抱えている問題は、ユーザーが既にログインしており、読み取り権限がある場合でも、発行 (「post_to_wall」) 権限を与えるために再度ログインするように求められることです。これは、ユーザーが FB アプリケーションをインストールしていない場合にのみ発生します。彼が FB アプリケーションをインストールしている場合、権限を付与するよう求められるだけです。
これがログインの実装方法です。
public void login(Activity activity) {
Session session = Session.getActiveSession();
if (session == null || !session.isOpened()) {
openActiveSession(activity, true, sessionStatusCallback);
}
}
private Session openActiveSession(final Activity activity, final boolean allowLoginUI, final StatusCallback callback) {
return openActiveSession(activity, allowLoginUI, new OpenRequest(activity).setCallback(callback));
}
private Session openActiveSession(final Context context, final boolean allowLoginUI, final OpenRequest openRequest) {
Session session = new Builder(context).setApplicationId(FACEBOOK_APPLICATION_ID).build();
if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI) {
Session.setActiveSession(session);
session.openForRead(openRequest);
return session;
}
return null;
}
これは、コールバックの呼び出しメソッドです。
public void call(final Session session, final SessionState state, final Exception exception) {
if (session.isOpened()) {
if (state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
// code if new permissions have been granted
} else {
// code for login
}
} else if (session.isClosed()) {
// code for user canceled login
} else if (exception != null) {
// code if there were errors during login
}
}
}
これは、ログインを呼び出すアクティビティの onActivityResult メソッドに追加したコードです。
Session.getActiveSession().onActivityResult(activity, requestCode, resultCode, data);
そして、これが私が新しい許可を求める方法です:
Session session = Session.getActiveSession();
if (session != null && session.isOpened()) {
if (DONT_HAVE_PERMISSIONS) {
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(activity,
FACEBOOK_PERMISSIONS).setRequestCode(FACEBOOK_AUTHORIZE_ACTIVITY_CODE);
session.requestNewPublishPermissions(newPermissionsRequest);
}
}
私はこの問題についてもっと調べようとしましたが、これが意図されたものであるといういくつかのヒントしか見つけられませんでしたが、具体的なものは何も見つかりませんでした.
これはデフォルトの動作ですか? もしそうなら、それを回避する方法はありますか?それとも、何か間違ったことをしたのでしょうか?
助けてくれてありがとう。