2011-12-17 29 views

答えて

3

1)部分的な解決策は、ユーザーが「cover photos」という名前のアルバムを持っているかどうかを確認することです。タイムラインを有効にしたほとんどのユーザーがこのアルバムを持っているとは限りません!!

2)本当にユーザーのプロフィールのHTMLコンテンツを取得し、タイムラインがあるかどうかを確認することです!

4

現在、ユーザーがタイムラインを有効にしているかどうかを確認するAPI方法はありません。

"Add To Timeline (beta)" social pluginpublish_actionspermsとする)をFacebook JS-SDK Eventsと組み合わせて使用​​できます。イベントが発生し、ユーザーはあなたがpublish actionことができ、タイムラインがインストールされているものとしてマークをユーザに成功した場合connectedしたら

は、auth.loginauth.authResponseChangeおよび/またはauth.statusChangeイベントに登録し、イベントリスナーに渡されたresponsestatusプロパティを確認してください。

しかし、これはいくつかの欠点を持っている:より良い彼らはタイムラインと権限付与の両方を持っていることを確認するためのソーシャルプラグイン「タイムラインに追加」以外のフローにpublish_actionsのユーザーを尋ねたりしないでください

  • パスワード変更やFacebookのユーザー切り替えなどの他のユーザーの操作が可能なため、許可する権限をユーザーに付与する必要があります。
1

最終的に(近い将来)、誰のプロフィールもタイムラインにロールオーバーされるため、タイムライン対応のアプリを検出する信頼性の高い方法はありませんでした。

1

次の潜在的なソリューションは、追加のアクセス許可の要求を必要としません。隠しDIV内にFacebookのタイムラインプラグインコードを追加すると、FB Canvasの読み込み(またはWebページのxfbml)が完了し、その要素のCSSの高さがテストされるまで待つことができます。ユーザーにタイムラインがない場合は0pxになります。それ以外の場合は、250pxになります(これを含めたように)。 Facebookのアプリ内でのみ有効です(Facebookの中でWebページを統合していない)

ユーザーが0

に要素のスタイルの高さを設定することで、タイムラインを起動していない場合は、Facebookがあなたにこれを追加このプラグイン要素を隠しますアプリページ:あなたのJavaScriptで次に

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

、(これはFYI、jQueryのを使用):

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); 
    } 
); 

}; 

Web統合のために、以下のは、やや信頼性の低い潜在的なネットワークの待ち時間にあるが、概念は、いくつかの可能な解決策に変更することができます。FB.Canvas.setDoneLoadingはFBとの統合が含まれるウェブサイト上で呼び出されていないので

、上記のFB.Canvas.setDoneLoading関数を変更してxfbmlに登録します。アクションをレンダリングし、テストにタイムアウトを設定します。

window.fbAsyncInit = function(){ FB.init({}}); // 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); 
    } 
); 

}); 

};

私は$(ドキュメント).ready(関数(){...})にFB.Event.subscribe( 'xfbml.render'、を動かすというのが私のテストで発見した。ができますあなたのアプリがFacebookページに埋め込まれているときに待ち時間があります(読み込みに少し時間がかかります)。これをテストし始めたので、それ以上テストすることはできません。

関連する問題