This week, we announced our Platform stability initiatives including a 90-day breaking change policy and a revamped beta tier with processes to improve Platform testability. We also published How-To: Build an app on Facebook with Fluid Canvas.

Exporting data from Facebook

Over the past few weeks, we have received a number of questions about apps that export data from Facebook into other social networks. We wanted to take this opportunity to clarify our policies.

If you would like to export your own data from Facebook or want to build an app that exports data from Facebook to another social network, you should use Download Your Information. Download Your Information enables any person who uses Facebook to easily download all of their content on Facebook (including all status updates and photos) in a single zip file. We have recently begun adding microformats to the HTML included with Download Your Information to make this format easier for other apps to consume. We also include the email addresses of all your friends who have opted to make their address available through this download process.

Facebook Platform is designed to enable rich social apps, not to be used as a data export tool. We have taken great care in both our product and our policies to ensure that users are in control of what data is available to apps and how it is used. For example, we have policies that prohibit Platform apps from transferring data to third parties such as ad networks and data brokers and we routinely disable apps that violate these policies.

If you are building an app whose purpose is to export data to another social network such as Google+, you should use Download Your Information, not Facebook Platform. We feel that Download Your Information strikes an appropriate balance between preserving the ability of people to transfer their data off of Facebook while protecting the privacy of their friends on Facebook.

Reading and Managing Notifications

As we mentioned in a previous post, you can now access a user’s notifications via the Graph API with the manage_notifications permission:



Then, issue an HTTP GET request with this permission to:

https://graph.facebook.com/USER_ID/notifications

For example:

<?php
  $app_id = 'YOUR_APP_ID';
  $app_secret = 'YOUR_APP_SECRET';
  $my_url = 'YOUR_URL';

  $code = $_REQUEST["code"];

  echo '<html><body>';

  if(!$code) {
    // Get permission from the user to publish to their page. 
    $dialog_url = "http://www.facebook.com/dialog/oauth?client_id="
      . $app_id . "&redirect_uri=" . urlencode($my_url)
      . "&scope=manage_notifications";
    echo('<script>top.location.href="' . $dialog_url . '";</script>');
  } else {

    // Get access token for the user
    $token_url = "https://graph.facebook.com/oauth/access_token?client_id="
      . $app_id . "&redirect_uri=" . urlencode($my_url)
      . "&client_secret=" . $app_secret
      . "&code=" . $code;
    $access_token = file_get_contents($token_url);

    $notifications = "https://graph.facebook.com/me/notifications?" 
      . $access_token;
    $response = file_get_contents($notifications);

    $resp_obj = json_decode($response,true);

    echo '<pre>';
    print_r($resp_obj);
    echo '</pre>';

  }
  echo '</body></html>';
?>
You can also do this on the command line with the curl command:
curl -F 'access_token=...' \
     -F ‘method=GET’ \
     https://graph.facebook.com/me/notifications

To get all of a user’s notifications, including ones they’ve already read, include the include_read parameter:

https://graph.facebook.com/USER_ID/notifications?include_read=1<br/>

You can also mark a notification as read by issuing a POST to:

https://graph.facebook.com/NOTIFICATION_ID?unread=0

You can find more information in the User object documentation.

Reading Achievements

We launched the achievement API for games a few weeks ago to enable you to publish user achievements in the Canvas Ticker. Today we are completing the API with the ability to read achievements.

You can read the set of achievements registered for your app by issuing an HTTP GET request to:

https://graph.facebook.com/APP_ID/achievements?access_token=APP_ACCESS_TOKEN

You can read the set of achievement(instance) objects for a user by issuing an HTTP GET request to:

https://graph.facebook.com/USER_ID/achievements?access_token=...

  • If the user has authorized your app with the user_games_activity permission then this returns the achievements for all games. Otherwise it returns achievements only for your app.
  • If the user has authorized your app with the friends_games_activity permission then you can also access achievements for the user's friends by issuing a HTTP GET request to /FRIEND_ID/achievements.

You can find more information in the achievement API documentation.

App Attribution in Photo Tag Stories

We will now publish an attribution link to your app when the app adds tags to photos. For example:
Users clicking on the link will be taken to your app. In addition, users will have the ability to block your app in the “X” menu.

Reminders: Migrate to OAuth 2.0 + SSL by October 1, 2011

As stated in our Roadmap, by October 1, 2011:

  • All Website and Canvas apps must exclusively support OAuth 2.0 (draft 20)
  • All Canvas Apps must use the signed_request parameter
  • An SSL Certificate is required for all Canvas and Page Tab apps (not in Sandbox mode)
  • Old, previous versions of our SDKs will stop working, including the old JavaScript SDK
We added a migration guide to the Developer Site and will continue reminding you about this migration weekly until October 1.

Increasing transparency around policy enforcement

We continue to launch improvements to our enforcement systems to help you continue to build great user experiences. A month ago, we added better user feedback metrics, granular enforcement, and a new disabled mode.

This week, apps have started receive a warning email before any enforcement action is taken. This warning email is sent when an app triggers our enforcement systems and does not appear to be malicious. Once a warning notice is sent to your app via email, we ask you to promptly address this issue within 48 hours, after which our automated systems will evaluate your app once again. Please note we reserve the right to take action against your app even before the end of this 48 hour period.

For more information on your app’s performance, please visit your App Insights. We suggest you actively monitor user reports, volume of content published per user, and any spikes in share or install activity. Note that users often respond negatively to behavior that violates our Platform Policies, so we also encourage you to ensure your app is in compliance by reviewing our policies.

Deprecating Dashboard APIs

With the recent update to our Games Dashboard and Canvas Page with the Ticker and Fluid Canvas, we have removed the section which displayed the News that developers published via the Dashboard APIs in the Games Dashboard. As part of this, these APIs are now deprecated. We will be removing them in 90 days December 2, 2011.

  • dashboard.addGlobalNews
  • dashboard.addNews
  • dashboard.clearGlobalNews
  • dashboard.clearNews
  • dashboard.getActivity
  • dashboard.getGlobalNews
  • dashboard.getNews
  • dashboard.multiAddNews
  • dashboard.multiClearNews
  • dashboard.multiDecrementCount
  • dashboard.multiGetNews
  • dashboard.publishActivity
  • dashboard.removeActivity

The Dashboard count APIs continue to work but we recommend that developers use Request 2.0 which automatically sets the app bookmark counts and drives traffic directly to your apps.

Change in Session Redirect Behavior

This week, we started adding a fragment #_=_ to the redirect_uri when this field is left blank. Please ensure that your app can handle this behavior.

FB.Canvas.setAutoResize Issues

There have been several bugs reported about how FB.Canvas.setAutoResize doesn’t set the height of the iframe correctly in some scenarios. We tried to push out a fix on Tuesday which would fix these bugs but it created some additional issues for existing apps which forced us to revert the change.

We recommend that for the time being please use the option Fluid, or use Settable and explicitly set the height of the iframe using FB.Canvas.setSize. The key issue is around computing the size of your content accurately, to enable us to auto-resize the iframe to the size of your content. This happens when you call the FB.Canvas.setAutoResize method or call FB.Canvas.setSize without an explicit height parameter. Please bear with us as we try to find a solution.

Dev Blog Email Issues

The Dev Blog is having issues with sending posts to email subscribers. We are currently working on a fix and will have it out by the 14th. In the meantime, please continue to visit the blog every Friday.

Docs

We updated the FQL documentation for the following tables:

75 docs are under review.

Bugs

Bugzilla activity for the past 7 days:

  • 194 new bugs were reported
  • 28 bugs were reproducible and accepted (after duplicates removed)
  • 14 bugs were fixed (none of which were reported this week)
  • As of today, there are 1,281 open bugs in Bugzilla (up 29 from last week)

Facebook Stack Overflow Activity

Activity on facebook.stackoverflow.com this week:

  • 516 questions asked
  • 185 answered, 36% answered rate
  • 345 replied, 67% reply rate