Unity3D 使用ShareSDK进行QQ授权登录

C#

浏览数:220

2019-8-30

关注公众号,获取更多干货。

二维码

下面是正文:

最近在研究第三方登录的问题,由于之前用过mob的东西,所以这次就直接去mob的官网看ShareSDK是支持第三方授权登录的,所以我就开始了搞一搞第三方登录的问题。
其中遇到了不少坑,所以写出一个小Demo,让新手们绕过这个坑,更快速的进入开发。
但是我建议大家还是多看看官方的Demo和API,这样下次使用才不会忘。

首先
官网:http://sharesdk.mob.com/

在SDK下载中下载ShareSDK for Unity


ShareSDK for Unity

然后下载Zip

下载Zip

下载后先创建工程

创建工程

然后按照我的个人习惯,创建出我自己的文件夹,方便与别人项目合并。

创建文件夹

将这个包导入工程

Import

导入后大家可能会发现有报错。

报错

大家不要慌,将平台切换为安卓即可。
在Build Setting下

Build Setting

准备工作就绪,大家现在该去官网注册一个账号,并且添加一个应用,得到AppKey与AppSecret

此处省略注册教程、、、

拿到AppKey与AppSecret,就可以在官网查看你的后台授权情况。

下面开始写代码了。

官方给出的Package中有Demo,而且注释也很清楚,自学能力强的朋友可以将Demo打包出来,然后看着Log一步一步去学习。

由于我不太喜欢GUI的脚本,所以我的代码写的都是UGUI的。

在贴我的代码之前,如果看了官方的Demo的应该知道,将刚刚申请下来的AppKey和AppSecret添加到ShareSDK的脚本中。

AppKey和AppSecret

下面就是我的脚本:
把别的东西都去掉了,只留了与QQ有用的东西。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using cn.sharesdk.unity3d;
using UnityEngine.UI;
using LitJson;

public class Aries_QQLogin : MonoBehaviour {

    /// <summary>
    /// ShareSDK
    /// </summary>
    private ShareSDK shareSdk;

    /// <summary>
    /// 为了防止有的朋友不方便看log,在这里做一个假的控制台
    /// </summary>
    public Text myConsole;

    private static Aries_QQLogin _Instance;


    /// <summary>
    /// 获取单例
    /// </summary>
    /// <returns></returns>
    public static Aries_QQLogin GetInstance()
    {
        if (null == _Instance)
        {
            _Instance = new Aries_QQLogin();
        }
        return _Instance;
    }

    /// <summary>
    /// 当前登录的QQ用户信息
    /// </summary>
    public QQuserInfo CurrentQQuserInfo;
    
    /// <summary>
    /// QQ用户信息
    /// 
    /// 说明:我只用到了四个属性,所以构造器只写了四个,如果用到更多可以自行增加
    /// </summary>
    public class QQuserInfo
    {
        /// <summary>
        /// 用户ID
        /// </summary>
        public string userID = "";

        /// <summary>
        /// 用户名
        /// </summary>
        public string userName = "";

        /// <summary>
        /// 用户头像
        /// </summary>
        public string userIcon = "";

        /// <summary>
        /// 用户记号
        /// </summary>
        public string token = "";


        public string refresh_token = "";
        public int openID;
        public int expiresIn;
        public string userGender = "";
        public string tokenSecret = "";
        public string unionID = "";
        public long expiresTime;

        public QQuserInfo()
        {
            
        }
        
        public QQuserInfo(string uID, string uName, string uIcon, string uToken)
        {
            this.userID = uID;
            this.userName = uName;
            this.userIcon = uIcon;
            this.token = uToken;
        }

    }

    void Start()
    {
        //获取ShareSDK
        shareSdk = GetComponent<ShareSDK>();
    }


    /// <summary>
    /// 用户授权  QQ
    /// </summary>
    public void QQLogin()
    {
        //设置回掉函数
        shareSdk.authHandler = AuthResultHandler;

        //请求授权
        shareSdk.Authorize(PlatformType.QQ);
    }

    /// <summary>
    /// 授权回掉
    /// </summary>
    /// <param name="reqID"></param>
    /// <param name="state"></param>
    /// <param name="type"></param>
    /// <param name="result"></param>
    void AuthResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
    {
        //如果授权成功
        if (state == ResponseState.Success)
        {
            print("authorize success !");

            //在控制台输出
            myConsole.text += "\n" + "authorize success !";

            Hashtable user = shareSdk.GetAuthInfo(PlatformType.QQ);

            print("get user info result =====================>:");
            print(MiniJSON.jsonEncode(user));

            JsonData jd = JsonMapper.ToObject(MiniJSON.jsonEncode(user));

            //实例化当前登录的QQ用户信息
            CurrentQQuserInfo = new QQuserInfo(jd["userID"].ToString(), jd["userName"].ToString(), jd["userIcon"].ToString(), jd["token"].ToString());

            //打印用户信息
            print("userID:" + CurrentQQuserInfo.userID + "===" + "userName:" + CurrentQQuserInfo.userName + "===" + "userIcon:" + CurrentQQuserInfo.userIcon + "===" +
                   "token:" + CurrentQQuserInfo.token);


            //在控制台输出
            myConsole.text += "\n" + "userID:" + CurrentQQuserInfo.userID + "===" + "userName:" +
                              CurrentQQuserInfo.userName + "===" + "userIcon:" + CurrentQQuserInfo.userIcon + "===" +
                              "token:" + CurrentQQuserInfo.token;


        }
        else if (state == ResponseState.Fail)
        {
            print("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
        }
        else if (state == ResponseState.Cancel)
        {
            print("cancel !");
        }
    }
}

在Android平台的运行截图:


Android平台的运行截图

收到了QQ用户的信息之后,大家就可以做与服务器交互、本地存储等等操作,在这里提示一下大家,用户的信息很宝贵,请做好加密处理。

下面是工程下载地址:http://download.csdn.net/download/aries_h/10001762
本文永久链接:http://blog.csdn.net/Aries_H/article/details/78133687

作者:Aries丶H