リダイレクト URI、署名付きリクエスト、およびモバイル Web Facebook アプリに問題があり、これを台無しにしている箇所を特定できません。
example.com で、署名付きリクエストを使用してユーザー データを取得するアプリを実行しているキャンバス アプリを使用しています。モバイル ユーザーがアプリを使用できるように、モバイル バージョンを立ち上げることにしたので、新しいディレクトリ example.com/m を作成し、モバイル バージョンを作成しました。
現時点では、通常のアプリは完全に機能していますが、ユーザーが oauth 権限を許可すると、モバイル アプリは無限ループに陥ります。さまざまな URL を試してみましたが、わかりませんでした。モバイルの場合、署名されたリクエストは空で、その理由がわかりません。
私の Facebook 設定では、これをキャンバスの URL として設定しています: example.com これをモバイル Web の URL example.com/m として設定します。
私の通常のブラウザ アプリでは、次のコードを使用して Facebook から宣誓を取得しています。
$redir = "https://apps.facebook.com/example";
if(isset($_REQUEST["signed_request"]))
{
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
}
if (empty($data["user_id"]))
{
$fb -> go("https://www.facebook.com/dialog/oauth?client_id={$app["appid"]}&redirect_uri=$redir&scope={$app["permissions"]}&response_type=token");
exit;
} else
{
$fb -> access_token = "access_token=" . $data["oauth_token"];
}
このコードは正常に動作しています。私のモバイル バージョンではこのコードがあります (さまざまな URL をあちこちで試しましたが、まだ問題を回避できません)。
$redir = "https://apps.facebook.com/example/m";
if(isset($_REQUEST["signed_request"]))
{
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
}
if (empty($data["user_id"]))
{
$fb -> go("https://www.facebook.com/dialog/oauth?client_id={$app["appid"]}&redirect_uri=$redir&scope={$app["permissions"]}&response_type=token");
exit;
} else
{
$fb -> access_token = "access_token=" . $data["oauth_token"];
}