application

How to OStatus-enable Your Application

Making your application a full-fledged participant in the federated social web
is not easy, but gradual and incremental improvements can make your users'
activities visible to others.

  • Make good feeds. We need to have ActivityStreams feeds for OStatus. Fortunately,
    ActivityStreams has default behaviour defined for plain-old RSS 2.0 and
    Atom feeds, so the feeds you have now are probably fine. Ideally you should have a
    single feed for each person. You should
    define an author element at the feed level. Author elements should always
    have a URI element that uniquely identifies the author. Your feed should
    be discoverable with a <link> from the person's HTML profile page.
    Optional: use Activity Streams. Enhancing your feeds with ActivityStreams
    data like a verb and object can make the information much richer. Adding
    <link> elements with rel=”avatar” will make the user's avatar available.
    Optional: use Portable Contacts. You can add Portable Contacts elements as
    extensions to the <author> element. Important elements include
    <preferredUsername>, <displayName>, <note>, and <urls>.
  • PuSH-enable your feeds. PubSubHubbub (“PuSH”) makes real-time updates to
    feed subscribers possible. Your user feeds should be PuSH-enabled. This
    requires two steps: first, adding the declaration of a hub in the Atom or
    RSS 2.0 feed. Second, sending a new-content update to the hub when
    there's new content.

If you get to this point, other people on the OStatus network can subscribe to
your users by using their profile pages ('http://example.com/someuser') as the
identifier.

At this point, your users are full-fledged broadcasters on the federated social
web, but they're unable to receive information from others.

  • Model remote users. This can be the trickiest part of implementing
    OStatus. You'll need to allow for authors of comments, “favorites”, and
    so on to be people who don't have accounts on your local system. One
    typical way to do this is to have a superclass, Author, with subclasses
    User and RemoteAuthor (or something similar). Be careful about modeling
    identifiers; typically usernames are unique for Users but not for
    RemoteAuthors. Another option is to model remote users as a user role
    with the absolute minimum permissions.
  • Accept Salmon for replies. OStatus servers will try to send a Salmon slap
    when a remote user comments on or replies to an activity by one of your
    users. Ideally, you should accept these Salmon messages, display them,
    and notify the user. Note that typical precautions about comment spam
    apply here.
  • Accept Salmon for social activities. OStatus servers will also send Salmon
    slaps containing ActivityStreams representations of social activities
    involving your users when those activities happen remotely. If you keep a
    record of “followers” for a user, the Follow verb can be useful. Also
    important are the Like (or “Fave”) and Share verbs. If you cache remote
    users' profile data on your server, you should also handle the
    ProfileChange verb (custom for OStatus).

By here, your users can publish activities and have a two-way conversation with
remote users. If your application also has reading capabilities, you may want
to add remote users as an information source, too.

  • Allow subscriptions to remote users. You can implement the more complex
    subscriber role in PuSH. Note that there's a user-interface issue here;
    your users will have to tell you which remote user feeds they want to
    subscribe to. You should allow discovery using WebFinger and the
    “updates-from” relationship; also with a profile page, digging for the
    element that points to an Atom feed.
    Optional: implement OStatus subscribe link. Some OStatus systems (like
    StatusNet) let a browsing user provide a WebFinger identity to initiate
    subscription from the publisher's Web interface. To make this work,
    you'll need to implement the http://ostatus.org/schema/1.0/subscribe
    WebFinger relationship (described in the OStatus protocol documents).
    Optional: extract Portable Contacts profile information. You can get
    richer representations of remote users' profiles by extracting the
    Portable Contacts data from the <author> elements in feeds. You can also
    watch for profile update activities to come through the PuSH-enabled
    feed.
  • Send Salmon for replies. If your user replies to, or comments on, a
    remote activity, send a Salmon slap to the remote user. This will require
    discovering the remote user's Salmon endpoint and posting a reply to it.
  • Send Salmon for social activities. You can help remote users track
    popularity and reach by posting ActivityStreams representations of your
    users' interactions with their feeds. The Follow verb helps them keep a
    list of followers. If you send the Follow verb, make sure to send
    ProfileUpdate activities so that the social graph on the remote user's
    site stays in synch. Like and Share are also useful for remote users to
    track. Finally, the corresponding verbs (Unlike, Unshare, Unfollow) can
    help keep the state synchronized.
Syndicate content