Почему API-интерфейс Facebook Actionscript init () не работает? - PullRequest
4 голосов
/ 10 декабря 2010

я звоню com.facebook.graph.Facebook.init (APP_ID, loginHandler);

для входа в Facebook с помощью API ActionScript (как описано в этом руководстве: http://www.adobe.com/devnet/facebook/articles/flex_fbgraph_pt4.html). Но, похоже, ничего не происходит.

Глядя на источник API, единственный вызов, который делается в JS, ExternalInterface.call ('FBAS.init', JSON.encode (параметры));

Требуются две библиотеки javascript:

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

Однако я не могу найти ссылки на FBAS в этих библиотеках. Я даже использую правильные библиотеки? Есть ли еще одна причина, по которой я не нашел FBAS? или даже почему вызов Facebook.init () ничего не делает?

Ответы [ 6 ]

4 голосов
/ 14 января 2011

FBJSBridge.js был встроен в SDK.Посмотрите на com.facebook.graph.core.FacebookJSBridge.as, и вы увидите, что весь блок JavaScript, который был FBJSBridge.js, прикреплен к ExternalInterface в конструкторе com.facebook.graph.Facebook.as.

Я боролся с этим весь день.Я наблюдал за http GET, порожденным Facebook.init (), и похоже, что он просто ждет, пока не истечет время ожидания, после чего появится другой GET.Это никогда не возвращается нормально.Я попробовал APPID, APIKEY там и все виды комбинаций параметров, но я никогда не видел, чтобы он вернулся.Я должен сделать вывод, что так оно и должно работать.Если нет, то вот как это работает.: - /

В любом случае, вы увидите внутри FBAS в этом блоке JS в FacebookJSBridge.as, что init подписывается на событие «auth.sessionChange», которое вызывает Facebook.handleSessionChange ().Вы можете видеть, что здесь называется ваш обратный вызов.Хитрость в том, что это то, что вызывается каждый раз, когда sessionChanges.Поэтому, даже если в следующий раз это событие не произойдет из-за ответа от FB.init (), ваш обратный вызов все равно будет вызываться в этот момент.

Если вы установите свой собственный обработчик для "auth.sessionChange"«перед вызовом Facebook.init () и установкой« cookie »в значение true, после создания cookie вы получите событие sessionChange, которое запускается сразу после вызова init.Обратный вызов Init по-прежнему не вызывается, потому что GET никогда не получает ОТВЕТА.

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/

2 голосов
/ 17 февраля 2011

Кажется, есть несколько причин, почему это не удается.Смотрите эти ссылки:

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

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

Мне показалось, что порядок тегов сценариев неверен в файле оболочки, который предоставляет учебник Adobe.

Убедитесь, что JS-библиотека Facebook добавлена ​​ДО 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>
0 голосов
/ 30 января 2012

В моем случае это был index.template.html, который не работал.Мне нужно: 1) ссылка на FB JS SDK
2) использовать fb-root div в качестве первой записи внутри тега body

, которая решила мою проблему.

Редактировать: я былсбит с толку, что Facebook.init () работает только когда пользователь вошел в систему. Для аутентификации я звоню Facebook.login

Edit2: вновь посетил эту вещь ... На этот раз я упустил, что URL-адрес холста должен указывать навашей страницы, если нет, конечно, звонок переходит на другую страницу, и вы никогда не получите ответ.Очевидно, но меня снова поразило ......

0 голосов
/ 07 апреля 2011
0 голосов
/ 01 марта 2011

Заменить

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. embedSwf

работал как шарм!

0 голосов
/ 25 февраля 2011

Кажется, что FBAS.getSwf() использует имя swf в своем вызове document.getElementById.

Итак, если вы укажете идентификатор, а не имя, то JavaScript-файл FacebookJSBridge.as будет искать элемент с идентификатором NULL.

Или, если вы указываете имя, но не идентификатор, тогда javascript от FacebookJSBridge.as ищет соответствующую строку, но элемент без такого идентификатора существует.

Если вы укажете имя И идентичный идентификатор, тогда он действительно сможет найти 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 });
...