Hi there!

A few days ago, I started to write my first own facebook application. It all went quite okay until one certain point: I wanted my application to update the profile box of the user, which uses the app at that single moment. And that wasn’t as easy, as I thought.

The problem was: after the profile box has been updated, all profile boxes of all users had the same content – the content of the user who last updated his profile box.

I will come to the solution later. First of all, a quick explanation of what I needed to do:

  1. I read the documentation of facebook’s application guide to understand the API and the FBML language
  2. I set up my own application using the step-by-step guide
  3. I set up my new application on my own host including facebook’s PHP libraries

Here’s the code step-by-step (just put all sniplets together):

Code sniplet #1

require_once 'facebook-platform/php/facebook.php';

$appid = 'xxxxxxxxxxxx';
$appapikey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$appsecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

$facebook = new Facebook($appapikey, $appsecret);
$user_id = $facebook->require_login();

Above: first of all, we need to include facebook’s PHP libraries, define several variables for our application, initialize our facebook object and retrieve the UID of the user who currently uses the application.

Code sniplet #2

$fb_box = "<H4 class='box_header clearfix'><span>";
$fb_box .= "Hello World!";
$fb_box .= "</span></H4>";
$fb_box .= "<div>I am ";
$fb_box .= "<fb:name uid=\"$user_id\" useyou=\"false\" />.";
$fb_box .= "Nice you're on my page.</div>";
$fb_box .= "Some more content in HTML or FBML...";

Above: we then define the content which we want to be displayed within the profile box. In this examble, it will be the name of the user, greeting the visitor.

Code sniplet #3

$fb_box_handle = 'pb_' . $appid . '_' . $user_id;

Above: this is important! At this point, I got stuck for a while. The reason was, facebook caches profile boxes content until the application’s canvas page is requested for the next time. The handle is very important for that caching mechanism, since it has to be a unique identifier for each application and each user. For that reason, I simply use the prefix ‘pb_‘ followed by the applications ID (defined above) and the UID of the current user (also defined above)!

Code sniplet #4

$facebook->api_client->call_method('facebook.profile.setFBML',
array(
'api_key' => $appapikey,
'v' => '1.0',
'uid' => $user_id,
'profile' => '<fb:narrow><fb:ref handle="' . $fb_box_handle . '" /></fb:narrow>',
'profile_main' => '<fb:ref handle="' . $fb_box_handle . '" />',
)
);

Above: the rest is quite simple. We make an API call to facebook and send our application key, the protocol version, the UID of the facebook user whose profile box ought to be updated and, of course, the content for that box. The content will be sent as the reference handle we defined earlier.

If you want to update multiple profile boxes with one single API call, I guess, this could work if you send an array containing the UIDs. If not, you can still get all those UIDs, walk through the array and perform multiple API calls. I read somewhere, some users had problem updating large numbers of profiles… Just give it a try.

Comments (if it worked for you or even if it didn’t) are appreciated :-)

UPDATE because of comment #2:

The example above is about updating content in a users profile, not about setting up a profile box on a profile. You should read the manual carefully.

A user has to approve a certain application to create a profile box. Therefore, you need to render a button, which sets up the box. You can easily do this by:

$appapikey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$appsecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$facebook = new Facebook($appapikey, $appsecret);
$user_id = $facebook->require_login();
$facebook->api_client->profile_setFBML($appapikey, $user_id, 'profile', NULL, 'mobile_profile', 'profile_main');
echo "<fb:add-section-button section='profile' />";

The last line renders the button, you want to have on your canvas page.

Good luck! Thomas

Hat’s gefallen?

Wenn der Artikel gefallen hat oder hilfreich war, bitte folgende Funktionen benutzen:



Vielleicht gefällt dir auch:

Google-Suche in neuem Fenster
Benutzerdefinierte Suche