私は今朝ずっとこれと戦ってきました。
私は実際にカスタムのOpenGraphアクションを機能させようとしています。私はこれに成功し、あちこちの情報をつなぎ合わせました。これで、次のフローで「欲しい」アクションを投稿するボタンができました。
> User Clicks Button
> FB.api checks response.
> if response code is 200 the user has not granted publish_stream permission
> call FB.ui({ method:
"permissions.request",
"perms": 'email,publish_stream'
}
> call back to original function and post to stream
> if user has already granted permission, then just publish
それはすべて素敵に動作します。
しかし、私が必要としているのは、ユーザーがFacebookにまったくログインしていないケースをキャッチすることです。
2500
これは、アクセストークンが存在しない応答コードのようです
だから私はこのコードスニッペを持っています、それはそのケースをキャッチします
.....
} else if (((response.error.code) * 1) == 2500) {
doLogin('publish_stream', postWant, itemId);
// post want being the original function and itemId being the item we are "wanting"
}
私のdoLogin関数は次のようになります。
function doLogin(permRequired, callingFunction, urlAppend) {
FB.ui({
method: 'oauth',
scope: 'email,' + permRequired
},
function (response) {
// DO THINGS NOW WE'RE LOGGED IN
});
};
これは基本的に、拡張権限を取得するための私の関数とまったく同じで、次のようになります。
function getPermission(permRequired, callingFunction, urlAppend) {
FB.ui({ method:
"permissions.request",
"perms": 'email,' + permRequired
},
function (response) {
// DO THINGS NOW WE HAVE PERMISSION
});
};
この後者の例は機能しますが、ログインの例では、「申し訳ありませんが、問題が発生しました。しばらくしてからもう一度お試しください」というポップアップが読み込まれます。
明らかに、FB.initはすでに呼び出されており、APPは正しく設定されており、APP_IDはFB.initで宣言されているなど、他のものが機能していることは明らかです。
FBログインボタンからのFBログインは機能しますが、「摩擦のない」動作を機能させるには、このフローを実行するためにこれが必要です(つまり、別のボタンをクリックすることはできません)。