Pergunta

Estou chamando com.facebook.graph.facebook.init (app_id, loginHandler);

Para fazer login no Facebook usando a API ActionScript (conforme explicado neste tutorial: http://www.adobe.com/devnet/facebook/articles/flex_fbgraph_pt4.html). Mas, parece não fazer nada.

Olhando para a fonte da API, a única chamada feita para JS é externa -inteface.call ('fbas.init', json.encode (options));

As duas bibliotecas JavaScript necessárias são:

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

No entanto, não consigo encontrar nenhuma referência às FBAs nessas bibliotecas. Estou usando as bibliotecas corretas? Existe outra razão pela qual eu perdi sobre o motivo pelo qual as FBAs não existem? Ou mesmo por que chamar o Facebook.init () não faz nada?

Foi útil?

Solução

Fbjsbridge.js foi incorporado no SDK. Olhe para com.facebook.graph.core.facebookjsbridge.as, e você verá que todo o bloco de JavaScript que foi fbjsbridge.js está preso no construtor externalinterface em com.facebook.graph.facebook.as.

Eu tenho lutado com isso o dia todo. Eu tenho assistido o HTTP ser gerado pelo Facebook.init (), e parece que ele espera até que o tempo de tempo, momento em que outro obtém é gerado. Nunca volta normalmente. Eu tentei o Appid, o Apikey lá e todo tipo de combinações de parâmetros, mas nunca o vi voltar. Eu tenho que concluir que é assim que é para funcionar. Caso contrário, é assim que funciona. :-//

De qualquer forma, você verá dentro do FBAS naquele bloqueio JS no Facebookjsbridge. como o init assina o evento "auth.sessionChange", que aciona o Facebook.HandlesessionChange (). Você pode ver que é onde seu retorno de chamada é chamado. O truque é que é isso que é chamado a qualquer momento das sessões. Portanto, mesmo que a próxima vez que o evento seja de incêndio não seja por causa de uma resposta do FB.init (), seu retorno de chamada ainda será chamado nesse ponto.

Se você definir seu próprio manipulador para "Auth.SessionChange" antes de ligar para o Facebook.init () e definir "Cookie" como TRUE, depois que um cookie for criado, você receberá um evento de sessionChange logo após ligar o init. O retorno de chamada de Init ainda não é chamado, porque o Get nunca recebe uma resposta.

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

Os exemplos que você encontrará nesse tutorial pode funcionar, mas não são o que você deseja usar ao realmente montar um aplicativo. Caso contrário, você sempre clicará em um botão para acionar o FBConnect. Parece que o OAuth2 será a maneira de obter o comportamento desejado de não precisar clicar em um botão cada vez para "conectar". Você pode obter o SessionKey do OAuth2 e, em seguida, usar o Flash/Facebook Graphsdk ou JS, dependendo do que for mais conveniente para o que você está tentando fazer.

Isso pode ajudar:http://blog.yoz.sk/2010/05/facebook-graph-api-and-oauth-2-and-flash/

Outras dicas

Parece haver várias razões pelas quais isso falha. Veja estes links:

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

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

Para mim, foi que a ordem das tags de script está errada no arquivo de wrapper que o tutorial da Adobe fornece.

Certifique -se de que a biblioteca JS do Facebook seja adicionada antes do Swfobject. Ou seja, certifique -se de que suas tags de script estão nesta ordem:

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

Substituir

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

com

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

ou seja Swfobject. INCEDSWF

Funcionou como um charme!

No meu caso, foi o index.template.html que não funcionou. Eu precisava: 1) uma referência ao FB JS SDK
2) Use Div da FB-Root como primeira entrada dentro da etiqueta corporal

Isso resolveu meu problema.

Edit: Fiquei confuso de que o Facebook.init () só funciona quando um usuário está conectado. Para autenticação, eu chamo de facebook.login

EDIT2: Revisitou isso ... Desta vez, perdi que o URL da tela precisa apontar de volta à sua página, se não, é claro, a chamada vai para outra página e você nunca recebe uma resposta. Óbvio, mas me atingiu de novo ......

Parece que FBAS.getSwf() está usando o nome do SWF em seu chamado para document.getElementById.

Portanto, se você especificar um ID, mas não um nome, o JavaScript do Facebookjsbridge.As procurará um elemento com o ID do NULL.

Ou, se você especificar um nome, mas não um ID, o JavaScript do Facebookjsbridge.As procurará a string apropriada, mas um elemento sem esse ID existe.

Se você especificar um nome e um ID idêntico, ele poderá encontrar o 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 });
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top