4

あちこち探しましたが、具体的な情報は見つかりませんでした。

最新の SDK 3.0 ドキュメント http://developers.facebook.com/docs/reference/android/3.0/AccessToken#getPermissionsによると:

AccessToken.getPermissions() によって返されるアクセス許可のリストは、「AccessToken オブジェクトが作成されてからアクセス許可が追加または削除された場合、古くなっている可能性があります」

私の質問は次のとおりです:権限のリストの更新
を要求する方法はありますか?

4

3 に答える 3

3

Facebook SDK バージョン 3.14 以降、Facebook は refreshPermissions メソッドを Session クラスに追加しました。

詳細については、github のソース コードを確認して ください。

于 2014-07-27T11:56:35.170 に答える
0

私のニーズに合ったソリューションを見つけました:

トークンを更新する代わりに、FQL クエリを作成して、知りたいアクセス許可のリモート (最新) ステータスを取得するだけです

次のコードは、公開権限 (正式には "publish_actions" と呼ばれます) に関するクエリを実行します。

public void asyncQueryIfHasPublishPermissions() {
    String fqlQuery = "SELECT publish_actions FROM permissions WHERE uid = me()";
        Bundle params = new Bundle();
        params.putString("q", fqlQuery);
        Session session = Session.getActiveSession();
        Request request = new Request(session,
            "/fql",                         
            params,                         
            HttpMethod.GET,                 
            new Request.Callback(){         
                public void onCompleted(Response response) {
                    JSONObject graphResponse = response.getGraphObject().getInnerJSONObject();
                    boolean publishPermissions = false;
                    try {
                        if (graphResponse.getJSONArray("data").getJSONObject(0).getInt("publish_actions")==1) {
                            publishPermissions = true;
                        }
                    } catch (JSONException e) {
                        Log.e("FacebookIntegration", "JSON error "+ e.getMessage());
                    }
                    FacebookRequestError error = response.getError();
                    if (error != null) {
                        Log.e("FacebookIntegration", "FacebookRequestError "+ error.getErrorMessage());
                    }
                    Log.i("FacebookIntegration", "asyncQueryIfHasPublishPermissions response: "+publishPermissions);
                }                  
        }); 
        Request.executeBatchAsync(request);
}
于 2013-04-11T04:16:14.260 に答える
0

Daniele B によって与えられた解決策はちょっと怖いように見えるので、自分で書くことにしました。

オブジェクトに保存されているアクセス許可をアップグレードしないため、実際の解決策ではありませんが、Sessionどのアクセス許可が与えられているかを確認できます。

    Request.executeGraphPathRequestAsync(facebookSession, "me/permissions", new Request.Callback() {

    @Override
    public void onCompleted(Response response) {
        GraphObject graphObject; 

        List<String> permissionsToGet = new ArrayList<String>();
        try {
        if (response != null && (graphObject = response.getGraphObject()) != null){
            JSONObject permissions = (JSONObject) ((JSONArray) graphObject.getProperty("data")).get(0);
            for (String permission : facebookPermissions){
                if (!permissions.has(permission) || permissions.getInt(permission) != 1){
                    permissionsToGet.add(permission);
                }
            }

            if (!permissionsToGet.isEmpty()){
                //get new permissions
            } else {
                //all needed permissions are available
            }
        }
        } catch (Exception ex){
            //handle error
        }

    }
});
于 2013-05-23T14:16:33.090 に答える