Unity 接入QQ、微信登陆授权ShareSDK

UnityQQ登陆接入 永久链接:http://blog.csdn.net/Aries_H/article/details/78133687

public void QQLogin()
    {
        //设置回掉函数
        shareSdk.authHandler = AuthResultHandler;

        //请求授权
        shareSdk.Authorize(PlatformType.QQ);
    }
 void AuthResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
    {
        //如果授权成功
        if (state == ResponseState.Success)
        {
             Debug.Log("authorize success !"+“授权成功!”);
        }
        else if (state == ResponseState.Fail)
        {
             Debug.Log("fail! throwable stack = " + result["stack"] + "; error msg = " + result["msg"]);
        }
        else if (state == ResponseState.Cancel)
        {
             Debug.Log("cancel !");
        }
    }

 

微信:https://blog.csdn.net/superficialtise/article/details/70208898

void Start()
    {
        shareSdk = GetComponent<ShareSDK>();
        //授权回调事件
        shareSdk.authHandler += AuthResultHandler;
        //用户信息事件
        shareSdk.showUserHandler += GetUserInfoResultHandler;
    }
    //授权
    public void OnAuthClick()
    {
        //请求微信授权//请求这个授权是为了获取用户信息来第三方登录
        shareSdk.Authorize(PlatformType.WeChat);
    }
    //授权结果回调
    void AuthResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
    {
        if (state == ResponseState.Success)
        {
            message.text = ("authorize success !");
            //授权成功的话,获取用户信息
            shareSdk.GetUserInfo(type);
        }
        else if (state == ResponseState.Fail)
        {
            message.text = ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
        }
        else if (state == ResponseState.Cancel)
        {
            message.text = ("cancel !");
        }
    }
    //获取用户信息
    void GetUserInfoResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
    {
        if (state == ResponseState.Success)
        {
            //获取成功的话 可以写一个类放不同平台的结构体,用PlatformType来判断,用户的Json转化成结构体,来做第三方登录。
            switch (type)
            {
                case PlatformType.WeChat:
                    message.text = (MiniJSON.jsonEncode(result));  //Json
                    break;
            }
        }
        else if (state == ResponseState.Fail)
        {
            message.text = ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);
        }
        else if (state == ResponseState.Cancel)
        {
            message.text = ("cancel !");
        }
    }

AppID的信息需要注册 QQ: http://open.qq.com/  微信:http://open.weixin.qq.com/

 

首先说明,本人纯新手,不动Android也不懂iOS,作为一个这样的新手,在Unity里面实现微信登录真是费了不少劲,好在ShareSDK给集成了很多东西,就这样还是走了很多很多的弯路,为了避免后面的同学再次走弯路,我决定写下这篇博客记录下详细过程!

 

第一步:去微信开放平台申请你的应用

地址:http://open.weixin.qq.com/

创建移动应用等待审核,然后注册成为开发者,此步骤我不在细讲,这个很简单申请成功之后是这样的:

会提示你已通过,记下AppID和AppSecret这两个,以后会用到,当然你想要实现分享和登录功能需要再次申请开通接口

下面会有包名和签名

记下包名,以后也会用到。

 

 

第二步:接入ShareSDK

先去ShareSDK注册一下获取你的ShareSDK中的AppID

官网:http://www.mob.com/

 

注册成功之后点击进入后台

 

然后点击这个你就会看见这个ShareSDK点进去然后概况下面有App Key

 

记下这个App Key后面也会用到

 

然后下载Demo体验包,包我会在下面提供下载地址,避免大家走弯路

 

下载完之后是一个压缩文件:

 

文件结构是一个Unity工程和一个apk安装包

 

解压之后用Unity打开这个Unity工程

 

选择你刚才解压的路径打开这个工程

 

如果版本不符的话点下Continue就可以了,但不建议使用5.3.5以下的版本,因为有可能会出现意想不到的bug

 

打开之后是QQ登录和QQ分享,不要急往下看

 

接下来该修改你的东西了首先点下Main Camera看脚本

 

有个ShareSDK的脚本,着重看四个地方

1:AppKey

2:WeChat AppID

3:wechat AppSecret

4:BypassApproval

 

上面说的4个地方都是需要改的

第一处:改成你的SheraSDK的App Key刚才记下的

第二处:改成刚才记下的微信AppID

第三处:改成刚才记下的微信AppSecret

第四处:BypassApproval这个按钮点一下 处于不激活状态

 

上面四个地方改过之后就要修改脚本了

打开SheraDemo脚本修改由于不能贴太多图片我直接上代码,可直接替换!

  1. using UnityEngine;

  2. using System.Collections;

  3. using UnityEngine.UI;

  4. using cn.sharesdk.unity3d; //导入ShareSdk

  5.  
  6. public class ShareDemo : MonoBehaviour {

  7.  
  8. private ShareSDK shareSdk;

  9. public Text message;

  10. void Start () {

  11. shareSdk = GetComponent<ShareSDK>();

  12. //分享回调事件

  13. shareSdk.shareHandler += ShareResultHandler;

  14. //授权回调事件

  15. shareSdk.authHandler += AuthResultHandler;

  16. //用户信息事件

  17. shareSdk.showUserHandler += GetUserInfoResultHandler;

  18. }

  19. //分享

  20. public void OnShareClick()

  21. {

  22. ShareContent content = new ShareContent();

  23. //这个地方要参考不同平台需要的参数 可以看ShareSDK提供的 分享内容参数表.docx

  24. content.SetText("快来和我一起玩这个游戏吧!"); //分享文字

  25. content.SetImageUrl("https://f1.webshare.mob.com/code/demo/img/4.jpg"); //分享图片

  26. content.SetTitle("标题title"); //分享标题

  27. content.SetTitleUrl("http://www.qq.com");

  28. content.SetSite("Mob-ShareSDK");

  29. content.SetSiteUrl("http://www.mob.com");

  30. content.SetUrl("http://www.sina.com"); //分享网址

  31. content.SetComment("描述");

  32. content.SetMusicUrl("http://up.mcyt.net/md5/53/OTg1NjA5OQ_Qq4329912.mp3");//分享类型为音乐时用

  33. content.SetShareType(ContentType.Webpage);

  34. //shareSdk.ShowPlatformList(null, content, 100, 100); //弹出分享菜单选择列表

  35. shareSdk.ShowShareContentEditor(PlatformType.WeChat, content); //指定平台直接分享

  36. }

  37. // 分享结果回调

  38. void ShareResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)

  39. { //成功

  40. if (state == ResponseState.Success)

  41. {

  42. message.text =("share result :");

  43. message.text = (MiniJSON.jsonEncode(result));

  44. }

  45. //失败

  46. else if (state == ResponseState.Fail)

  47. {

  48. message.text = ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);

  49. }

  50. //关闭

  51. else if (state == ResponseState.Cancel)

  52. {

  53. message.text = ("cancel !");

  54. }

  55. }

  56. //授权

  57. public void OnAuthClick()

  58. {

  59. //请求微信授权//请求这个授权是为了获取用户信息来第三方登录

  60. shareSdk.Authorize(PlatformType.WeChat);

  61. }

  62. //授权结果回调

  63. void AuthResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)

  64. {

  65. if (state == ResponseState.Success)

  66. {

  67. message.text = ("authorize success !");

  68.  
  69. //授权成功的话,获取用户信息

  70. shareSdk.GetUserInfo(type);

  71. }

  72. else if (state == ResponseState.Fail)

  73. {

  74. message.text = ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);

  75. }

  76. else if (state == ResponseState.Cancel)

  77. {

  78. message.text = ("cancel !");

  79. }

  80. }

  81. //获取用户信息

  82. void GetUserInfoResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)

  83. {

  84. if (state == ResponseState.Success)

  85. {

  86. //获取成功的话 可以写一个类放不同平台的结构体,用PlatformType来判断,用户的Json转化成结构体,来做第三方登录。

  87. switch (type)

  88. {

  89. case PlatformType.WeChat:

  90. message.text = (MiniJSON.jsonEncode(result)); //Json

  91.  
  92. break;

  93. }

  94. }

  95. else if (state == ResponseState.Fail)

  96. {

  97. message.text = ("fail! error code = " + result["error_code"] + "; error msg = " + result["error_msg"]);

  98. }

  99. else if (state == ResponseState.Cancel)

  100. {

  101. message.text = ("cancel !");

  102. }

  103. }

  104. }

  105.  
  106. /*

  107.  
  108. //QQ用户信息结构体

  109. struct QQUser

  110. {

  111. public string yellow_vip_level;

  112. public string msg;

  113. public string province;

  114. public string gender;

  115. public string is_yellow_year_vip;

  116. public int is_lost;

  117. public string nickname;

  118. public int ret;

  119. public string level;

  120. public string city;

  121. public string figureurl;

  122. public string figureurl_1;

  123. public string figureurl_2;

  124. public string figureurl_qq_1;

  125. public string figureurl_qq_2;

  126. public string vip;

  127. public string is_yellow_vip;

  128. }

  129. */

改完之后保存这个脚本

然后打开你的Unity工程下面的Plugins\Android\ShareSDK\AndroidManifest 这个文件修改成如下样式:吧com.xxxx.xxxx换成你的包名即可

  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"

  2. package="com.xxxx.xxxx"

  3. android:versionCode="2"

  4. android:versionName="2.0" >

  5.  
  6. <uses-permission android:name="android.permission.GET_TASKS" />

  7. <uses-permission android:name="android.permission.INTERNET" />

  8. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

  9. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

  10. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

  11. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  12. <uses-permission android:name="android.permission.READ_PHONE_STATE" />

  13. <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>

  14. <uses-permission android:name="android.permission.GET_ACCOUNTS"/>

  15. <!-- 蓝牙分享所需的权限 -->

  16. <uses-permission android:name="android.permission.BLUETOOTH" />

  17. <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

  18.  
  19. <uses-sdk

  20. android:minSdkVersion="8"

  21. android:targetSdkVersion="17" />

  22.  
  23. <application>

  24. <activity

  25. android:name="com.mob.tools.MobUIShell"

  26. android:configChanges="keyboardHidden|orientation|screenSize"

  27. android:theme="@android:style/Theme.Translucent.NoTitleBar"

  28. android:windowSoftInputMode="stateHidden|adjustResize" >

  29.  
  30. <!--

  31. 如果集成QQ分享,或者使用QQ客户端来进行QQ空间的分享,须要在此处添加一个对ACTION_VIEW

  32. 事件的过滤器,其中的scheme是“tencent”前缀再开发者应用的加上appId。如果此过滤器不设置,

  33. 则分享结束以后不能得到正确的回调

  34. -->

  35. <intent-filter android:priority="1000" >

  36. <data android:scheme="tencent100371282" />

  37. <action android:name="android.intent.action.VIEW" />

  38. <category android:name="android.intent.category.DEFAULT" />

  39. <category android:name="android.intent.category.BROWSABLE" />

  40. </intent-filter>

  41. <!-- 新浪回调 -->

  42. <intent-filter>

  43. <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />

  44. <category android:name="android.intent.category.DEFAULT" />

  45. </intent-filter>

  46. </activity>

  47.  
  48. <!-- 微信分享回调 -->

  49. <activity

  50. android:name="com.xxxx.xxxx.wxapi.WXEntryActivity"

  51. android:theme="@android:style/Theme.Translucent.NoTitleBar"

  52. android:configChanges="keyboardHidden|orientation|screenSize"

  53. android:exported="true" />

  54. <!-- 易信分享回调 -->

  55. <activity

  56. android:name=".yxapi.YXEntryActivity"

  57. android:theme="@android:style/Theme.Translucent.NoTitleBar"

  58. android:configChanges="keyboardHidden|orientation|screenSize"

  59. android:excludeFromRecents="true"

  60. android:exported="true"

  61. android:launchMode="singleTop" />

  62. <!-- 支付宝分享回调 -->

  63. <activity

  64. android:name=".apshare.ShareEntryActivity"

  65. android:theme="@android:style/Theme.Translucent.NoTitleBar"

  66. android:configChanges="keyboardHidden|orientation|screenSize"

  67. android:exported="true"/>

  68.  
  69. </application>

  70.  
  71. </manifest>

这样其实已经可以了 但是保险起见打开SheraSDKDevInfo脚本修所有用中文标注的 "你的微信AppID"  和  "你的微信AppSecret"  的地方AppID和AppSecret修改后保存

  1. using UnityEngine;

  2. using System.Collections;

  3. using System;

  4.  
  5. namespace cn.sharesdk.unity3d

  6. {

  7. [Serializable]

  8. public class DevInfoSet

  9.  
  10. {

  11. public WeChat wechat;

  12. }

  13.  
  14. public class DevInfo

  15. {

  16. public bool Enable = true;

  17. }

  18.  
  19. [Serializable]

  20. public class WeChat : DevInfo

  21. {

  22. #if UNITY_ANDROID

  23. public string SortId = "5";

  24. public const int type = (int) PlatformType.WeChat;

  25. public string AppId = "你的微信AppID";

  26. public string AppSecret = "你的微信AppSecret";

  27. public bool BypassApproval = true;

  28. #elif UNITY_IPHONE

  29. public const int type = (int) PlatformType.WeChat;

  30. public string app_id = "你的微信AppID";

  31. public string app_secret = "你的微信AppSecret";

  32. #endif

  33. }

  34.  
  35. [Serializable]

  36. public class WeChatMoments : DevInfo

  37. {

  38. #if UNITY_ANDROID

  39. public string SortId = "6";

  40. public const int type = (int) PlatformType.WeChatMoments;

  41. public string AppId = "你的微信AppID";

  42. public string AppSecret = "你的微信AppSecret";

  43. public bool BypassApproval = false;

  44. #elif UNITY_IPHONE

  45. public const int type = (int) PlatformType.WeChatMoments;

  46. public string app_id = "你的微信AppID";

  47. public string app_secret = "你的微信AppSecret";

  48. #endif

  49. }

  50.  
  51. [Serializable]

  52. public class WeChatFavorites : DevInfo

  53. {

  54. #if UNITY_ANDROID

  55. public string SortId = "7";

  56. public const int type = (int) PlatformType.WeChatFavorites;

  57. public string AppId = "你的微信AppID";

  58. public string AppSecret = "你的微信AppSecret";

  59. #elif UNITY_IPHONE

  60. public const int type = (int) PlatformType.WeChatFavorites;

  61. public string app_id = "你的微信AppID";

  62. public string app_secret = "你的微信AppSecret";

  63. #endif

  64. }

  65.  
  66. [Serializable]

  67. public class WechatSeries : DevInfo

  68. {

  69. #if UNITY_ANDROID

  70. //for android,please set the configuraion in class "Wechat" ,class "WechatMoments" or class "WechatFavorite"

  71. //对于安卓端,请在类Wechat,WechatMoments或WechatFavorite中配置相关信息↑

  72. #elif UNITY_IPHONE

  73. public const int type = (int) PlatformType.WechatPlatform;

  74. public string app_id = "你的微信AppID";

  75. public string app_secret = "你的微信AppSecret";

  76. #endif

  77. }

  78. }

 

这一步完成就差不多大工告成了,接下来打包打成安卓包,注意修改你的包名

 

打包不在详细的说打出来安装到你的安卓手机上就行了点运行 分享和登录就这样完成了 GoodLuck!

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值