我使用Facebook Android SDK註冊 xmpp_login擴展權限,並且在我的應用程序中有一個位置,我想確保我的用戶仍具有授權。Session.getPermissions會一直列出xmpp_login,即使被撤銷時
所以我做了如下試驗:
1 - 我問 xmpp_login與Session.requestNewPublishPermissions
2 - activeSession.getPermissions成功列表 xmpp_login
3 - 然後,我從吊銷我的權限facebook配置文件隱私設置
4 - 當我詢問activeSession.getPermissions時,它仍然列出了 xmpp_login,即使在用close()清除語言環境facebook會話緩存之後。
的wierdest的是,與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);
}
}
}