web-dev-qa-db-ja.com

サーバーからのAPI呼び出しにはappsecret_proof引数が必要です

Android Facebook SDKでAPIリクエストを行うことも、ログインコールバックからユーザーを取得することもできません。常にnullを返します。

特に、newMeRequestを使用すると、次のエラーメッセージが表示されます。

{ "error": {
 "message": "API calls from the server require an appsecret_proof argument", 
 "type": "GraphMethodException", 
 "code": 100   } }

実際、フラグはFacebookアプリのオプションでtrueに設定されているため、かなり明白なようです。ただし、モバイルSDKでは、シークレットなしでAPIリクエストを実行することは可能です。ただし、Facebook Graph APIデバッガーでcurrentSessionからのアクセストークンを使用しようとすると、応答は上記と同じになります。

これが新しいAndroid Facebook SDKに関連しているかどうかはわかりませんが、私のコードは基本的に例と同じです。ログインはうまくいき、セッショントークンを取得しましたが、 APIリクエストを行わない...

loginButton.setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() {
    @Override
    public void onUserInfoFetched(GraphUser user) {
        graphUser = user;
    }
});


Request.newMeRequest(currentSession, new Request.GraphUserCallback() {
    @Override
    public void onCompleted(GraphUser user, Response response) {
    }
    }
}).executeAsync();
14
dwbrito

私がそれを機能させることができた唯一の方法は、Noに設定することでしたApp Secret proof for API calls Facebookアプリの詳細設定で。

ただし、これは解決策ではなく解決策です。Yesに設定されたオプションでリクエストを実行できなかったためです(iOS facebook sdkで可能です)。

32
dwbrito

accessTokenとappSecretの「sha256」ハッシュを含むパラメータ「appsecret_proof」をリクエストに追加する必要があります

https://developers.facebook.com/docs/graph-api/securing-requests

11
lnx

Facebookアプリの詳細設定でRequire App Secretを無効にする必要があります。

4
Donal

あなたの質問に対する実際の回答ではありませんが(Android SDKが含まれていないため))、2018年3月現在、 appsecret_proofとWebページ(Javascript)/およびモバイル(それについては不明)からの呼び出しに関する問題がまだいくつかあります。

Facebookバグレポート(2018年2月)-問題が再発

Facebookバグレポート(2016年10月)

Facebookバグレポート(2015年2月)

つまり、Require App SecretApp Dashboard > Settings > Advanced > Security > Require App Secretで有効になっているアプリケーションの場合、appsecret_proofを渡さないとJavascriptからAPI呼び出しを実行できないようです-執筆の瞬間(2018年3月)。

クイック「修正」-フラグを無効にします。要件に応じて、2つのFacebookアプリケーションを選択することもできます。1つはWebページ/モバイルコール用(フラグは無効)、もう1つはサーバー側コール用(フラグは有効)です。

1
turdus-merula