2011-12-17 13 views

risposta

3

1) Una soluzione parziale consiste nel verificare se l'utente ha un album denominato "foto di copertina". Sebbene non tutti, ma MOLTI utenti che avrebbero attivato la timeline, avrebbero questo album !!

2) Un modo sicuro è quello di recuperare i contenuti html del profilo di un utente e controllare se ha una sequenza temporale !!

4

Attualmente non esiste un modo API per verificare se l'utente ha abilitato la timeline.

È possibile provare a utilizzare "Add To Timeline (beta)" social plugin (passando publish_actions come perms) in combinazione con Facebook JS-SDK Events.

Iscriviti a auth.login, auth.authResponseChange e/o auth.statusChange eventi e verificare status proprietà di response passato al listener di eventi, una volta evento licenziato e utente è connected si può publish action e se riuscirà utente marchio come uno che hanno temporale installato.

Questo però ha alcuni aspetti negativi:

  • meglio essere sicuri di non chiedere agli utenti di publish_actions nei flussi diversi "Aggiungere alla linea temporale" social plugin per essere sicuri che sono hanno sia timeline e il permesso concesso.
  • Si dovrebbe pubblicare un'azione per assicurarsi che abbiano concesso le autorizzazioni per farlo, dal momento che tali eventi possono essere altre azioni dell'utente (come cambio password o cambio utente di Facebook, ecc ...).
1

Alla fine (probabilmente in un prossimo futuro) il profilo di tutti saranno rotolò alla linea temporale, quindi sembrerebbe facebook non ha fornito un modo affidabile per rilevare un'applicazione temporale abilitato.

1

La seguente soluzione potenziale non richiede richieste di autorizzazione aggiuntive. Se aggiungi il codice del plug-in della timeline di Facebook all'interno di un DIV nascosto, puoi attendere fino a quando l'FB Canvas non viene caricato (o xfbml nelle pagine web) e verificare l'altezza CSS di quell'elemento. Se l'utente non ha la linea temporale sarà 0px. Altrimenti, sarà 250 px (come l'ho incluso). Questo funziona solo all'interno di Facebook Apps (non in Facebook integrare pagine web):

Facebook nasconde questo elemento di plug-in, se l'utente non ha attivato linea temporale impostando l'altezza elemento di stile a 0.

Aggiungi questo al vostro pagina App:

<div id="timeline-hidden" style="display:none"> 
    <div class="fb-add-to-timeline" data-show-faces="true"></div> 
</div> 
<div id="timeline-test"></div> 

Poi, nel vostro javascript (questo uso jQuery, FYI):

window.fbAsyncInit = function() { 
FB.init({ ... }); // after your FB.init code 

    FB.Canvas.setDoneLoading(
    function (result) { 

    var str_timeline; 
    var tlsrc = $("#timeline-hidden").find("iframe").first().css("height"); 

    if("0px"==tlsrc) 
     str_timeline = '<h2 style="color:red">This user DOES NOT have timeline.<h2>'; 
    else 
     str_timeline = "<h2>This user DOES have timeline.</h2>"; 

    $("#timeline-test").html(str_timeline + ", timeline plugin css height:" + tlsrc + ", loadtime: " + result.time_delta_ms); 
    } 
); 

}; 

Il seguente per Web Integration è un po 'meno affidabile a causa della potenziale latenza di rete, ma il concetto potrebbe essere modificato per qualche soluzione praticabile:

Dal FB.Canvas.setDoneLoading non viene chiamato su un sito web che include l'integrazione FB, modificare la funzione FB.Canvas.setDoneLoading sopra per iscriversi a xfbml.rendere l'azione e mettere un timeout sul test:

window.fbAsyncInit = function() { FB.init ({...}); // dopo il codice FB.init

$(document).ready(function() { 
    FB.Event.subscribe('xfbml.render', 
    function() { 
    setTimeout(function(){ 
     var str_timeline; 
     var tlsrc = $("#timeline-hidden").find("iframe").first().css("height"); 

     if("0px"==tlsrc) 
      str_timeline = '<strong><span style="color:red">This user DOES NOT have timeline.</span></strong>'; 
     else 
      str_timeline = "<strong>This user DOES have timeline.</strong>"; 


     $("#timeline-test").html(str_timeline + ", timeline plugin css height:" + tlsrc); 
    }, 250); 
    } 
); 

}); 

};

ho trovato nel mio test che spostando il FB.Event.subscribe ('xfbml.render', in un .ready $ (document) (function() {...}); aiuta con latenza quando la tua app è incorporata in una pagina di Facebook (richiede un po 'più tempo per essere caricata). Ha appena iniziato a testarlo, quindi potrebbe non essere in grado di contenere ulteriori test.

Problemi correlati