状態: ネイティブ Facebook apk がインストールされているがログアウトされている Android デバイス。
この条件が満たされ、ユーザーが Facebook のLoginButtonを使用して、または手動でログインしようとするたびに(以下を参照)、ログイン後、Facebook SDK は、ユーザーが既に許可を与えている場合でも、常にユーザー データへのアクセス許可を求めます。 .
アプリケーションに実装しているコードは次のとおりです。
バージョン 1 - ログイン ボタン:
XML:
<com.facebook.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
ジャワ:
private static final List<String> PERMISSIONS = Arrays.asList("email", "user_groups");
private UiLifecycleHelper uiHelper;
@Override
protected void onCreate(Bundle savedInstanceState){
uiHelper = new UiLifecycleHelper(this, callback);
uiHelper.onCreate(savedInstanceState);
loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions(PERMISSIONS);
}
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
//modify interface or something
}
};
バージョン 2 - 手動
XML:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:onClick="buttonOnClick"
android:text="Login" />
ジャワ:
private static final List<String> PERMISSIONS = Arrays.asList("email", "user_groups");
public void buttonOnClick(View v) {
System.out.println("botaoOnClick");
Session session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()) {
System.out.println("session: " + session);
session.openForRead(new Session.OpenRequest(this).setPermissions(PERMISSIONS).setCallback(callback));
}
else {
Session.openActiveSession(this, true, callback);
}
}
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
//modify interface or something
}
};
SDK に付属のサンプル アプリでさえこのように動作しますが、他のアプリ (Foursquare など) が自然な動作だと思う方法で動作しているのを既に見ています (ユーザーがまだアクセス許可を与えていない場合にのみアクセス許可を要求します)。
それで、誰もが望ましい結果を達成する方法を知っていますか? できれば Facebook SDK 自体を編集しないでください。
前もって感謝します!
編集 1 : 追加情報: コールバック メソッドでセッション変数をチェックすると、上記の条件が満たされると、アクセス許可は常に空になります。ユーザーが許可を与えることを拒否し (初めてではない)、再度ログインしようとすると、予想どおり、ユーザーが過去にすでに与えた許可がセッションに適用されます。
編集 2 (2013 年 6 月 28 日) : この問題を再現したビデオをアップロードすることにしました。