Unity实现微信登录使用ShareSDK(转载)

首先说明,本人纯新手,不动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. public class ShareDemo : MonoBehaviour {
  6. private ShareSDK shareSdk;
  7. public Text message;
  8. void Start () {
  9. shareSdk = GetComponent<ShareSDK>();
  10. //分享回调事件
  11. shareSdk.shareHandler += ShareResultHandler;
  12. //授权回调事件
  13. shareSdk.authHandler += AuthResultHandler;
  14. //用户信息事件
  15. shareSdk.showUserHandler += GetUserInfoResultHandler;
  16. }
  17. //分享
  18. public void OnShareClick()
  19. {
  20. ShareContent content = new ShareContent();
  21. //这个地方要参考不同平台需要的参数 可以看ShareSDK提供的 分享内容参数表.docx
  22. content.SetText( "快来和我一起玩这个游戏吧!"); //分享文字
  23. content.SetImageUrl( "https://f1.webshare.mob.com/code/demo/img/4.jpg"); //分享图片
  24. content.SetTitle( "标题title"); //分享标题
  25. content.SetTitleUrl( "http://www.qq.com");
  26. content.SetSite( "Mob-ShareSDK");
  27. content.SetSiteUrl( "http://www.mob.com");
  28. content.SetUrl( "http://www.sina.com"); //分享网址
  29. content.SetComment( "描述");
  30. content.SetMusicUrl( "http://up.mcyt.net/md5/53/OTg1NjA5OQ_Qq4329912.mp3"); //分享类型为音乐时用
  31. content.SetShareType(ContentType.Webpage);
  32. //shareSdk.ShowPlatformList(null, content, 100, 100); //弹出分享菜单选择列表
  33. shareSdk.ShowShareContentEditor(PlatformType.WeChat, content); //指定平台直接分享
  34. }
  35. // 分享结果回调
  36. void ShareResultHandler (int reqID, ResponseState state, PlatformType type, Hashtable result)
  37. { //成功
  38. if (state == ResponseState.Success)
  39. {
  40. message.text =( "share result :");
  41. message.text = (MiniJSON.jsonEncode(result));
  42. }
  43. //失败
  44. else if (state == ResponseState.Fail)
  45. {
  46. message.text = ( "fail! error code = " + result[ "error_code"] + "; error msg = " + result[ "error_msg"]);
  47. }
  48. //关闭
  49. else if (state == ResponseState.Cancel)
  50. {
  51. message.text = ( "cancel !");
  52. }
  53. }
  54. //授权
  55. public void OnAuthClick()
  56. {
  57. //请求微信授权//请求这个授权是为了获取用户信息来第三方登录
  58. shareSdk.Authorize(PlatformType.WeChat);
  59. }
  60. //授权结果回调
  61. void AuthResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
  62. {
  63. if (state == ResponseState.Success)
  64. {
  65. message.text = ( "authorize success !");
  66. //授权成功的话,获取用户信息
  67. shareSdk.GetUserInfo(type);
  68. }
  69. else if (state == ResponseState.Fail)
  70. {
  71. message.text = ( "fail! error code = " + result[ "error_code"] + "; error msg = " + result[ "error_msg"]);
  72. }
  73. else if (state == ResponseState.Cancel)
  74. {
  75. message.text = ( "cancel !");
  76. }
  77. }
  78. //获取用户信息
  79. void GetUserInfoResultHandler(int reqID, ResponseState state, PlatformType type, Hashtable result)
  80. {
  81. if (state == ResponseState.Success)
  82. {
  83. //获取成功的话 可以写一个类放不同平台的结构体,用PlatformType来判断,用户的Json转化成结构体,来做第三方登录。
  84. switch (type)
  85. {
  86. case PlatformType.WeChat:
  87. message.text = (MiniJSON.jsonEncode(result)); //Json
  88. break;
  89. }
  90. }
  91. else if (state == ResponseState.Fail)
  92. {
  93. message.text = ( "fail! error code = " + result[ "error_code"] + "; error msg = " + result[ "error_msg"]);
  94. }
  95. else if (state == ResponseState.Cancel)
  96. {
  97. message.text = ( "cancel !");
  98. }
  99. }
  100. }
  101. /*
  102. //QQ用户信息结构体
  103. struct QQUser
  104. {
  105. public string yellow_vip_level;
  106. public string msg;
  107. public string province;
  108. public string gender;
  109. public string is_yellow_year_vip;
  110. public int is_lost;
  111. public string nickname;
  112. public int ret;
  113. public string level;
  114. public string city;
  115. public string figureurl;
  116. public string figureurl_1;
  117. public string figureurl_2;
  118. public string figureurl_qq_1;
  119. public string figureurl_qq_2;
  120. public string vip;
  121. public string is_yellow_vip;
  122. }
  123. */


改完之后保存这个脚本



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



<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xxxx.xxxx"
    android:versionCode="2"
    android:versionName="2.0" >

    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <!-- 蓝牙分享所需的权限 -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application>
        <activity
            android:name="com.mob.tools.MobUIShell"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:windowSoftInputMode="stateHidden|adjustResize" >
			
            <!--
            	如果集成QQ分享,或者使用QQ客户端来进行QQ空间的分享,须要在此处添加一个对ACTION_VIEW
            	事件的过滤器,其中的scheme是“tencent”前缀再开发者应用的加上appId。如果此过滤器不设置,
            	则分享结束以后不能得到正确的回调
            -->
            <intent-filter android:priority="1000" >
                <data android:scheme="tencent100371282" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>
		 	<!-- 新浪回调 -->
            <intent-filter>
				<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
				<category android:name="android.intent.category.DEFAULT" />
			</intent-filter>
        </activity>
		
        <!-- 微信分享回调 -->
        <activity
            android:name="com.xxxx.xxxx.wxapi.WXEntryActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true" />
        <!-- 易信分享回调 -->
        <activity
            android:name=".yxapi.YXEntryActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:excludeFromRecents="true"
            android:exported="true"
            android:launchMode="singleTop" />			
        <!-- 支付宝分享回调 -->
        <activity
            android:name=".apshare.ShareEntryActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"/>
				
    </application>

</manifest>



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



  1. using UnityEngine;
  2. using System.Collections;
  3. using System;
  4. namespace cn.sharesdk.unity3d
  5. {
  6. [ Serializable]
  7. public class DevInfoSet
  8. {
  9. public WeChat wechat;
  10. }
  11. public class DevInfo
  12. {
  13. public bool Enable = true;
  14. }
  15. [ Serializable]
  16. public class WeChat : DevInfo
  17. {
  18. #if UNITY_ANDROID
  19. public string SortId = "5";
  20. public const int type = ( int) PlatformType.WeChat;
  21. public string AppId = "你的微信AppID";
  22. public string AppSecret = "你的微信AppSecret";
  23. public bool BypassApproval = true;
  24. #elif UNITY_IPHONE
  25. public const int type = ( int) PlatformType.WeChat;
  26. public string app_id = "你的微信AppID";
  27. public string app_secret = "你的微信AppSecret";
  28. #endif
  29. }
  30. [ Serializable]
  31. public class WeChatMoments : DevInfo
  32. {
  33. #if UNITY_ANDROID
  34. public string SortId = "6";
  35. public const int type = ( int) PlatformType.WeChatMoments;
  36. public string AppId = "你的微信AppID";
  37. public string AppSecret = "你的微信AppSecret";
  38. public bool BypassApproval = false;
  39. #elif UNITY_IPHONE
  40. public const int type = ( int) PlatformType.WeChatMoments;
  41. public string app_id = "你的微信AppID";
  42. public string app_secret = "你的微信AppSecret";
  43. #endif
  44. }
  45. [ Serializable]
  46. public class WeChatFavorites : DevInfo
  47. {
  48. #if UNITY_ANDROID
  49. public string SortId = "7";
  50. public const int type = ( int) PlatformType.WeChatFavorites;
  51. public string AppId = "你的微信AppID";
  52. public string AppSecret = "你的微信AppSecret";
  53. #elif UNITY_IPHONE
  54. public const int type = ( int) PlatformType.WeChatFavorites;
  55. public string app_id = "你的微信AppID";
  56. public string app_secret = "你的微信AppSecret";
  57. #endif
  58. }
  59. [ Serializable]
  60. public class WechatSeries : DevInfo
  61. {
  62. #if UNITY_ANDROID
  63. //for android,please set the configuraion in class "Wechat" ,class "WechatMoments" or class "WechatFavorite"
  64. //对于安卓端,请在类Wechat,WechatMoments或WechatFavorite中配置相关信息↑
  65. #elif UNITY_IPHONE
  66. public const int type = ( int) PlatformType.WechatPlatform;
  67. public string app_id = "你的微信AppID";
  68. public string app_secret = "你的微信AppSecret";
  69. #endif
  70. }
  71. }

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


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


Demo包下载地址:链接:http://pan.baidu.com/s/1kU51qkB 密码:zze6

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页