2012-08-29 3 views
4

Fondamentalement, je veux afficher une liste d'amis (avec des images et des noms) et les inviter à mon application, je crée en rails avec le gem fb_graph. Le lien montre le déroulement de cette opération, vous cliqueriez sur un bouton "Inviter des amis" et une liste d'amis apparaîtrait avec un bouton vous permettant d'inviter l'utilisateur respectif.Comment inviter des amis de facebook en utilisant fb_graph?

http://www.quora.com/User-Acquisition/What-is-the-best-invite-a-friend-flow-for-mobile

Est-il possible de le faire avec fb_graph?

+0

Quelque chose comme ça? https://developers.facebook.com/docs/guides/games/custom-muti-friend-selector/ – CBroe

+0

Oui, mais idéalement je voudrais utiliser la gemme 'fb_graph' – locoboy

Répondre

9

Vous pariez. En supposant que vous avez une implémentation fonctionnelle de fb_graph, vous pouvez obtenir une liste d'amis avec la commande suivante (à partir https://github.com/nov/fb_graph):

FbGraph::User.me(fb_token).friends 

Vous pouvez l'utiliser pour générer votre interface utilisateur pour votre liste d'amis, puis inviter les amis sélectionnés , comme ceci (modification non testé du lien précédent, ainsi que https://developers.facebook.com/docs/reference/dialogs/requests/):

app_request = FbGraph::User.me(token).app_request!(
    :message => 'invitation message', 
    :to  => friend.uid 
) 

le code précédent peut également accepter une collection séparées par une virgule des UID.

Je vais vous laisser concevoir et coder l'interface utilisateur, mais c'est possible, en utilisant fb_graph, c'est sûr. Ces deux liens devraient être en or massif, si vous décidez d'élargir la portée, du tout.

+1

cela ne fonctionne pas pour moi. Il semble que Facebook n'autorise pas les demandes via cette méthode. Toutes les demandes finissent par aller à l'utilisateur qui a fait la demande. – Paul

3

Merci de votre intérêt pour ma gemme.

Brad Werth's code fonctionne pour les utilisateurs existants (= déjà installé votre application), mais probablement pas pour les nouveaux utilisateurs.

Il existe de nombreuses limitations pour envoyer des demandes d'application en arrière-plan afin d'éviter le spam. Cette limitation affecte directement l'envoi de la fonction de demande d'application par fb_graph.

Si vous développez une application iOS, je vous recommande d'utiliser le SDK iOS officiel de FB. En utilisant iOS SDK (ou JS SDK dans l'application html5), vous avez moins de limitations.

ps. Je ne suis pas familier avec le développement Android App ni le SDK officiel FB Android, mais je suppose qu'ils ont quelque chose de similaire dans leur SDK Android aussi.

+0

Je suis en train de développer en HTML5 et rails. Y at-il une limite à la gemme que je ne connais pas avec la façon dont @iioiooioo dit? Aussi, quelle est la meilleure façon de passer par la fonctionnalité de la gemme? – locoboy

+0

[Le document officiel] (https://developers.facebook.com/docs/reference/api/user/#apprequests) indique * "Remarque: POSTing au point de terminaison API Graph de/USER_ID/applrequests est considéré comme une application à l'utilisateur Les requêtes générées par une application ne reçoivent pas de notifications et obtiennent une distribution limitée par rapport aux demandes d'utilisateur à utilisateur envoyées avec le paramètre " " dans le paramètre "to'" du code de requête de @iioiooioo. 'to' n'est disponible que comme paramètre de réponse, pas comme paramètre de requête. –

1

Bien sûr, Facebook fournit une belle boîte de dialogue pour sélectionner les amis auxquels vous souhaitez envoyer des demandes. Mais il y a aussi un bel outil, construit en javascript, à travers lequel vous avez le même type de boîte de dialogue de sélection Facebook Friends.

JQuery Facebook Multi-Friend Selector Plugin

Ce plugin fera un appel API graphique à Facebook et recueillir votre liste d'amis. L'avantage de ce plugin est qu'il chargera toute la liste d'amis en "mode chargement paresseux".

1

Cela peut être utile, je l'ai utilisé sur mon serveur PHP et cela a fonctionné.

Ce code vous aide à publier, envoyer des messages, et également envoyer des demandes à vos amis.

tag tête:

<script type="text/javascript"> 
    function logResponse(response) { 
    if (console && console.log) { 
     console.log('The response was', response); 
    } 
    } 

    $(function(){ 
    // Set up so we handle click on the buttons 
    $('#postToWall').click(function() { 
     FB.ui(
     { 
      method : 'feed', 
      link : $(this).attr('data-url') 
     }, 
     function (response) { 
      // If response is null the user canceled the dialog 
      if (response != null) { 
      logResponse(response); 
      } 
     } 
    ); 
    }); 

    $('#sendToFriends').click(function() { 
     FB.ui(
     { 
      method : 'send', 
      link : $(this).attr('data-url') 
     }, 
     function (response) { 
      // If response is null the user canceled the dialog 
      if (response != null) { 
      logResponse(response); 
      } 
     } 
    ); 
    }); 

    $('#sendRequest').click(function() { 
     FB.ui(
     { 
      method : 'apprequests', 
      message : $(this).attr('data-message') 
     }, 
     function (response) { 
      // If response is null the user canceled the dialog 
      if (response != null) { 
      logResponse(response); 
      } 
     } 
    ); 
    }); 
    }); 
</script> 

Tag Body:

<body> 
<div id="fb-root"></div> 
<script type="text/javascript"> 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : 'xxxxxxxxxxxxxxxxxxx', // App ID 
     status  : true, // check login status 
     cookie  : true, // enable cookies to allow the server to access the session 
     xfbml  : true // parse XFBML 
    }); 

    // Listen to the auth.login which will be called when the user logs in 
    // using the Login button 
    FB.Event.subscribe('auth.login', function(response) { 
     // We want to reload the page now so PHP can read the cookie that the 
     // Javascript SDK sat. But we don't want to use 
     // window.location.reload() because if this is in a canvas there was a 
     // post made to this page and a reload will trigger a message to the 
     // user asking if they want to send data again. 
     window.location = window.location; 
    }); 

    FB.Canvas.setAutoGrow(); 
    }; 

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

<header class="clearfix"> 
    <?php if (isset($basic)) { ?> 
    <p id="picture" style="background-image: url(https://graph.facebook.com/<?php echo he($user_id); ?>/picture?type=normal)"></p> 

    <div> 
    <h1>Welcome, <strong><?php echo he(idx($basic, 'name')); ?></strong></h1> 
    <p class="tagline"> 
     This is your app 
     <a href="<?php echo he(idx($app_info, 'link'));?>" target="_top"><?php echo he($app_name); ?></a> 
    </p> 

    <div id="share-app"> 
     <p>Share your app:</p> 
     <ul> 
     <li> 
      <a href="#" class="facebook-button" id="postToWall" data-url="<?php echo AppInfo::getUrl(); ?>"> 
      <span class="plus">Post to Wall</span> 
      </a> 
     </li> 
     <li> 
      <a href="#" class="facebook-button speech-bubble" id="sendToFriends" data-url="<?php echo AppInfo::getUrl(); ?>"> 
      <span class="speech-bubble">Send Message</span> 
      </a> 
     </li> 
     <li> 
      <a href="#" class="facebook-button apprequests" id="sendRequest" data-message="Test this awesome app"> 
      <span class="apprequests">Send Requests</span> 
      </a> 
     </li> 
     </ul> 
    </div> 
    </div> 
    <?php } else { ?> 
    <div> 
    <h1>Welcome</h1> 
    <div class="fb-login-button" data-scope="user_likes,user_photos"></div> 
    </div> 
    <?php } ?> 
</header> 
Questions connexes