4

私は com.facebook.graph.Facebook.init(APP_ID, loginHandler); を呼び出しています。

actionscript API を使用して Facebook にログインします (このチュートリアルで説明されているように: http://www.adobe.com/devnet/facebook/articles/flex_fbgraph_pt4.html )。しかし、それは何もしないようです。

API ソースを見ると、JS に対して行われる唯一の呼び出しは、ExternalInterface.call('FBAS.init', JSON.encode(options)); です。

必要な 2 つの JavaScript ライブラリは次のとおりです。

http://connect.facebook.net/en_US/all.js
FBJSBridge.js

ただし、これらのライブラリには FBAS への参照が見つかりません。正しいライブラリを使用していますか? FBAS が存在しない理由について、私が見逃した別の理由はありますか? あるいは、なぜ Facebook.init() を呼び出しても何も起こらないのでしょうか?

4

6 に答える 6

4

FBJSBridge.js は SDK に組み込まれています。com.facebook.graph.core.FacebookJSBridge.as を見ると、FBJSBridge.js であった JavaScript のブロック全体が com.facebook.graph.Facebook.as のコンストラクターの ExternalInterface に追加されていることがわかります。

私は一日中これに苦労しています。私は Facebook.init() によって生成された http GET を見てきましたが、タイムアウトになるまで待機しているように見え、その時点で別の GET が生成されます。正常に戻ることはありません。そこにあるAPPID、APIKEY、およびあらゆる種類のパラメーターの組み合わせを試しましたが、戻ってくるのを見たことはありません。私は、それがどのように機能するかを結論付けなければなりません。そうでない場合は、それが機能する方法です。:-/

とにかく、Facebook.handleSessionChange() をトリガーする「auth.sessionChange」イベントを init がサブスクライブする FacebookJSBridge.as のその JS ブロックの FBAS 内に表示されます。コールバックが呼び出される場所であることがわかります。秘訣は、セッションが変更されるたびに呼び出されることです。そのため、次にイベントが発生するのが FB.init() からの応答によるものでなくても、その時点でコールバックが呼び出されます。

Facebook.init() を呼び出す前に「auth.sessionChange」の独自のハンドラーを設定し、「cookie」を true に設定すると、Cookie が作成された後、init を呼び出した直後に sessionChange イベントが発生します。ただし、GET が RESPONSE を取得しないため、Init のコールバックはまだ呼び出されません。

Facebook.addJSEventListener("auth.sessionChange", onSessionChange);
Facebook.init(_appID, onInitFacebookConnect, 
      {cookie: true, 
       appId: _appID, 
       perms: "user_birthday,read_stream,publish_stream"});

そのチュートリアルにある例は機能するかもしれませんが、実際にアプリを組み立てる際に使用するものではありません。そうしないと、常にボタンをクリックして fbconnect をトリガーすることになります。oauth2 は、「接続」するたびにボタンをクリックする必要がないという望ましい動作を実現する方法のようです。oauth2 からセッションキーを取得し、実行しようとしていることに最も便利な方に応じて、Flash/Facebook GRAPHSDK または JS を使用できます。

これが役立つかもしれません: http://blog.yoz.sk/2010/05/facebook-graph-api-and-oauth-2-and-flash/

于 2011-01-14T04:29:05.663 に答える
2

これが失敗する理由は複数あるようです。次のリンクを参照してください。

http://code.google.com/p/facebook-actionscript-api/issues/detail?id=165

http://www.pastrytech.com/willy/FacebookActionScript3SDKExample.html

私にとっては、Adobe チュートリアルが提供するラッパー ファイルのスクリプト タグの順序が間違っていることが原因でした。

Facebook JS ライブラリが swfobject の前に追加されていることを確認します。つまり、スクリプト タグが次の順序になっていることを確認します。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script>
于 2011-02-16T23:10:53.583 に答える
0

これがあなたの質問に対する答えです。 http://novacoders.blogspot.com/2011/04/facebook-graph-api-init-problems.html

于 2011-04-07T14:23:48.667 に答える
0

交換

embedSWF("MyApp.swf", "flashContent", "640", "480", "9.0", null, null, null, {name:"flashContent"});    

swfobject.embedSWF("MyApp.swf", "flashContent", "640", "480", "9.0", null, null, null, {name:"flashContent"});  

つまり、swfobject です。埋め込みSwf

魔法のように働きました!

于 2011-03-01T07:31:12.977 に答える
0

への呼び出しでswfの名前FBAS.getSwf()を使用しているようです。document.getElementById

そのため、ID を指定して名前を指定しない場合、FacebookJSBridge.as の JavaScript は ID が null の要素を探します。

または、ID ではなく名前を指定した場合、FacebookJSBridge.as の JavaScript は適切な文字列を探しますが、そのような ID を持たない要素が存在します。

名前と同一の ID を指定すると、実際に swf を見つけることができます。


var appId = "1234567890";

var swfNameAndId = "app_" + appId;

swfobject.embedSWF("/swfs/TestApp.swf", "app_placeholder", 760, 450, "9.0.0", false, { "appId": appId }, { "allowscriptaccess": "always" }, { "name": swfNameAndId, "id": swfNameAndId });
于 2011-02-25T19:27:23.880 に答える
0

私の場合、機能しなかったのは index.template.html でした。必要なもの: 1) FB JS SDK への参照
2) body タグ内の最初のエントリとして fb-root div を使用

それは私の問題を解決しました。

編集: Facebook.init() はユーザーがログインしている場合にのみ機能することに混乱しました。認証のために Facebook.login を呼び出します

Edit2:このことを再訪しました...今回は、キャンバスのURLがあなたのページを指す必要があることを見逃しました.もちろん、呼び出しが別のページに行き、応答を受け取らなければ. 当たり前ですが、また当たって……

于 2012-01-30T18:06:05.743 に答える