在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相关推荐

  1. 接入amazon avs_每日新闻综述:亚马逊将互联网接入推向全球的宏伟计划

    接入amazon avs Plus Snap's big push to stay relevant, Amazon's Alexa-powered AirPods alternatives, mor ...

  2. OpenSocial容器 shindig

    shindig是apache的一个孵化器项目,实现了google的opensocial容器开源项目. 提供了一个开源的Open Social容器.有了它,就可以轻松支持Open Social啦,目前它 ...

  3. 开源 物联网接入_我们刚刚推出了开源产品。 那么接下来会发生什么呢?

    开源 物联网接入 by Victor F. Santos 由Victor F.Santos 我们刚刚推出了开源产品. 那么接下来会发生什么呢? (We just launched an open so ...

  4. wordpress社会化登陆插件Open Social设置教程

    终于忍不住要写点什么了,! 今天在安装open social插件的时候总是报错103001,也就是回调地址错误,另外就是用插件的小工具调用登陆模块总是影响网页布局,费了好大周折,最后把103001问题 ...

  5. Social Network之缘分

    Facebook的早期创建不仅仅是创始人马克·扎克伯格一个人的功劳,他身处在哈佛大学,这里是个精英荟萃.天才云集的地方.而且很多人才都跨界,比如研究社会学的要做统计学定量研究,研究核物理的人有着出色的 ...

  6. APP接入Kakaotalk三方登录

    Kakaotalk算是韩国国民级别的APP,只要做韩国移动APP,少不了Kakaotalk三方登录 IOS开发文档:https://developers.kakao.com/docs/latest/e ...

  7. 移动端免费可用的BaaS接入方案

    转自:https://www.jianshu.com/p/ce0105768e92 说到BaaS,它是继IaaS.PaaS.SaaS等云服务后衍生出来的一类新的ToB服务体系,其全称为后端即服务(Ba ...

  8. 谷歌排行榜接入---独立类都给你,教你直接用

    谷歌排行榜看了很多教程,大部分人只提了重点的:初始化,提交分数,显示排行榜的几个方法,很少有完整的可以直接导入项目直接使用的. 既然我已经做好,并且项目需要整理技术文档,索性就搞一篇文章 废话不说 安 ...

  9. SNS,全称Social Networking Services,即社会性网络服务

    SNS,全称Social Networking Services,即社会性网络服务,专指旨在帮助人们建立社会性网络的互联网应用服务.也应加上目前社会现有已成熟普及的信息载体,如短信SMS服务. SNS ...

最新文章

  1. 小程序打开文档标题乱码处理
  2. linux socket 错误 Transport endpoint is not connected 在 recv shutdown 中的触发时机
  3. linux清理内存命令
  4. 任意输入一个整数反转输出
  5. fedora15换主题
  6. Codeforces Round #183 (Div. 2) C
  7. 二叉查找树(二)之 C++的实现
  8. 使用Storm实现实时大数据分析!
  9. java numberformat异常_Java NumberFormat格式化float类型的bug
  10. 2017 4月25日下午
  11. 【目标检测】Anchor-Free算法--CenterNet详解
  12. 千人千面之3D立体个人数据营销
  13. JBoss WildFly 7 连接到 ActiveMQ 5.9
  14. 360视频:二十面体投影ISP
  15. 按关键字自动分类文件
  16. 软件工程标准与软件文档
  17. jsonp跨域原理详解
  18. veu项目中引入jquery
  19. cms10——友情链接
  20. 谷仓(某校老师原创题)

热门文章

  1. FileTracker:error FTK1011编译错误的原因和解决办法
  2. Jquery Ajax +.ashx XML数据格式
  3. 通过程序实现文件下载更名,动态文件下载
  4. dpdk的无锁环形队列Ring
  5. DNS IP DOMAIN 详解
  6. (99)利用任务task实现单字节乘法功能,面试必问(二十三)(第20天)
  7. (94)FPGA模块例化传递参数(input)
  8. java两个小球相撞_JAVA小游戏之两个物体碰撞产生的碰撞检测
  9. python3有什么用_Python 3.9的到来到底是意味着什么
  10. STM32-GPIO篇