Forgot to sign off! Hope it was useful.


FB Platform and Mobile

Launching a new mobile dialog to match the new dialogs on the website, with extended perms changes.

Can publish mobile actions directly - lots of additional traffic, buy more servers!

Very simple integration changes.


FB’s Hybrid Mobile App (HTML5)

Learnings from building FB to support web/mobile/Android/iOS.

350M mobile users, 2x more engaged than web-only users.

The problem: cross-platform of FB mobile

Approach was horizontal - building for each OS. Too much code is difficult.

If you want to build it once, the web is your best bet. “Guess and redirect” using browser ID to choose where to send you (do you get CSS or not?)

Unified mobile site and touch.

  • Detect capabilities
  • Allow capabilities to control flow
  • Allow capabilities to display

WURFL gives a data view of capabilities of diff devices.

You want a <m:button/> tag, not to have to put tons of code into markup to get it to work. Let the component decide what it can do. Progressive enhancement.

Web: write once, run anywhere.

Everyone wants the iPhone version to look like iPhone. FB app is a native top with mobile site as newsfeed.

3 of the major phones have Webkit support. Injecting site into the app. FB “bets on the browser”.

This gets you:

  • can ship daily
  • ship in an easy lang (HTML)
  • ship once (to all HTML-supporting native apps)

Detect that you are in a native app, build a JS->Native bridge.

JS skeleton with Platform Abstraction Layer - open camera, etc.

What is on native-JS bridge?

  • sensor/data (e.g. GPS)
  • display (look like native)
  • deep dive (FB camera, gallery etc. flows)

PhoneGap does a lot of this.

Common problems:

  • "It doesn’t look native" (with some gotchas until Android 2.2+, iOS5)
  • "It doesn’t feel native" usually means scrolling. Also, keyboards, image appearance.
  • "Isn’t fast enough" - prefetch/cache, have content ‘appear’ to be ready: fill in skeleton then content.


  • Lot of JS
  • API calls got expensive
  • caches don’t always work like they should

HTML5 lets us go further. Initial attempt deferred problems to native handlers, not in-browser tech.

Device Access:

  • geolocation
  • network connnectivity
  • camera
  • contacts

List of native functions.

Apple and iOS5 may fix scrolling.

JS rendering engines have gotten MUCH better in last 1.5yrs. (nitro, v8)


New plugin: Recommendations Bar

A lot of users still copy-paste URLs into FB when sharing.

Their research says users can say “I can’t find Like button”.

The existing plugins take up a lot of real esate. (Often 300x300 or more). You get to the end and you don’t know what’s next thing read as recommended by friends.

Recommendations Bar is permanent floating dock with Like button on bottom right of page. Then, when user reaches the end of page, it pops up with add’l recommendations.

Also, contains an Add to Timeline button that publishes to Timeline, and gets them to give permission for all future actions of this type to be published. 

The idea is that content consumption is a big part of your identity. “Rafi read 10 articles on ESPN.com about the New York Giants”

Like button with faces gets .1% CTR. If 1% of your users turn this on, the amount of your content on FB would be massive.

Can specify when to show by:

  • % of page shown/scrolled
  • read time - time on page
  • user scrolls past where fb plugin tag is on the page



Existing Plugins and Open Graph

Old plugins (Activity Feed, Recommendations, Facepile) were powered by the Like button.

Idea is there is more interesting activity than just “Liking” things. The new actions they are releasing power updated versions of the orig plugins.

Existing plugins will automatically get “Read/Watch/Listen” actions in addition to Like/Share.

Can now add custom actions into plugins by adding into code:

actions=”app_namespace: my_action1, my_action2”

Facepile can take an ordered list of actions. E.g bookmark, like, reads - would show 1st friends who bookmarked, if none then likes, if none then reads. Should be aimed at your most popular actions going down to less popular.


Authenticated Referrals

Value of connected users
  • 20% more pageviews
  • 20% lower bouncerate
  • 175% more time on site
  • 100% of referral traffic is connected

New tool allows all links from FB to your site to go thru an interstitial dialog to ask them to Log In to your app. Then, all future clicks from FB by that user will be authenticated. Big win.


New tag: fb:add-to-timeline. Use instead of login?



New settings for Auth Dialog.

New settings for Auth Dialog.


Optimizing App Installation

Permissions/ToS dialog is changing. Trying to address the ‘why does this app need these perms’ and the general scariness of asking for lots.

Dialog will now explain the app. Flexible config for devs, clear to users.

Inline privacy controls.

Lightweight for std perms.

New timeline dialog:

  • descriptive headline
  • list of actions that it will publish to timeline
  • default privacy level of whom actions visible to, lets you select and alter default level for publishing actions
  • permissions needed
  • preview of the timeline view on your profile
  • facepile of friends who use the app

Non-timeline dialog:

  • makes it clear that will not add to timeline - no preview

If app requests ‘extended permissions’, there is a new second dialog that will come after the first one. However, you can now write an explanation as to why you’re asking for these additional perms.


Building apps for the new profile

As you page thru Timeline, you start seeing Aggregations.

Can define multiple aggregations to define actions that get grouped.

Name aggregation based on what it contains, not recency. Call it “Reads” not “Most Recent Reads”, b/c might be from last July in timeline and name would be wrong.

Actions have start/end timestamps, so wording is based on duration.

Typing a ‘{’ in aggregation defn gives you a typeahead on query objects and formatters.

Can add custom properties to object, e.g # of pages in book you read. Then can do a custom sort on that - longest book you read. Create custom view, and your book.pages type is now available to put in view. Additionally, can run functions to sum up all the pages you ever read.

Some things are more interested in aggregate than just once - track listened to. So connecting objects makes it more compelling. Song can be connected to Artist and Album.  Group on the more common properties, using functions like ‘pluralize’.


Action types need approval

To avoid spaminess and keep it clean. Need to represent genuine user activity in your app.


Timeline aggregations

Can define types of timeline object (float, int, geo)

Once these properties are defd, can use as aggregate fields.

Once you have defd verbs and nouns, FB community translation will kick in, or you can translate yourself.


App tabs

Groups activities together by app or type (music)