关于游戏中的分享之ShareSDK的研究
来源:互联网 发布:专家网络咨询公司排名 编辑:程序博客网 时间:2024/04/29 04:32
最近研究了一下ShareSDK,说实话挺好用的,不过也有人觉得挺坑的地方。下面具体总结一下这个如何用和该注意的地方。
很多游戏里有排行榜之类的分享啊之类的这个到底怎么做的呢?
第一步去 官网http://dashboard.mob.com去注册一下,点击头像进入后台,点分享传播的创建信息,获取自己的App Key和App Secret,下载sdk,这个sdk名是ShareSDK for Unity3d。
第二步 解压将里面的工程中的Unity3dDemo/Assets/Plugins目录拷贝到您的项目的Assets目录中。
第三步 挂接ShareSDK脚本。打开Plugins目录,将ShareSDK.cs脚本文件拖动到Main Camera对象中进行脚本挂接。
注意:如果ShareSDK.cs并非挂载在Main Camera对象或者Main Camera对象修改为其他名字时,需要调用ShareSDK. setCallbackObjectName设置回调对象名称。否则会导致需要回调的接口无法正常回调。
第四步 挂一个我们自己的测试脚本这里起名test.cs
脚本要求这些回调方法
//用户用户授权调用SDK中的authorize方法可进行用户授权回调方法 void AuthResultHandler(ResponseState state, PlatformType type, Hashtable error) { print(" =============== AuthResultHandler"); if (state == ResponseState.Success) { print("success !"); } else if (state == ResponseState.Fail) { print("fail! error code = " + error["error_code"] + "; error msg = " + error["error_msg"]); } else if (state == ResponseState.Cancel) { print("cancel !"); } } //获取用户资料,调用SDK中的getUserInfo方法可获取授权用户信息的回调方法 void GetUserInfoResultHandler(ResponseState state, PlatformType type, Hashtable user, Hashtable error) { print(" =============== GetUserInfoResultHandler"); if (state == ResponseState.Success) { print("get user result :"); print(MiniJSON.jsonEncode(user)); } else if (state == ResponseState.Fail) { print("fail! error code = " + error["error_code"] + "; error msg = " + error["error_msg"]); } else if (state == ResponseState.Cancel) { print("cancel !"); } } //将内容传入分享接口回调方法 /// <summary> /// 处理分享结果 /// </summary> /// <param name="state">结果的状态</param> /// <param name="type">平台</param> /// <param name="shareInfo">分享信息</param> /// <param name="error">错误</param> /// <param name="end">是否成功</param> void ShareResultHandler(ResponseState state, PlatformType type, Hashtable shareInfo, Hashtable error, bool end) { print(" =============== ShareResultHandler"); if (state == ResponseState.Success) { print("share result :"); print(MiniJSON.jsonEncode(shareInfo)); } else if (state == ResponseState.Fail) { print("fail! error code = " + error["error_code"] + "; error msg = " + error["error_msg"]); } else if (state == ResponseState.Cancel) { print("cancel !"); } } void GetFriendsResultHandler(ResponseState state, PlatformType type, ArrayList friends, Hashtable error) { print(" =============== GetFriendsResultHandler"); if (state == ResponseState.Success) { print("share result :"); print(MiniJSON.jsonEncode(friends)); } else if (state == ResponseState.Fail) { print("fail! error code = " + error["error_code"] + "; error msg = " + error["error_msg"]); } else if (state == ResponseState.Cancel) { print("cancel !"); } } void GetTokenResultHandler(ResponseState state, PlatformType type, Hashtable credential, Hashtable error) { print(" =============== GetTokenResultHandler"); if (state == ResponseState.Success) { print("share result :"); print(MiniJSON.jsonEncode(credential)); } else if (state == ResponseState.Fail) { print("fail! error code = " + error["error_code"] + "; error msg = " + error["error_msg"]); } else if (state == ResponseState.Cancel) { print("cancel !"); } }
这些都完事后我们的代码才刚刚开始。
首先引入头文件
using System;using System.Collections.Generic;using cn.sharesdk.unity3d;在Start()里进行一下初始化,这里我就以新浪微博为例:
//初始化SDK,设置回掉的游戏对象,这里写的是主相机,如果主相机改名了,请填写改名后的名字 ShareSDK.setCallbackObjectName("Main Camera"); ShareSDK.open("api20"); //初始化社交平台,这里的app_key和app_secret因为是测试所以就用官方发例子,这里就不去申请了 //iOS //Sina Weibo Hashtable sinaWeiboConf = new Hashtable(); sinaWeiboConf.Add("app_key", "3135616650"); sinaWeiboConf.Add("app_secret", "214976cdc97560b5571e9132bf6ae760"); sinaWeiboConf.Add("redirect_uri", "http://www.sharesdk.cn"); ShareSDK.setPlatformConfig(PlatformType.SinaWeibo, sinaWeiboConf);这里的api20要换成在官网上注册的App Key,
设置调用方法
public void ShareWeibo() { test.TryShareMessage(PlatformType.SinaWeibo,"Unity3D接入shardSdk 看看能不能成功。",ShareResultHandler); } //定义一个分享方法 public static void TryShareMessage(PlatformType type, string text, ShareResultEvent ShareResultHandler) { //string imagePath = Application.persistentDataPath + "/0.png"; Hashtable content = new Hashtable(); content["content"] = text; Application.CaptureScreenshot("screen.png");//截屏 content["image"] = Application.persistentDataPath + "/screen.png"; content["title"] = "华辉测试"; content["url"] = "http://jinghuizhiye.com"; content["type"] = Convert.ToString((int)ContentType.News); //用于获得结果的事件,不想获得,可以不写 ShareResultEvent evt = new ShareResultEvent(ShareResultHandler); ShareSDK.shareContent(type, content, evt); }
创建一个Button,将脚本挂上去。这样就可以分享了。。。
如果要是点分享分享到多个平台,代码就有例子里的
public void shareMenu() { Hashtable content = new Hashtable(); content["content"] = "this is a test string."; Application.CaptureScreenshot("screen.png"); content["image"] = Application.persistentDataPath + "/screen.png"; content["title"] = "test title"; content["description"] = "test description"; content["url"] = "http://www.mob.com"; content["type"] = Convert.ToString((int)ContentType.News); content["siteUrl"] = "http://www.mob.com"; content["site"] = "ShareSDK"; content["musicUrl"] = "http://mp3.mwap8.com/destdir/Music/2009/20090601/ZuiXuanMinZuFeng20090601119.mp3"; //开启,调用客户端授权 (only in android) content["disableSSOWhenAuthorize"] = true; content["shareTheme"] = "classic";//ShareTheme has only two value which are skyblue and classic ShareResultEvent evt = new ShareResultEvent(ShareResultHandler); ShareSDK.showShareMenu(null, content, 100, 100, MenuArrowDirection.Up, evt); }这里会把Share的所有的能分享的平台都提供链接,如果有的平台不想要怎么办?
在工程的lib文件里对应的平台的jar包给删除就可以了。
这里也出现了很多问题:
问题一如下
这个问题我咨询了一下客服,客服的解释是:
一、新浪sso授权报错sso package or sign error
1、 新浪微博开放平台应用没有审核通过,不能用sso登陆,否则报错
关闭sso登陆
Platform platform = ShareSDK.getPlatform(this, SinaWeibo.NAME);
platform.SSOSetting(true);
2、审核过了,然后再打包签名apk,
确保apk的MD5码要跟新浪审核时,提交的MD5码一致,才能调用sso登陆; 也就是说在新浪微博上填写的包名和签名要与您工程的包名和实际签名要一致;
什么意思呢?怎么能够测试成功呢?
其实就是应用没有通过审核,客户端走不了。将客户端卸载了,这样客户端就不走了走浏览器,这样就可以分享到微博了。
所以要去各个平台审核,审核通过后将key和需要secret替换掉。
问题二,我上面的图片是截屏分享的,要是分享一张本地图片就会有问题。这里有博客也说到了。
咨询一下技术客服,得出的解释就是 本地图片只能是sdcard中的图片地址。
如何解决?
//读、写的路径string imagePath = Application.persistentDataPath + "/0.png";//如果文件不存在,把它拷贝进去。if(!System.IO.File.Exists(imagePath)){Texture2D o = Resources.Load("0") as Texture2D;System.IO.File.WriteAllBytes(imagePath, o.EncodeToPNG());}分享的代码
//image的路径就可以直接写了。string imagePath = Application.persistentDataPath + "/0.png";if(System.IO.File.Exists(imagePath)){content["image"] = imagePath;}在Resource文件夹下放一个图片一定要PNG,这里在unity3d里图片格式改成RGBA。
我是用的是截屏
Application.CaptureScreenshot("screen.png");content["image"] =Application.persistentDataPath + "/screen.png";
问题三:关于微信的问题
这里对于微信的问题具体的解决有个链接http://bbs.mob.com/thread-36-1-1.html?fromuid=23921,就不多提了,注意一下绕过审核的问题。
问题四:ios打包问题这里要麻烦一点,ios打包后要用Xcode打开引入依赖库,具体看一下这个http://wiki.mob.com/快速集成指南/
客观的说,这里虽然有一些问题,但是还是挺好用的。
文档参考http://wiki.mob.com/Unity3D快速集成指南/
http://www.xuanyusong.com/?p=2620&preview=true
- 关于游戏中的分享之ShareSDK的研究
- 关于游戏中的分享之ShareSDK的研究续一
- 关于unity3d分享功能之ShareSDK的研究续二
- 关于ShareSDK的图文分享
- 关于ShareSDK分享的功能
- 关于微信ShareSDK的简单分享
- 关于分享公共库ShareSDK的用法
- 关于社会化分享ShareSDK的使用
- 关于sharesdk分享
- shareSDK 新浪的分享
- 关于shareSDK做社会化分享
- 关于ios分享(ShareSDK)
- 关于shareSDK微信分享
- 关于ShareSDK 微信分享
- 关于ShareSDK for Unity的分享界面修改
- 使用ShareSDK无法微信分享的解决方法,sharesdk分享
- ShareSDK自定义分享的面板
- shareSDK分享遇到的坑
- 使用指向指针的指针对字符串排序
- java环境变量配置
- 关于将本地项目push到github发生冲突的问题
- android Camera架构浅析
- Linux下安装qtcreator部分问题解决
- 关于游戏中的分享之ShareSDK的研究
- 杭电-1595find the longest of the shortest(记录路径最短路径中最长路)
- MySQL时间操作
- Gabor滤波器的生成
- 生成函数学习笔记
- iOS基础知识:文件流以及文件操作中的主要函数
- iOS应用程序拨打电话
- 手机摄像头介绍及其参数配置
- 容斥原理 数论