使用opensocial接入social game
在opensocial 规范的平台,一个xml文件就是一个应用,所以,如果你想要发布一个opensocial的应用,首先,你得编写好你的xml(the gadget spec xml),下面是一个简单的范例:
<Module>
<ModulePrefs title="Your gadget name"
description="xxxx"
height="200"
screenshot="http://xxxx/x.jpg"
thumbnail="http://xxxx/x.jpg"
author="your name or developer name"
author_email="your email or developer email">
<Require feature="dynamic-height"/>
<Require feature="opensocial-0.8" />
<Optional feature="content-rewrite">
<Param name="expires">86400</Param>
<Param name="include-url">.*</Param>
<Param name="exclude-url"></Param>
<Param name="minify-css">true</Param>
<Param name="minify-js">true</Param>
<Param name="minify-html">true</Param>
</Optional>
</ModulePrefs>
<Content type="html" view="canvas">
<![CDATA[
//your code
]]>
</Content>
<Content type="html" view="profile">
<![CDATA[
//your code
]]>
</Content>
</Module>
下面来解释一下上面的代码, <ModulePrefs>...</ModulePrefs>,这里面指定了应用的特征。比如应用的名字,应用的描述等,有些特征并不是必须的,比如,你可以只要title,其他的都不要,那么其他的默认就是空的,当然,并不是所有的opensocial平台都一样,具体的情况因平台而异。
<Require>和<Optional>,他们用来声明应用要依赖的特征,比如<Require feature="opensocial-0.8" />,这句就表示,你要用到的是opensocial 0.8的标准,那么你使用的接口规范就应该是在0.8的规范之下运行,而且这个是必须的,同时<Require>和<Optional>必须的在<ModulePrefs>的节点之下。上面的代码里,我写了个<Optional feature="content-rewrite">,这个特征是非常的有用,你想,如果你能因他而大量的减少对你服务器静态资源的请求,你说它好吗? 想详细的了解它,请看这个文旦http://wiki.opensocial.org/index.php?title=Content_Rewriter_Feature
接下来,就是<Content>急节点,<Content>里面有5个属性可以设置,type,view,href,prefferred_height,prefferred_width,他们分别用来设置内容的类型(可以设置成html或者url,默认为html),内容显示的地方,你可以设置canvas,profile,home。这个很可能会用到,比如说你想让<content>下的内容在profile里面显示,那么就的得设置type="profile",同理,如果你想在canvas里面显示,你就的设置成canvas.有的朋友可能对下面的<![CDATA[ ... ]]>不明白,其实很简单, 这句就是用来告诉解析xml的工具,不要解析<![CDATA[ ... ]]>里面的东西,所以,你可以在里面写任何的js代码或者html代码,当平台读取你的xml后,这里面的代码就会以网页的形式显示在你设定好的地方(profile或者canvas或者home)。同样,你可以为不同的view显示不同的内容,很简单,为其他的view再写一个content.
到此,一个正确的gadget就创建好了。
但是,如果你没有在content里面写任何内容,那么在添加上你的应用后,你的显示页面就是一个空白。
既然是用来做平台接入的,那总要从平台取一点信息吧。ok.下面就简单介绍以下如果从平台获取用户的信息。
先看代码:
<Content type="html" view="canvas">
<![CDATA[
function getOwner() {
var req = opensocial.newDataRequest();
req.add(req.newFetchPersonRequest("OWNER"), "get_owner");
req.send(function (data) {
if(data.hadError()) {
output(data.getErrorMessage()});
} else {
person = data.get("get_owner").getData();
//var uid = person.getId();
//var name = person.getDisplayName();
return person;
}
}
}
function getViewFriends() {
var req = opensocial.newDataRequest();
var idSpec = opensocial.newIdSpec({'userId' : 'VIEWER', 'groupId' : 'FRIENDS'});
var params = {};
var index = 0; //如果你想一次取75个,但却有76个好友,那么,你可以取两此,第一次设定index=0,第二次设定为75.这个主要是为了在一些一次不能取得全部好友的平台使用。
var max = 75; //每次最多取多少个
params[opensocial.DataRequest.PeopleRequestFields.FIRST] = index;
params[opensocial.DataRequest.PeopleRequestFields.MAX] = max;
req.add(req.newFetchPeopleRequest(idSpec, params), 'viewerFriends');
req.send(function(data){
if(data.hadError()) {
output(data.getErrorMessage());
}else {
window.friends_list = new Array(); // storage all of viewer friends' info
var friends_info = new Array();
data.get('viewerFriends').getData().each(function(person) {
friends_info[0] = person.getId();
friends_info[1] = person.getDisplayName();
friends_info[2] = person.getField('profileUrl');
friends_info[3] = person.getField(opensocial.Person.Field.THUMBNAIL_URL);
window.friends_list.push(friends_info);
})
}
}
}
]]
</Content>
上面的两个例子很简单。这里注意,output这个函数是opensocial的sandbox里面实现的一个方法,所以,如果你不是在sandbox里面运行上面的代码的话,请注释调。 另外介绍另外一个sandbox里面经常要用的方法cls(),它的作用就是清除你用output输出来的内容。
接下来介绍对推广应用非常有用的三个功能,activities和message和invite friends看代码:
//send message
function sendEmail(title, body) {
var params = [];
params[opensocial.Message.Field.TITLE] = title;
params[opensocial.Message.Field.TYPE] =
opensocial.Message.Type.EMAIL;
var message = opensocial.newMessage(body, params);
var recipient = "VIEWER";
opensocial.requestSendMessage(recipient, message, callback);
};
function callback(data) {
if (data.hadError()) {
alert("There was a problem:" + data.getErrorCode());
} else {
output("Ok");
}
};
sendEmail("This is a test email", "How are you doing?");
//send activities
function onActivityPosted(data) {
if (data.hadError()) {
alert("There was a problem: " + data.getErrorMessage());
} else {
output("The activity was posted successfully.");
}
};
function postActivity(title, body) {
var data = {};
data[opensocial.Activity.Field.TITLE] = title;
data[opensocial.Activity.Field.BODY] = body;
var activity = opensocial.newActivity(data);
opensocial.requestCreateActivity(activity, opensocial.CreateActivityPriority.HIGH, onActivityPosted);
};
postActivity("This is a sample activity", "This is an activity body");
//invite friends
opensocial.requestShareApp('USER_FRIENDS'); //注意,有的平台可能并不支持这个方法。
有了他们,你就可以让你的应用病毒式的传播起来了。
好了,看到这里,如果你想为你的应用接入到opensocial平台上来,相应应该很容易了吧。
最后再介绍一个使用的东西, 因为所有的xml都会被平台缓存24个小时,也就是说,你在修改了xml里面的内容后,可能不会马上生效,这是你就需要手动的清除平台对xml缓存。那么怎么做呢?
不同的平台,清除缓存的方法不一样。下面列举几个平台清除缓存的方法
1.Orkut.
如果您的应用的地址是http://xxxxx/xxx/xxx, 那么你只需要输入http://xxxxx/xxx/xxx&bpc=1.之后,你的修改就生效了
2.netlog
如果您的应用的地址是http://xxxxx/xxx/xxx, 那么你只需要输入http://xxxxx/xxx/xxx/flushXML=1.之后,你的修改就生效了
其他的平台,有的可能是http://xxxxx/xxx/xxx&nocache=1. 如果还是不对的话,最好找找他们的开发文旦,一般都有的。
OK.在完成以后的步骤后,基本上把一个social game接入到opensocial平台就完成了。 剩下的,就努力的推广应用吧! :)
转载于:https://www.cnblogs.com/junw_china/articles/1703430.html
使用opensocial接入social game相关推荐
- 接入amazon avs_每日新闻综述:亚马逊将互联网接入推向全球的宏伟计划
接入amazon avs Plus Snap's big push to stay relevant, Amazon's Alexa-powered AirPods alternatives, mor ...
- OpenSocial容器 shindig
shindig是apache的一个孵化器项目,实现了google的opensocial容器开源项目. 提供了一个开源的Open Social容器.有了它,就可以轻松支持Open Social啦,目前它 ...
- 开源 物联网接入_我们刚刚推出了开源产品。 那么接下来会发生什么呢?
开源 物联网接入 by Victor F. Santos 由Victor F.Santos 我们刚刚推出了开源产品. 那么接下来会发生什么呢? (We just launched an open so ...
- wordpress社会化登陆插件Open Social设置教程
终于忍不住要写点什么了,! 今天在安装open social插件的时候总是报错103001,也就是回调地址错误,另外就是用插件的小工具调用登陆模块总是影响网页布局,费了好大周折,最后把103001问题 ...
- Social Network之缘分
Facebook的早期创建不仅仅是创始人马克·扎克伯格一个人的功劳,他身处在哈佛大学,这里是个精英荟萃.天才云集的地方.而且很多人才都跨界,比如研究社会学的要做统计学定量研究,研究核物理的人有着出色的 ...
- APP接入Kakaotalk三方登录
Kakaotalk算是韩国国民级别的APP,只要做韩国移动APP,少不了Kakaotalk三方登录 IOS开发文档:https://developers.kakao.com/docs/latest/e ...
- 移动端免费可用的BaaS接入方案
转自:https://www.jianshu.com/p/ce0105768e92 说到BaaS,它是继IaaS.PaaS.SaaS等云服务后衍生出来的一类新的ToB服务体系,其全称为后端即服务(Ba ...
- 谷歌排行榜接入---独立类都给你,教你直接用
谷歌排行榜看了很多教程,大部分人只提了重点的:初始化,提交分数,显示排行榜的几个方法,很少有完整的可以直接导入项目直接使用的. 既然我已经做好,并且项目需要整理技术文档,索性就搞一篇文章 废话不说 安 ...
- SNS,全称Social Networking Services,即社会性网络服务
SNS,全称Social Networking Services,即社会性网络服务,专指旨在帮助人们建立社会性网络的互联网应用服务.也应加上目前社会现有已成熟普及的信息载体,如短信SMS服务. SNS ...
最新文章
- 小程序打开文档标题乱码处理
- linux socket 错误 Transport endpoint is not connected 在 recv shutdown 中的触发时机
- linux清理内存命令
- 任意输入一个整数反转输出
- fedora15换主题
- Codeforces Round #183 (Div. 2) C
- 二叉查找树(二)之 C++的实现
- 使用Storm实现实时大数据分析!
- java numberformat异常_Java NumberFormat格式化float类型的bug
- 2017 4月25日下午
- 【目标检测】Anchor-Free算法--CenterNet详解
- 千人千面之3D立体个人数据营销
- JBoss WildFly 7 连接到 ActiveMQ 5.9
- 360视频:二十面体投影ISP
- 按关键字自动分类文件
- 软件工程标准与软件文档
- jsonp跨域原理详解
- veu项目中引入jquery
- cms10——友情链接
- 谷仓(某校老师原创题)
热门文章
- FileTracker:error FTK1011编译错误的原因和解决办法
- Jquery Ajax +.ashx XML数据格式
- 通过程序实现文件下载更名,动态文件下载
- dpdk的无锁环形队列Ring
- DNS IP DOMAIN 详解
- (99)利用任务task实现单字节乘法功能,面试必问(二十三)(第20天)
- (94)FPGA模块例化传递参数(input)
- java两个小球相撞_JAVA小游戏之两个物体碰撞产生的碰撞检测
- python3有什么用_Python 3.9的到来到底是意味着什么
- STM32-GPIO篇