45
hi5 OpenSocial Codelab

Hi5 Opensocial Code Lab Presentation

Embed Size (px)

Citation preview

Page 1: Hi5 Opensocial Code Lab Presentation

hi5 OpenSocial Codelab

Page 2: Hi5 Opensocial Code Lab Presentation

hi5 - Dominant Global Social NetworkWe are o ne o f the large st w e b site s in the w o rld

(#8 o n Ale xa) and the mo st glo bal o f all the so cial ne tw o rking site s.

Over 70+ million registered members and ~40 million WW unique users

Most popular Spanish-speaking social network in the world

Top 10 in Latin AmericaMexico, Colombia, Bolivia, Guatemala, Peru, Costa

Rica, Nicaragua, Honduras, Ecuador, El Salvador

Top 10 in Rest of the WorldPortugal, Greece, Romania, Cyprus, Thailand,

Jamaica, Sri Lanka, Kuwait, Jordan, Oman

Page 3: Hi5 Opensocial Code Lab Presentation

Hi5’s Demographics Broad reach across major demos:

18 to 34 primary

Roughly 50%split male/female

US traffic: significant percentage is Hispanic

Diverse traffic from Europe (25%), North America (15%) and Central & South America (31%), Asia (21%)

Offered in 14 languages

Grew big in most international countries with English first and then translated

Members use the site primarily to keep in touch with their friends. Users have limited self-expression tools - skins, widgets, etc.

Page 4: Hi5 Opensocial Code Lab Presentation

Getting Started

• A text editor, or the hi5 Gadget Editor• Web hosting, or the built-in hosting in the

hi5 Gadget Editor• A hi5 account• Access to the hi5 sandbox

Page 5: Hi5 Opensocial Code Lab Presentation

Getting Started on sandbox.hi5.com

Page 6: Hi5 Opensocial Code Lab Presentation

Two ways to get your App going

Sample App lets you Edit

Page 7: Hi5 Opensocial Code Lab Presentation

Editing Console

Page 8: Hi5 Opensocial Code Lab Presentation

Preview Mode

Page 9: Hi5 Opensocial Code Lab Presentation

Integration Points

• Preview Page• Profile Module• Canvas Page• Friend Updates• Notifications• App Invites• Emails

Page 10: Hi5 Opensocial Code Lab Presentation

Hello World<?xml version="1.0" encoding="UTF-8" ?><Module> <ModulePrefs title="Hello World!”

author_email=”[email protected]”> <Require feature="opensocial-0.7" /> </ModulePrefs> <Content type="html"> <![CDATA[ Hello, world! ]]> </Content></Module>

Page 11: Hi5 Opensocial Code Lab Presentation

Hello World• <Module> indicates that this XML file contains a gadget.• <ModulePrefs> contains information about the gadget,

and its author.• author_email must match your hi5 account’s email in

the hi5 container• <Require feature="opensocial-0.7" /> denotes a

required feature of the gadget — in this case, the OpenSocial API (v0.7).

• <Content type="html"> indicates that the gadget's content type is HTML.

• <![ CDATA[…]]> contains the bulk of the gadget, including all of the HTML, CSS, and JavaScript (or references to such files).

Page 12: Hi5 Opensocial Code Lab Presentation

Initialization

gadgets.util.registerOnLoadHandler(init);

function init() { loadFriends();}

Page 13: Hi5 Opensocial Code Lab Presentation

Fetching Friendsfunction loadFriends() { var req = opensocial.newDataRequest();

req.add(req.newFetchPersonRequest('VIEWER'), 'viewer');

req.add(req.newFetchPeopleRequest('VIEWER_FRIENDS'), 'viewerFriends');

req.send(onLoadFriends);}

Page 14: Hi5 Opensocial Code Lab Presentation

Handle the Response

Page 15: Hi5 Opensocial Code Lab Presentation

Handle the Responsefunction onLoadFriends(data) { var viewer = data.get('viewer').getData(); var viewerFriends = data.get('viewerFriends').getData();

html = new Array(); html.push('<ul>'); viewerFriends.each(function(person) { html.push('<li>' + person.getDisplayName() + "</li>"); }); html.push('</ul>'); document.getElementById('friends').innerHTML = html.join('');}

Page 16: Hi5 Opensocial Code Lab Presentation

Adding App Data

Page 17: Hi5 Opensocial Code Lab Presentation

Adding App Data

Page 18: Hi5 Opensocial Code Lab Presentation

Adding App Data

Page 19: Hi5 Opensocial Code Lab Presentation

Adding App Data

var givenGifts = {};

function giveGift() { var nut = document.getElementById('nut').value; var friend = document.getElementById('person').value;

givenGifts[friend] = nut; var json = gadgets.json.stringify(givenGifts);

var req = opensocial.newDataRequest();

req.add(req.newUpdatePersonAppDataRequest(opensocial.DataRequest.PersonId.VIEWER, 'gifts', json));

req.send();}

Page 20: Hi5 Opensocial Code Lab Presentation

Displaying App Data

Page 21: Hi5 Opensocial Code Lab Presentation

Displaying App Data

Page 22: Hi5 Opensocial Code Lab Presentation

Displaying App Data

Page 23: Hi5 Opensocial Code Lab Presentation

Displaying App Data

function updateGiftList(viewer, data, friends) { var json = data[viewer.getId()]['gifts'];

if (!json) { givenGifts = {}; } try { givenGifts = gadgets.json.parse(json); } catch (e) { givenGifts = {}; }

var options = ['a cashew nut', 'a peanut', 'a hazelnut', 'a red pistachio nut'];

var html = new Array(); html.push('You have given:'); html.push('<ul>'); for (i in givenGifts) { if (+(i) > 0) { html.push('<li>' + friends[i] + ' received ' + options[givenGifts[i]] + '</li>'); } } html.push('</ul>'); document.getElementById('given').innerHTML = html.join('');}

Page 24: Hi5 Opensocial Code Lab Presentation

Displaying App Data

Page 25: Hi5 Opensocial Code Lab Presentation

Displaying App Data

Page 26: Hi5 Opensocial Code Lab Presentation

Displaying App Data

Page 27: Hi5 Opensocial Code Lab Presentation

Displaying App Data

Page 28: Hi5 Opensocial Code Lab Presentation

Displaying App Datafunction updateReceivedList(viewer, data, friends) { var viewerId = viewer.getId(); var options = ['a cashew nut', 'a peanut', 'a hazelnut', 'a red pistachio nut'];

var html = new Array(); html.push('You have received:<ul>'); friends.each(function(person) { var personData = data[person.getId()]; if (personData) { var json = data[person.getId()]['gifts'];

var gifts = {} if (!json) { gifts = {}; } try { gifts = gadgets.json.parse(json); } catch (e) { gifts = {}; }

for (i in gifts) { if (+(i) > 0 && i == viewerId) { html.push('<li>' + options[gifts[i]] + ' from ' + person.getDisplayName() + '</li>'); } } } }); html.push('</ul>'); document.getElementById('recieved').innerHTML = html.join('');}

Page 29: Hi5 Opensocial Code Lab Presentation

Displaying App Data

Page 30: Hi5 Opensocial Code Lab Presentation

Resizing the Window

Page 31: Hi5 Opensocial Code Lab Presentation

Resizing the Window

Page 32: Hi5 Opensocial Code Lab Presentation

Creating Activityfunction createActivity(title) { var opts = new Array();

opts[opensocial.Activity.Field.TITLE] = title; opts[opensocial.Activity.Field.STREAM_FAVICON_URL] =

'http://images.hi5.com/images/icons/_/update_widget.png');

var activity = opensocial.newActivity(opts);

// Request the activity creation opensocial.requestCreateActivity(activity, opensocial.CreateActivityPriority.HIGH);}

Page 33: Hi5 Opensocial Code Lab Presentation

Creating Activity

Page 34: Hi5 Opensocial Code Lab Presentation

Sending Notifications

function sendNotifications(notification, toIds) { var params = new Object(); params[opensocial.Message.Field.TYPE] =

opensocial.Message.Type.NOTIFICATION; var message =

opensocial.newMessage(notification, params); opensocial.requestSendMessage(toIds,

message);}

Page 35: Hi5 Opensocial Code Lab Presentation

Sending Notifications

Page 36: Hi5 Opensocial Code Lab Presentation

Making Content Requests

Page 37: Hi5 Opensocial Code Lab Presentation

Making Content Requests

function getStatus() {var authToken = this.sandbox.hi5Container.params['Hi5AuthToken'];

gadgets.io.makeRequest('http://api.hi5.com/rest/status/getStatus?userId='+viewer.getField(opensocial.Person.Field.ID) +'&Hi5AuthToken='+authToken,

function(response) { var data = response.data; console.debug(response.text); var content = data.getElementsByTagName('content'); if(content.length == 1) { document.getElementById('status').innerHTML = "Your status: " +

content.item(0).firstChild.nodeValue; } }, {'METHOD' : 'GET', 'CONTENT_TYPE' : 'DOM'});}

Page 38: Hi5 Opensocial Code Lab Presentation

Working With Views

Page 39: Hi5 Opensocial Code Lab Presentation

Working With Views<Content type=“html” view=“profile”> <![CDATA[ <script

src="http://images.hi5.com/images/opensocial/gifts.js"></script>

<script> gadgets.util.registerOnLoadHandler(initProfile); </script> <div id='main'> <div id='received’></div> </div> ]]></Content>

Page 40: Hi5 Opensocial Code Lab Presentation

Navigating to a View

Page 41: Hi5 Opensocial Code Lab Presentation

Navigating to a View

function navToCanvas() { var views = gadgets.views.getSupportedViews(); gadgets.views.requestNavigateTo(views['canvas']); }

Page 42: Hi5 Opensocial Code Lab Presentation

Applying a Skin

Page 43: Hi5 Opensocial Code Lab Presentation

Applying a Skin

Page 44: Hi5 Opensocial Code Lab Presentation

Other Features

• requestShareApp• requestSendMessage– EMAIL, PRIVATE_MESSAGE,

PUBLIC_MESSAGE• Person Field extensions– SMALL_IMG_URL, MEDIUM_IMG_URL,

LARGE_IMG_URL• Lifecycle Callbacks• Activity Templates

Page 45: Hi5 Opensocial Code Lab Presentation

hi5 Roadmap

March 15: Hackathon geared towards launch preparation. Apps will be considered for whitelisting from this date until launch.

March 31: Production launch