1

トリッキーな質問かもしれませんが、とにかく:

Facebookアプリケーションを外部サーバーで実行しています。私のキャンバスのURLは

http://mydomain.com/myapp/

これはページに統合されており、次のようなURLでアプリにアクセスできます

http://facebook.com/mypage/app_123456789

ここで、123456789は私のアプリケーションIDです。

ユーザーは自分の壁で特定のものを共有でき、その共有には私のアプリへのURLが含まれています。

つまり、コンテンツを共有しているとしましょう。次のようなURLがあります。

http://mydomain.com/myapp/content/1

これは、ユーザーがウォールポストをクリックした場合に移動する場所です。

今、私の問題は明らかに、このURLをFacebookページにリダイレクトして戻したいということです。

すべてをにリダイレクトするのは簡単です

http://facebook.com/mypage/app_123456789

ただし、ユーザーが共有した特定のコンテンツではなく、アプリケーションのメインページに移動します。

これを行う方法はありますか?たとえば、Facebookにパラメータを渡して、ロードするページを指定できますか?

4

1 に答える 1

1

はい、できます!Facebook は、アプリケーションのキャンバス ページにリダイレクトされるときに指定した古いパラメーターを渡しませんが、特定の方法でパラメーターを操作すると、それらにアクセスできるようになります。

すべてのパラメーターを次の形式で渡す必要があります-

https://apps.facebook.com/yourapp?app_data=key1$value1,key2$value2,...

キャンバスの URL に到達したら、app_data内からデータを取得できますsigned_request。パラメータの内容を取得したら、次のようになります-

key1$value1,key2$value2

今は、その文字列をキーと値の配列に解析するだけの問題です。この特定の例では、キーと値を分離するためにドル文字を選択しましたが、以下のコードからわかるように、パラメーターとキー/値のペアを分離するために必要なものは何でも使用できます -

// initialize parameter array
$getParams = array();
$signedRequest = $facebook->getSignedRequest();
// separate each parameter
$app_data = explode(",",$signedRequest['app_data']);
foreach ($app_data as $param_key => $param_value) {
  // separate each key/value pair
  list($key,$value) = explode("$",$param_value);
  $getParams[$key] = $value;
}

この段階で、$getParams配列は次のようになります

Array(
  'key1'=>'value1',
  'key2'=>'value2'
)

アプリケーションにパラメーターを渡すことができるようになったので、参照 URL から渡されたデータに従って、表示するコンテンツを決定できるようになります。

于 2012-10-05T00:04:59.847 に答える