最近因为公司的项目需要添加一些实用性的功能,需要添加第三方登录及分享,采用的是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、微信及微博第三方登录及定制内容分享(附代码)的更多相关文章

  1. 使用ShareSDK完成第三方(QQ、微信、微博)登录和分享

    这几天遇到一个需求:做第三方登录和分享.遇到了一些坑,把整个过程整理记录下来,方便他人,同时也捋一下思路. 当时考虑过把每个平台的SDK下载下来,一个一个弄,一番取舍后决定还是用ShareSDK.这里 ...

  2. 带三方登录(qq,微信,微博)

    实现QQ.微信.新浪微博和百度第三方登录(Android Studio) 前言:  对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于 ...

  3. 【WEB开发】微信网页授权第三方登录接口(WEB登录)

    随着手机微信的崛起,腾讯发布的微信联登确实很诱惑pc端的伙伴们,现在就说说在pc端用微信扫一扫实现微信第三方登陆的方式.(具体代码U盘) 本文链接至:http://blog.csdn.net/hxke ...

  4. 微信jssdk分享(附代码)

    老规矩---demo图: (注释:微信分享只支持右上角三个点触发) ======> 老规矩上菜: 1. 这边我封装了  share.js function allSharefun(param) ...

  5. (转)js-分享功能(qq,微信,微博)

    //1 分享QQ好友 function qq(title,url,pic)     {         var p = {             url: 'http://test.qicheyit ...

  6. swift-sharesdk集成微信、Facebook第三方登录

    好久没有写博客了.最近忙得没有时间更新博客,很忙很忙. 今天就把自己做过的第三方集成和大家分享一下,请大家多多指教. 第一步: 一.获取AppKey(去官方平台注册) 二.下载SDK 三.快速集成 第 ...

  7. Python 第三方登录 实现QQ 微信 微博 登录

    本人写的AgentLogin,能快速返回QQ.微信.微博第三方用户名信息,主要用于快速登录 用 pip命令安装 pip install AgentLogin 用法 : 导入这个包 from Agent ...

  8. 【Demo】QQ,github,微博第三方社交登录

    本文主要讲解 集成 第三方社交账号登录 为什么会有这个需求? 主要是因为目前互联网的网站数量太多,如果在各个站点都注册一个账号 用户非常不容易记住每个账号的用户名和密码,并且非常难保证每个账号的密码足 ...

  9. 解决微信公众号授权登录和开放平台微信第三方应用授权登录获取到的用户Openid关联问题

    开发背景: 最近一段时间一直在做关于微信方面的网站应用开发,这段时间也收获的不少关于微信开发方面的开发技能,接触的比较多的主要有微信公众号和微信网站app第三方登录授权,以及微信会员卡,优惠券和扫描二 ...

随机推荐

  1. 【luogu P1373 小a和uim之大逃离】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1373 想不出来状态 看了一眼题解状态明白了 dp[i][j][h][1/0] 表示在i,j点差值为h是小A还 ...

  2. LOG算子

    原文:http://blog.csdn.net/songzitea/article/details/12851079 背景引言 在博文差分近似图像导数算子之Laplace算子中,我们提到Laplace ...

  3. linux内核追踪(trace)(QEMU+gdb)

    1.引言 Linux内核是一个很大的模块,如果只是看源码有时会难以理解Linux内核的一些代码设计情况,如果可以结合Linux内核运行同时阅读源码再好不过,本文大致介绍Linux内核追踪方式,采用工具 ...

  4. 使用ant design组件时,Select设置mode="multiple"或mode="tags"时遇到问题:Uncaught Error: must set key for <rc-animate> children

    import {Select} from 'antd'; <Select className={styles.edit_area_dialog_table_select_input_layout ...

  5. 关于javascript中call()和apply()方法的总结

    前段时间在使用javascript的过程中遇到了继承的问题,自己顺便就对call()和apply()方法进行了了解. 两个方法的共同之处:这两个方法作用相同,都用来改变当前函数调用的对象,即改变thi ...

  6. jQuery的$.get()函数不执行以及php端报错Uncaught Error: Call to a member function bind_param() on boolean in...

    写了一个html,用到了jQuery,发现没有按照预期的结果显示,最后定位到是$.get()函数没有运行 调试过程为: 在页面右击查看元素,到网络那一栏,找到类型为json的那个包点击,然后查看响应, ...

  7. java Clob类型 转String

    1.我的数据库是oracle11g 遇到取出来的字段是clob类型,但是所需要的是string类型,写一个转换函数就可以解决问题了. // Clob类型 转String public String C ...

  8. 大数据学习--day15(常用类:Date--DateFormat--SimpleDateFormat--File--包装类)

    常用类:Date--DateFormat--SimpleDateFormat--File--包装类 这些常用类就不像字符串挖那么深了,只列列用法. 时间处理: /** * 时间处理类 * DateFo ...

  9. A1070

    给出总价和需求量,求最大收益. 思路:求单价最高的,排序. #include<cstdio> #include<algorithm> using namespace std; ...

  10. (数据科学学习手札51)用pymysql来操控MySQL数据库

    一.简介 pymysql是Python中专门用来操控MySQL数据库的模块,通过pymysql,可以编写简短的脚本来方便快捷地操控MySQL数据库,本文就将针对pymysql的基本功能进行介绍: 二. ...