2010-11-17 5 views
2

J'ai développé une application pour facebook. Je veux que chaque fois qu'un utilisateur ajoute mon application en cliquant sur Autoriser la boîte de dialogue d'autorisation, un message est automatiquement posté sur le mur des utilisateurs seulement pour la première fois.Comment sur le mur Facebook en utilisant l'API Graph

<?php 

include_once 'fb_sdk_212/src/facebook.php'; 
include_once 'config.php'; 

$flag_post=0; 

$facebook = new Facebook(array(
    'appId' => FACEBOOK_APP_ID, 
    'secret' => FACEBOOK_SECRET_KEY, 
    'cookie' => true, 
    'domain' => 'xxxxx.in' 
)); 

$session = $facebook->getSession(); 

if (!$session) { 

    $flag_post=1;  

    $url = $facebook->getLoginUrl(array(
       'canvas' => 1, 
       'fbconnect' => 0, 
       'req_perms' => 'email,user_birthday,status_update,publish_stream' 
      )); 



    echo "<script type='text/javascript'>top.location.href = '$url';</script>"; 



} else { 

    try { 

     $uid = $facebook->getUser(); 
     $me = $facebook->api('/me'); 

     $updated = date("l, F j, Y", strtotime($me['updated_time'])); 

     echo "Hello " . $me['name'] . "<br />"; 
     echo "You last updated your profile on " . $updated."<br/>"; 

     if($flag_post == 1){ 
     # let's check if the user has granted access to posting in the wall 
     $api_call = array(
      'method' => 'users.hasAppPermission', 
      'uid' => $uid, 
      'ext_perm' => 'publish_stream' 
     ); 

    $can_post = $facebook->api($api_call); 
    echo $can_post; 
    $attachment = array(
    'name' => 'Tracer', 
    'description' => 'xxxx', 
    'caption' => 'xxxxx', 
    'picture' => 'images/mt75.jpg', 
    'link' => 'tracer/' 

    ); 

    if($can_post){ 
     # post it! 

     $facebook->api('/'.$uid.'/feed', 'post', $attachment); 
     echo 'posted'; 
    } else { 
     die('Permissions required!'); 
    } 
     } 

     } catch (FacebookApiException $e) { 

     echo "Error:" . print_r($e, true); 

    } 
} 
?> 
+0

Je pense que vous devez indiquer quelle langue vous allez utiliser .. rails? php? parce que le cadre différent ou la langue utilisent une bibliothèque différente pour cela. J'utilise omniauth dans les rails. – wizztjh

+0

ou vous prévoyez de le faire à partir de rien ... – wizztjh

+0

Je l'ai fait en utilisant php sdk. – user429727

Répondre

1

Vous devez obtenir la permission étendue publish_stream.

http://developers.facebook.com/docs/authentication/permissions

Cela peut être fait dans l'autorisation de dialogue

http://developers.facebook.com/docs/reference/javascript/FB.login

en ajoutant à la liste publish_streamperms. Après cela, vous serez en mesure de publier sur le mur de l'utilisateur à tout moment.

+0

merci pour votre suggestion de frère. J'ai fait ça. Je veux que ce soit l'algo afin que l'application publie le message automatiquement en l'ajoutant au profil seulement pour la première fois. – user429727

+0

@ user429727: vous ne pouvez pas gérer cet événement. – zerkms

+0

ya comment faire pour que .. vous pouvez suggérer l'algo – user429727

0

Je pense que vous pouvez gérer cela assez facilement sans que Facebook soit impliqué dans la décision de publier sur le mur des utilisateurs ou non. Dans la table utilisateur de votre base de données, vous devriez avoir une colonne pour first_fb_post. Lorsqu'un compte utilisateur est créé, il devrait par défaut à 0, puis une fois que vous publiez le poste de mur, il doit être mis à jour 1.

Et votre facebook fonction de publication serait fixé comme:

if($first_fb_post == 0) 
{ 
    //your FB publishing code here 

    //update your user table to mark this users first_fb_post to 1 
} 
0

Vous pouvez accrocher dans la première fois que l'utilisateur "installe" votre application. Quand ils le font, ils sont redirigés vers votre site avec un parametre de « code » situé dans l'url:

if(isset($_GET['code'])){ 
    // User Authorized app. Lets hook the install event. 
     if($can_post){ 
      # post it! 

      $facebook->api('/'.$uid.'/feed', 'post', $attachment); 
      echo 'posted'; 
     } else { 
      die('Permissions required!'); 
     } 
} 
1

je ferais une des opérations suivantes:

  1. Ajouter un champ dans un table de base de données pour indiquer que cela a été fait. Ensuite, vérifiez simplement s'il a été défini. Si les cookies sont activés sur le PC de l'utilisateur, vous pouvez utiliser mais en utilisant une base de données serait le meilleur.

  2. Demande à l'utilisateur de prendre une action pour faire le post. Cela nécessite donc une action de l'utilisateur. Cela présente l'inconvénient que certains utilisateurs ne peuvent pas le faire.

Questions connexes