1

私は次のようにFB.ui()を使用しています:

<script>
      window.fbAsyncInit = function() {
        FB.init({
          appId      : '##########', // App ID
          channelUrl : '//www.xxxxxxxxxx.com/channel.php', // Channel File
          status     : true, // check login status
          cookie     : true, // enable cookies to allow the server to access the session
          xfbml      : true  // parse XFBML
        });
    
        // Additional initialization code here
      };
    
      // Load the SDK Asynchronously
      (function(d){
         var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
         if (d.getElementById(id)) {return;}
         js = d.createElement('script'); js.id = id; js.async = true;
         js.src = "//connect.facebook.net/en_US/all.js";
         ref.parentNode.insertBefore(js, ref);
       }(document));
    </script>

次に、メッセージを送信するためのリンクは次のとおりです。

<a href='#' onClick="
        FB.ui({
          method: 'send',
          name: 'Bla bla bla',
          link: 'http://www.xxxxxxxxxxx.com',
          to: ###########,
          //redirect_uri: 'http://www.xxxxxxxxxxx.com/fb/'
          });
        ">Send a message</a>

問題: これは、私と私がテストしたすべてのコンピューター/ブラウザーにとって魅力のように機能します。しかし、私のクライアントは次のエラーメッセージを頻繁に受け取ります。

API Error Code: 191
API Error Description: The specified URL is not owned by the application
Error Message: redirect_uri is not owned by the application

ここに画像の説明を入力してください

これは私を完全に困惑させました!私のコードに何か問題がありますか?もしそうなら、クライアントが複数のコンピューター/ブラウザーで一貫して実行できるのに、なぜこのバグを再現できないのですか?

PS:自分で試してみたい場合は、ページがここにあります。アプリを承認する必要がありますが、不気味なことは何も起こらないと約束します。

編集:エラーは、redirect_uri私のコードでコメントアウトされていることに気付くでしょう。その理由は、そのパラメーターを含めると、「閉じる」を押してもダイアログが閉じないためです。

EDIT2:友人のコンピューターでこのバグを再現することができ、CBroeもそれを確認しました。それで、(なぜ私がまだそれを自分で作ることができないのかという謎は別として)、私が最も困惑しているのは、なぜこれが半分の時間しか起こらないのかということです。私のコードが正しくない場合、それは決して機能しないはずですよね??

エラーメッセージのURLは次のとおりです。

https://www.facebook.com/dialog/send?display=popup&link=http%3A%2F%2Fwww.streetofwalls.com&locale=en_US&name=Career%20Networking%20powered%20by%20Street%20of%20Walls&next=http%3A%2F%2Fstatic.ak.facebook.com%2Fconnect%2Fxd_arbiter.php%3Fversion%3D8%23cb%3Df2c657ef78%26origin%3Dhttp%253A%252F%252Fwww.streetofwalls.com%252Ff3575a615c%26domain%3Dwww.streetofwalls.com%26relation%3Dopener%26frame%3Df1ca46b43c%26result%3D%2522xxRESULTTOKENxx%2522&sdk=joey&show_error=true&to=573501273 

url_decode()バージョン後:

https://www.facebook.com/dialog/send?display=popup&link=http://www.streetofwalls.com&locale=en_US&name=Career Networking powered by Street of Walls&next=http://static.ak.facebook.com/connect/xd_arbiter.php?version=8#cb=f2c657ef78&origin=http%3A%2F%2Fwww.streetofwalls.com%2Ff3575a615c&domain=www.streetofwalls.com&relation=opener&frame=f1ca46b43c&result=%22xxRESULTTOKENxx%22&sdk=joey&show_error=true&to=573501273

EDIT3: このパズルの一部が解決されました。エラーが発生するのは、FB.init()動作しなかった結果です。をラップしFB.ui()FB.getLoginStatus(function(response){ \\... }ので、コンソールでより便利なエラーを確認できます。未解決の質問は...なぜFB.init()がそれほど頻繁に失敗するのですか?

4

3 に答える 3

0

まず、ページの先頭に次のスクリプトをロードします。

<script type="text/javascript" src="http://www.streetofwalls.com/wp-content/themes/streetofwalls/js/main.js"></script>

そのスクリプト内で、FBJavaScriptSDKを非同期でロードしようとします。SDKは、ドキュメントfb-rootに記載されているように正しくロードするために要素を必要とします。しかし、あなたの要素はまだレンダリングされていないかもしれないので、ここに私が推測する問題があります。fb-root

SDKを非同期でロードするためのwindow.fbAsyncInit = ...とコードを内部jQuery(document).ready(function($) { ... });に配置すれば、問題はありません。

デバッグのために、FacebookSDKを同期的にロードすることもできます。

私が気付いたもう1つのことは、サイトのヘッド内にFBJavaScriptSDKをロードする2つのスクリプトタグがあることです。両方を削除する必要があります。

于 2012-07-03T19:42:58.633 に答える
0

これは、redirect_uriとFacebookアプリに指定した設定の間の構成エラーが原因です。この質問への回答を参照してください。

redirect_uriは、Facebookアプリの設定で設定したサイトURLと等しい(または相対的)必要があります。したがって、サイトのURLが設定されており、redirect_uri以下のディレクトリを指していることを確認してください。また、Facebookの設定でアプリのドメインが正しく設定されていることを確認してください。

例えば:

アプリドメイン:streetofwalls.com

サイトURL:/セキュアキャンバスURL:/セキュアページタブURL:http ://www.streetofwalls.com

于 2012-07-02T23:33:14.577 に答える
-1

したがって、ニッツァンは彼の洞察に満ちたコメントのためにこれを称賛するに値しますが、ここに解決策があります。

私が受け取ったエラーメッセージは、FB.init()読み込まれなかった、または少なくともページの残りの部分に関して適切な順序で読み込まれなかったという事実の結果でした。Facebook Developerドキュメントからコードをコピーしましたが、非同期で読み込まれます...これはお尻に大きな苦痛を与えることがわかりました...

それで、私が持っていたものの代わりに、私はそれを昔ながらの方法でロードすることに切り替えました:

FB.init({
      appId      : '##########', // App ID
      channelUrl : '//www.xxxxxxxxxx.com/channel.php', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      xfbml      : true  // parse XFBML
    });

これを他のスクリプトの並べ替えと組み合わせると、私の問題は解決したようです。

于 2012-07-04T03:50:51.260 に答える