2013-11-19 3 views
5

В документации на Facebook в «Send Dialog» говорится:Что такое стандарт Facebook для «поддерживаемых мобильных устройств»

Этот диалог может быть использован с JavaScript SDK и выполняя полный редирект с URL. Он не поддерживается на мобильных устройствах.

Отправки Dialog (если он работает) именно то, что я пытаюсь использовать (тем, что он по умолчанию для отправки конкретных людей):

Send Dialog

Как запасной вариант можно использовать «Share Button», но кнопка доли имеет немного другой поток пользователей (вы должны выбрать, чтобы отправить его конкретные человек):

Share Button

Сейчас я использую Zurb Фонда Visibility Classes для запуска кнопки, которая показана, например:

<button id='actionShare' class='button large-12 hide-for-touch'>share on facebook</button> 
<a href='https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fwww.nytimes.com%2F2011%2F06%2F15%2Farts%2Fpeople-argue-just-to-win-scholars-assert.html' class='button small-12 show-for-touch' target='_blank'>share on facebook</a> 

<script> 
    $('#actionShare').on('click', function() { 
    FB.ui({ 
     method: 'send', 
     link: window.location.href 
    }); 
    }); 
</script> 

Кто-нибудь знает критерии, что Facebook использует (так что я могу вызвать правильный запасной вариант)?

ответ

10

По-видимому, «не поддерживается на мобильных устройствах», действительно означает, что он не будет работать на мобильном устройстве.

Так что, если вам не нужно реализовывать API-интерфейс «Отправить» на мобильной стороне, вы можете нюхать User-Agent, чтобы проверить, не является ли он настольным или нет.

Возможно, вы захотите прочитать Browser detection using the user agent.

Вы могли бы попробовать что-то вроде этого:

if (navigator.userAgent.indexOf("Mobi") > -1){ 
     //do your thing here 
    } 

Я создал следующий пример, чтобы подтвердить, что это работает. Чтобы проверить, использует ли API facebook размер, чтобы «различать» против мобильных устройств, я попробовал как Chrome, так и Firefox как в полноэкранном режиме, так и поменьше, чем по ширине и высоте. Чтобы проверить мобильные устройства, я использовал функцию Bowser SIM в Red Hat JBoss Developer Studio против следующих (как в вертикальной, так и горизонтальной ориентации): Samsung Galaxy S3, Samsung Galaxy Note 10.1, IPhone 4 & 5 и Retina IPad 4.

Вывод заключается в том, что нюхание UA работало!

<!DOCTYPE html> 
<html> 
<head> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" /> 
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
    <script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script> 
    <script type="text/javascript"> 
    $(document).ready(function() { 
     $("#button-1").click(function(event) { 
      if (navigator.userAgent.indexOf("Mobi") > -1){ 
       window.location.assign("#page-2"); 
      } else { 
       window.location.replace("https://www.facebook.com/dialog/send?" + 
             "app_id=123050457758183" + 
             "&link=http://www.nytimes.com/2011/06/15/arts/people-argue-just-to-win-scholars-assert.html" + 
             "&redirect_uri=https://www.bancsabadell.com/cs/Satellite/SabAtl/" 
       ); 
      } 
     }); 
    }) 
    </script> 
</head> 
<body> 
<div id="fb-root"></div> 
<script> 
window.fbAsyncInit = function() { 
    // init the FB JS SDK 
    FB.init({ 
     appId  : '123050457758183',     // App ID from the app dashboard 
     status  : true,         // Check Facebook Login status 
     xfbml  : true         // Look for social plugins on the page 
    }); 

    // Additional initialization code such as adding Event Listeners goes here 
    }; 

    // Load the SDK asynchronously 
    (function(d, s, id){ 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk'));</script> 

<div data-role="page" id="page-1" data-theme="b"> 
    <div data-role="header" data-theme="b"> 
     <h1>Try to Send.</h1> 
    </div> 
    <div data-role="content"> 
     <a href="#" id="button-1" data-role="button" data-theme="b">Send</a> 
    </div> 
</div> 

<div data-role="page" id="page-2" data-theme="b"> 
    <div data-role="header" data-theme="b"> 
     <h1>Share</h1> 
    </div> 
    <div data-role="content"> 
     <div class="fb-share-button" data-href="http://developers.facebook.com/docs/plugins/" data-type="button_count"></div> 
    </div> 
</div> 

</body> 
</html> 

Следующая моя попытка использовать «Отправить» API в мобильной среде.

SDK для Facebook не является открытым исходным кодом, однако код FacebookJS. Первоначально после рассмотрения FacebookJS source и документов я думал, что фраза «Не поддерживается на мобильных устройствах» не означает, что она заблокирована на мобильных устройствах. Это означает, что они не создали хорошую симпатичную мобильную версию, как для «share».

Это привело меня к мысли, что потенциально вы можете использовать опцию URL Redirect в формате HTML5/jQuery Mobile, которая отправляет «отправить». По крайней мере, это то, что я попробую.;)

ОДНАКО

После попытки осуществить вышеупомянутую идею, я обнаружил, что это не возможно, чтобы отобразить «отправить» диалог на любом мобильном завещанию, поскольку facebook API считывает User-Agent и перенаправляет вас от Сайт «www.facebook» на «m.facebook».

Существует несколько билетов на facebook об этом самом деле.

Send dialog is not working on mobile device

Send Dialog Doesn't Work on Mobile Web

Send dialog broken for mobile devices

Вы можете проверить это, используя URL Перенаправление пример URL из Send API и ввести его в браузере телефонов.

https://www.facebook.com/dialog/send?app_id=123050457758183&link=http://www.nytimes.com/2011/06/15/arts/people-argue-just-to-win-scholars-assert.html&redirect_uri=https://www.bancsabadell.com/cs/Satellite/SabAtl/

Возможно, хотя я не рекомендую, чтобы изменить User-Agent на стороне сервера и перенаправить URL после этого. Обратите внимание, что вы должны делать это со стороны сервера, так как вам не удается изменить это из браузера по соображениям безопасности. Как я уже сказал, это взломать, что вы должны только попробовать в качестве последнего средства. Есть несколько сообщений, связанных с этим:

Want to load desktop version in my webview using uastring

Force webview to display desktop sites

Setting WebView to view Desktop Site and Not Mobile Site

+0

Как бы вы реализуете "URL Перенаправление опцию в виде HTML5/JQuery Mobile, которая представляет "отправить"" ? –

+0

Я перечитал ваш вопрос и обновил ответ, чтобы включить обнаружение. –

+0

Я обновил ответ, чтобы включить пример. Извините за раннее замешательство, я надеюсь, что это поможет. –

Смежные вопросы