私は Facebook android SDK を使用してxmpp_login拡張アクセス許可を登録しています。アプリには、ユーザーがまだ許可されているアクセス許可を持っていることを確認したい場所があります。
そこで、次のテストを行いました。
1 - Session.requestNewPublishPermissionsでxmpp_login
を要求しました
2 - activeSession.getPermissions は xmpp_login を正常にリストします
3 - 次に、Facebook プロファイルのプライバシー設定から許可を取り消しました
4 - activeSession.getPermissions を要求すると、クリアした後でもxmpp_loginがリストされますclose() を使用したロケール facebook セッション キャッシュ。
最も奇妙なことは、activeSession.getAccessToken() を使用して、
https
://graph.facebook.com/me/permissions?
ACCESS_TOKEN xmpp_login を呼び出したときに表示されないことです (これは予想される動作です)。
アプリでhttps://graph.facebook.com/me/permissions?ACCESS_TOKENを呼び出すことで回避できますが、Android SDK は同じように動作するはずですよね?
-EDIT:上で説明した悲しい解決策を書いてしまいました; 同じ問題を経験した人のために、ここにあります:
String url = "https://graph.facebook.com/me/permissions?access_token=" + session.getAccessToken();
new AskFacebookIfXmppIsPermittedTask().execute(url);
そしてasyncTask...
private class AskFacebookIfXmppIsPermittedTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
try {
String urlString = urls[0];
URL url = new URL(urlString);
URLConnection urlConnection = url.openConnection();
InputStream in = urlConnection.getInputStream();
StringWriter writer = new StringWriter();
IOUtils.copy(in, writer);
return writer.toString();
} catch (IOException e) {
return "Unable to retrieve web page. URL may be invalid.";
}
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
try {
JSONObject response = new JSONObject(result);
JSONArray data = (JSONArray)response.get("data");
JSONObject permissions = (JSONObject) data.get(0);
Object xmpp = permissions.get("xmpp_login");
findViewById(R.id.importFacebookContactsFrame).setVisibility(View.GONE);
xmppIsIncludedCallback();
} catch (JSONException e) {
if(shouldPromptFacebook) {
List<String> PERMISSIONS = Arrays.asList("xmpp_login");
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(thisActivity, PERMISSIONS);
Session.getActiveSession().requestNewPublishPermissions(newPermissionsRequest);
}
}
}