Unity利用Share SDK实现QQ、微信及微博第三方登录及定制内容分享(附代码)
最近因为公司的项目需要添加一些实用性的功能,需要添加第三方登录及分享,采用的是Mob的SDK,可以先到其官网下载对应的SDK 点击这里,为了方便后期进行数据统计和分析,所以可以先添加一个应用,添加成功后,就可以获取到对应的AppKey和App Secret,这两个东西稍后需要用到。
准备工作
打开Unity,创建一个空的2D项目,因为只是用来测试第三方登录及分享,所以可以不需要创建3D项目。然后把我们刚刚下载的Share SDK导入。导入完成后在Project下就会出现一个Plugins文件,这里面就是包含的是Mob为我们封装好的Android和iOS的一些接口,不需要过多的去探究,只要会用就行。然后随便选择场景中一个物体,为它添加Share SDK组建,即在Inspector面板点击AddComponent添加Share SDK脚本,然后将Mob官网上申请的应用的App Key及AppSecret替换组建上原有的数据。接下来我利用UGUI搭建了一个简单的UI界面,用来实现登录及分享功能。因为要发布到移动端测试,所以我做了一个假的控制台用来输出信息,以便Debug使用。
1、首先先说最简单的QQ分享及第三方登录
进行QQ第三方登录时,需要先到QQ互联官网上申请一个自己的应用,如果只是为了测试功能,也可以不申请,直接使用Mob默认的Appid及AppSecret。接下来就是写代码了,很简单。新建一个用来测试的脚本,我这里叫Login,先在Start中获取到对应的按钮引用,QQ登录的代码如下。
/// <summary>
/// 退出按钮
/// </summary>
private Button exitBtn;
/// <summary>
/// QQ按钮
/// </summary>
private Button QQBtn;
/// <summary>
/// 微信按钮
/// </summary>
private Button weixinBtn;
/// <summary>
/// 微博按钮
/// </summary>
private Button weiboBtn;
/// <summary>
/// 分享按钮
/// </summary>
private Button ShareBtn;
/// <summary>
/// 用户名输入框
/// </summary>
private InputField userName;
/// <summary>
/// 密码输入框
/// </summary>
private InputField passWord;
/// <summary>
/// SDK
/// </summary>
public ShareSDK ssdk;
/// <summary>
/// 控制台
/// </summary>
public Text text;
/// <summary>
/// 获取到的用户信息保存本地的文件名
/// </summary>
private string fileName;
/// <summary>
/// 获取到用户的头像保存到本地的文件名
/// </summary>
private string iconName;
/// <summary>
/// 可以分享的平台
/// </summary>
private PlatformType[] platforms; public void Start()
{
Debug.Log(ssdk);
platforms = new PlatformType[] { PlatformType.WeChat,PlatformType.WeChatFavorites,PlatformType.WeChatMoments,PlatformType.WechatPlatform,
PlatformType.QQ,PlatformType.QZone,PlatformType.SinaWeibo};
userName = transform.Find("UserName").GetComponentInChildren<InputField>();
passWord = transform.Find("PassWord").GetComponentInChildren<InputField>();
exitBtn = transform.Find("ExitBtn").GetComponent<Button>();
QQBtn = transform.Find("QQBtn").GetComponent<Button>();
weixinBtn = transform.Find("WeiXinBtn").GetComponent<Button>();
weiboBtn = transform.Find("WeiBoBtn").GetComponent<Button>();
ShareBtn = transform.Find("QQShareBtn").GetComponent<Button>(); exitBtn.onClick.AddListener(ExitButtonHandle);
QQBtn.onClick.AddListener(QQButtonHandle);
weixinBtn.onClick.AddListener(WeiXinButtonHandle);
weiboBtn.onClick.AddListener(WeiBoButtonHandle);
ShareBtn.onClick.AddListener(ShareButtonHandle);
}
/// <summary>
/// QQ登录
/// </summary>
private void QQButtonHandle()
{
Debug.Log("点击了QQ登录");
fileName = "/qq.json";
iconName = "/qqIcon.jpg";
if (File.Exists(Application.persistentDataPath + fileName))
return;
//注册登录回调事件
ssdk.authHandler = AuthHandler;
//确定向哪个平台进行第三方验证
ssdk.Authorize(PlatformType.QQ);
}
/// <summary>
/// 登录回调
/// </summary>
/// <param name="reqID"></param>
/// <param name="state"></param>
/// <param name="type"></param>
/// <param name="data"></param>
private void AuthHandler(int reqID, ResponseState state, PlatformType type, Hashtable data)
{
Debug.Log("回调函数");
if (state == ResponseState.Success)
{
JsonData userData = JsonMapper.ToObject(JsonMapper.ToJson(data));
SaveUserInfo(JsonMapper.ToJson(data));
string icon = userData["icon"].ToString();
StartCoroutine(DownUserIcon(icon));
text.text += "\n userid : " + userData["userID"] + "\n username : " + userData["nickname"] + "\n icon : " + userData["icon"];
text.text += "\n授权成功!!!";
userName.text = userData["nickname"].ToString(); }
else if (state == ResponseState.Fail)
{
text.text += "\n授权失败!!!";
}
}
/// <summary>
/// 分享
/// </summary>
private void ShareButtonHandle()
{
//分享的内容
ShareContent content = new ShareContent();
if (iconName != null)
content.SetImagePath(Application.persistentDataPath + iconName);
content.SetTitle(" 分享 ");
content.SetTitleUrl("https://www.baidu.com/");
content.SetText(" wecome ");
content.SetSite("Mob-ShareSDK");
content.SetSiteUrl("https://www.baidu.com/");
content.SetUrl("https://www.baidu.com/");
content.SetComment("test description");
content.SetMusicUrl("http://fjdx.sc.chinaz.com/Files/DownLoad/sound1/201807/10300.mp3");
content.SetShareType(ContentType.Webpage); Debug.Log(" ******* 001 ");
//注册分享回调事件
ssdk.shareHandler = ShareHandler;
//传递需要分享的平台及分享内容
ssdk.ShowPlatformList(platforms, content, 0, 0);
}
/// <summary>
/// 分享回调
/// </summary>
/// <param name="reqID"></param>
/// <param name="state"></param>
/// <param name="type"></param>
/// <param name="data"></param>
private void ShareHandler(int reqID, ResponseState state, PlatformType type, Hashtable data)
{
if (state == ResponseState.Success)
{
Debug.Log(" share is success ");
Debug.Log(JsonMapper.ToJson(data));
}
else if(state==ResponseState.Fail)
{
Debug.Log(" share is fail ");
}
}
/// <summary>
/// 将用户的头像下载
/// </summary>
/// <param name="icon"></param>
/// <returns></returns>
private IEnumerator DownUserIcon(string icon)
{
Debug.Log("开启协程进行资源下载");
WWW www = new WWW(icon);
yield return www;
FileStream stream = File.Create(Application.persistentDataPath + iconName);
Texture2D texture = new Texture2D(www.texture.width, www.texture.height);
www.LoadImageIntoTexture(texture);
byte[] bytes = texture.EncodeToJPG();
stream.Write(bytes, , bytes.Length);
stream.Close();
stream.Dispose();
}
/// <summary>
/// 将得到的用户信息保存
/// </summary>
/// <param name="jsonFile"></param>
private void SaveUserInfo(string jsonFile)
{
if (File.Exists(Application.persistentDataPath + "/" + fileName))
File.Delete(Application.persistentDataPath + "/" + fileName);
File.WriteAllText(Application.persistentDataPath + "/"+fileName, jsonFile);
}
在分享的方法中后面的两个参数
ssdk.ShowPlatformList(platforms, content, , );
如果去看源码的话,就会发现没有什么用的,所以传什么数字都可以,我觉得过于鸡肋,所以就将这两个参数删除了。实现上诉代码后,就可以进行测试了,第三方登录可以成功,且分享内容也没问题了。
2、微信第三方登录及分享
进行微信第三方登录及分享时,需要先到微信开放平台申请属于自己的应用,等待审核通过后,将获取到的Appid及App secret填入Share SDK对应的微信平台的配置信息处,不过前提是你必须是要在微信开放平台的开发者信息提交并且审核通过了,因为直接创建出来的应用没有第三方登录权限,还需要申请开通,而申请开通的话就需要开发者资格认证,不过微信的开发者资格认证需要3张毛爷爷,真的心疼。这些都弄好之后,得到的appid及App Secret才可以使用,不过分享是都可以的。在开始需要自己打一个属于自己的jar包,利用eclipse打开前面从Mob官网上下载的sdk包下的Android_Jave_Demo文件。
在eclipse中打开后,然后将cn.sharesdk.demo.apshare、cn.sharesdk.demo.wxapi、cn.sharesdk.demo.yxapi这三个包的包名改成自己包名,然后在src单击右键,选择导出,命名为DemoCallback.jar。
导出成功后,将Unity工程目录下的Plugins/Android/ShareSDK/libs下的Demo Callback替换为刚刚自己导出的jar。
接下来则是对微信登录及分享进行事件注册,代码和QQ的基本一样。分享和QQ采用的是同一个方法,就不重复写了
/// <summary>
/// 微信登录
/// </summary>
private void WeiXinButtonHandle()
{
Debug.Log("点击了微信登录");
fileName = "/wechat.json";
iconName = "/wechatIcon.jpg";
if (File.Exists(Application.persistentDataPath + fileName))
return;
ssdk.authHandler = AuthHandler;
ssdk.Authorize(PlatformType.WeChat);
}
微信分享及登录功能到此就结束了。
3、微博的登录及分享
微博跟微信是一样的,也需要到微博的开发者平台先进行注册及应用的申请,获取到应用的App ID及AppSecret,然后将其填写到微博对应的配置信息位置。微博登录代码如下,微博的分享功能也是直接和QQ的一样的,所以使用了同一个方法。微博登录可以只创建一个测试应用,然后不需要去申请审核,直接给这个应用添加测试账号,不过最多只能添加15个,不过如果只是测试的话,这些是够了的。然后就可以直接将得到的应用的App ID及AppSecret填入到对应位置即可。注:在填写安卓包名的时候,必须要跟项目的包名一致。
/// <summary>
/// 微博登录
/// </summary>
private void WeiBoButtonHandle()
{
Debug.Log("点击了微博登录");
fileName = "/sina.json";
iconName = "/sinaIcon.jpg";
if (File.Exists(Application.persistentDataPath + fileName))
return;
ssdk.authHandler = AuthHandler;
ssdk.Authorize(PlatformType.SinaWeibo);
}
到此为止,微博登录并没有实现,你会发现在登录的时候会出现21322错误,微博提示为重定向错误,这个是真的有点坑的。通过查找微博开放平台文档才明白了,我们需要到微博的后台管理平台,找到自己申请的应用,点击设置,进入到应用信息中的高级信息,在OAuth2.0授权设置中设置一个回调的网站,然后确定后即可,接下来是到Unity中在ShareSDK中的微博配置信息设置处的Redirect Url将刚刚设置的网站设置过来,这三个必须保持一致。


至此利用Mob实现Unity第三方登录就结束了,如果需要源码的可以到我的https://github.com/Iamdevelope/MobTest上获取。
由于都是自己在摸索,所以难免会有很多的不足及错误,如文中有BUG或者错误的地方,还望大神指出,在此谢过了!
Unity利用Share SDK实现QQ、微信及微博第三方登录及定制内容分享(附代码)的更多相关文章
- 使用ShareSDK完成第三方(QQ、微信、微博)登录和分享
这几天遇到一个需求:做第三方登录和分享.遇到了一些坑,把整个过程整理记录下来,方便他人,同时也捋一下思路. 当时考虑过把每个平台的SDK下载下来,一个一个弄,一番取舍后决定还是用ShareSDK.这里 ...
- 带三方登录(qq,微信,微博)
实现QQ.微信.新浪微博和百度第三方登录(Android Studio) 前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于 ...
- 【WEB开发】微信网页授权第三方登录接口(WEB登录)
随着手机微信的崛起,腾讯发布的微信联登确实很诱惑pc端的伙伴们,现在就说说在pc端用微信扫一扫实现微信第三方登陆的方式.(具体代码U盘) 本文链接至:http://blog.csdn.net/hxke ...
- 微信jssdk分享(附代码)
老规矩---demo图: (注释:微信分享只支持右上角三个点触发) ======> 老规矩上菜: 1. 这边我封装了 share.js function allSharefun(param) ...
- (转)js-分享功能(qq,微信,微博)
//1 分享QQ好友 function qq(title,url,pic) { var p = { url: 'http://test.qicheyit ...
- swift-sharesdk集成微信、Facebook第三方登录
好久没有写博客了.最近忙得没有时间更新博客,很忙很忙. 今天就把自己做过的第三方集成和大家分享一下,请大家多多指教. 第一步: 一.获取AppKey(去官方平台注册) 二.下载SDK 三.快速集成 第 ...
- Python 第三方登录 实现QQ 微信 微博 登录
本人写的AgentLogin,能快速返回QQ.微信.微博第三方用户名信息,主要用于快速登录 用 pip命令安装 pip install AgentLogin 用法 : 导入这个包 from Agent ...
- 【Demo】QQ,github,微博第三方社交登录
本文主要讲解 集成 第三方社交账号登录 为什么会有这个需求? 主要是因为目前互联网的网站数量太多,如果在各个站点都注册一个账号 用户非常不容易记住每个账号的用户名和密码,并且非常难保证每个账号的密码足 ...
- 解决微信公众号授权登录和开放平台微信第三方应用授权登录获取到的用户Openid关联问题
开发背景: 最近一段时间一直在做关于微信方面的网站应用开发,这段时间也收获的不少关于微信开发方面的开发技能,接触的比较多的主要有微信公众号和微信网站app第三方登录授权,以及微信会员卡,优惠券和扫描二 ...
随机推荐
- 【题解】洛谷P1080 [NOIP2012TG] 国王游戏(贪心+高精度)
次元传送门::洛谷P1080 思路 我们模拟一下只有两个大臣的时候发现 当a1∗b1<a2∗b2是ans1<ans2 所以我们对所有大臣关于左右手之积进行排序 得到最多钱的大臣就是 ...
- nRF5 SDK for Mesh(八) Exploring Mesh APIs using light switch example,使用 灯开关 案例探索BLE mesh 的APIS
Exploring Mesh APIs using light switch example The light switch example is meant to showcase the API ...
- nodejs运行的时候报错:Error: write EIO以及乱码解决方式
在运行node.js的过程中报如下错误: events.js:72 throw er; // Unhandled 'error' event ^ Error: write EIO at errnoEx ...
- 纸质文稿如何生成PDF
步骤: (1) 将即将要转换的文稿单张向下放入打印机. (2) 将打印设备(打印机)连接至你的电脑. (3) 打开控制面板,点击"查看设备和打印机". (4) 找到你当前的打印设备 ...
- Runtime - ② - NSObject类
首先,我们都知道NSObject是大多数类的根类,但是,这个类的是怎么实现的呢?我们可以去下载开源的Runtime源码,探究下NSObject类的实现. 1. NSObject.h文件 我们可以直接使 ...
- 复习宝典之Mysql数据库
查看更多宝典,请点击<金三银四,你的专属面试宝典> 第一章:mysql数据库 1)mysql与mariaDb MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用 ...
- Delphi 调试连接 任意Android手机/平板/盒子
Delphi有时候无法连接调试一些手机,解决方案: 1.安装Google USB Driver 2.通过设备管理器查看手机或平板USB的VID,PID 3.修改你的电脑上的android_winusb ...
- java.io.FileNotFoundException:file:\D:\code\xml-load\target\XX.jar!\XXX(文件名、目录名或卷标语法不正确。)
1.当使用Spring Boot将应用打成jar时,需要读取resources目录下配置文件时,通常使用ClassLoader直接读取,通常建议使用这种方式,直接将xml文件读成流传入 // 加载xm ...
- PTA(BasicLevel)-1010 一元多项式求导
一.题目和题意分析 设计函数求一元多项式的导数.x^n [n为整数] 的一阶导数为nx^(n−1). 输入格式: 以指数递降方式输入多项式非零项系数和指数(*绝对值均为不超过 1000 的整数*).数 ...
- 复数 一级ADT实现
COMPLEX.h /* typedef struct { float RE; //实部 float IM; //虚部 }Complex; */ typedef struct complex * Co ...