unity接入 微信登录sdk
首次吐槽一下,微信官方的文档真的是服了,各种坑,而且贼不详细,而且还只能原生接入,在做sdk给unity,对于不懂原生的小白来说简直噩梦啊!!!!为了接入恶补了一波原生
进入正题,首先还是要去注册账号,申请应用位,按照官方文档做就行了,哟啊拿到APPID,sercet,还有你打包apk的 签名,签名的获取官方也有说明不多说,直接进入接入部分
首先,对于安卓和unity交互不懂的可以自行百度,你会发现各种说法都有,我采取了这个verynice:
- 交互优化版本
流程还是很详细的,跟着做就行了。当你熟悉了交互原理,然后开始接入
首先是基于Androidstudio的,不是eslipe,其实差不多
第一步,要自己创建activity,继承自 UnityPlayerActivity,在这个类一遍纪要实现交互,又要接入sdk
第一个坑: 开放平台的是基于gradle的,然而当你导出arr包给unity,unity不能去动态下载实体包,很头疼,所以不能使用它最新方式,反正我是没整出来,各种测试始终找不到类就是找不到sdk
所以我在网上巴拉了一个老版本的, 基于sdk arr包的,包的话去下载就好了
说一下,接下来的所有操作都是基于刚才那个交互案例修改,或者你重新创建
将下载的包放到你创建的类库的lib文件夹下:可以直接复制粘贴到对应的文件夹位置,然后右键 点击 Add as library
上述操作之后,点击类库模块的build.gradle 会有相应的依赖,当然可以直接这样添加代码
需要加上的一句是
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
然后, 去百度androidstudio导入arr的流程,都一样的,就是build.gradle的设置,这个文件就设置好了
接下来我们要按照官方的提示创建packge,和activity
这里又一个深坑,由于该arr的包名并非实际包名,而是applicationid,实际的包名是你unity打包设置的包名,这两者是不能一样的,一定记得,你在微信端申请的是基于你unity打包的包名
所以当你调用WXEntryActivity时候,你会发现又报错说找不到类,这是因为官方文档说的是在你包名下创建包,但是你的包名并不是在微信上申请的,所以你要另加一个包,去创建微信的activity
在箭头这里就是你Androidstudio上的包名地方,右键-new-packge,然后在其下创建javacalss,packge名字和类名必须与图片一致,因为微信端回调是要new一个类,名字固定的。只有这样你才能正常代用你社情的包名下的sdk脚本
最后设置Androidmanifest文件
对的, 里边什么都不要,就只有包名
然后点build-rebuild等待 arr包打包完成。
找到arr包,导入unity,必须放到 plugins/andrid 文件夹下,然后打开arr包,或者自己创建一个xml文件,名字AndroidManifest.xml,进行如下配置:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="0000000" ><uses-permission android:name="android.permission.INTERNET" /><!-- for mta statistics, not necessary--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><applicationandroid:exported="true"android:allowBackup="true"><activity android:name="000"//包名+你的交互类android:label="@string/app_name"android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-data android:name="android.app.lib_name" android:value="wechat_ad" /><meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" /></activity><!--注册微信回调 WXEntryActivity --><activityandroid:name=""//包名+.wxapi.WXEntryActivity 这个是unity打包的包名!!!!!android:exported="true"android:label="@string/app_name"android:launchMode="singleTop"android:theme="@android:style/Theme.Translucent" /></application>
</manifest>
然后unity做一个按钮,点击给android发消息执行 login方法,这点就不上码了,这些基本就能实现微信登录了
unity端的代码:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;[Serializable]
public class WeChatUserData
{public string openid;public string nickname;public int sex;//性别 0-女 1-男public string province;//省份public string city;//城市public string country;//县级public string headimgurl;//头像urlpublic string[] privilege;//特权public string unionid;//会员
}
[Serializable]
public class WechatData
{public string access_token;public string expires_in;public string refresh_token;public string openid;public string scope;
}
public delegate void OnLogin(WeChatUserData data,Texture tex);
/// <summary>
/// 微信 sdk 组件
/// </summary>
public class WeChatCompent : MonoBehaviour
{public string WXAppid;public string WXSecret;private OnLogin onlogin;//登录回调public static WeChatCompent instance;// Start is called before the first frame updatevoid Awake(){instance = this;}public void LoginCallBack(string MSG){Debug.Log("unity收到消息 : " + MSG);StartCoroutine(GetWechatData(MSG));}/// <summary>/// 登录回调/// </summary>/// <param name="str"></param>private void GetData(string str){Debug.Log("收到回调: " + str);StartCoroutine(GetWechatData(str));}IEnumerator GetWechatData(string code){Debug.Log("开始获取用户数据:WXAppid:" + WXAppid+ " secret=" + WXSecret + " code="+ code );//获取令牌string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + WXAppid + "&secret=" + WXSecret+ "&code=" + code + "&grant_type=authorization_code";UnityWebRequest req = new UnityWebRequest(url);DownloadHandlerTexture download = new DownloadHandlerTexture(true);req.downloadHandler = download;yield return req.SendWebRequest();Debug.Log("error:" + req.error);if (req.error == null){Debug.Log("req.downloadHandler .text:" + req.downloadHandler.text);WechatData data = JsonUtility.FromJson<WechatData>(req.downloadHandler .text);if (data == null){Debug.Log("空数据");yield break;}//获取信息string userurl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + data.access_token + "&openid=" + data.openid;UnityWebRequest get = new UnityWebRequest(userurl);DownloadHandlerTexture downloader = new DownloadHandlerTexture(true);get.downloadHandler = downloader;yield return get.SendWebRequest();Debug.Log("error:" + get.error);if (string.IsNullOrEmpty(get.error)){WeChatUserData userInfo = JsonUtility.FromJson<WeChatUserData>(downloader.text );if (userInfo == null){Debug.Log("数据获取异常");}else{Debug.Log("信息获取成功:" + userInfo.nickname);UnityWebRequest web = new UnityWebRequest(userInfo.headimgurl );DownloadHandlerTexture geticon = new DownloadHandlerTexture(true);web.downloadHandler = geticon;yield return web.SendWebRequest();Debug.Log("error:" + web.error);if (onlogin != null){onlogin.Invoke(userInfo,geticon .texture);onlogin = null;Destroy(gameObject);}}}if (onlogin != null){onlogin.Invoke(null, null);onlogin = null;}}}//------------------------------------外部接口-----------------------public void Login(OnLogin onlogin){this.onlogin = onlogin;
#if UNITY_ANDROIDobject[] strs = new object[] { gameObject.name, "LoginCallBack" };AndroidTools.CallAndroid("Login", strs);
#endif}}
x
/// <summary>
/// unity 和安卓交互类
/// </summary>
public static class AndroidTools
{private static AndroidJavaClass jc;private static AndroidJavaObject jo;/// <summary>/// 发送给android的/// </summary>/// <param name="methordName"></param>/// <param name="args"></param>public static void CallAndroid(string methordName, object[] args=null){
#if UNITY_ANDROIDif (jo == null){Init();}if (args != null)jo.Call(methordName, args);elsejo.Call(methordName);
#endif}/// <summary>/// 和安卓通信s/// </summary>/// <param name="methordName"></param>/// <returns></returns>public static T CallAndroid<T>(string methordName){
#if UNITY_ANDROIDreturn jo.Call<T>(methordName);
#endif}/// <summary>/// 初始化/// </summary>private static void Init(){jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");//com.unity3d.player.UnityPlayerjo = jc.GetStatic<AndroidJavaObject>("currentActivity");//currentActivity}
}
好了,完结!!!! 有问题欢迎来问
贴几个有用 的博客:
https://blog.csdn.net/u014078990/article/details/83752223
https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/Android.html
unity接入 微信登录sdk相关推荐
- Unity接入微信支付SDK
最近1年转了UE开发,博客更新的比较少,技术栈宽了不少,以后有空尽量多更新,也方便总结记忆 Unity接入微信支付整个过程坑比较多,网上之前的教程要么比较老,要么比较零碎,只能东拼西凑摸索,跑通后还是 ...
- Unity接入微信SDK——iOS(接入微信SDK)
Unity接入微信SDK--iOS(一 接入微信SDK) 下载微信SDK 下载地址:微信开放平台 导出Unity Xcode项目 导出Unity Xcode项目,并打开 微信SDK导入Xcode项目 ...
- 关于Unity接入微信扫码登录
关于Unity接入微信扫码登录 请联系QQ63672785 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑器 ...
- Unity借助Eclipse导Jar包接入QQ登录SDK
首先还是Unity大知识点列表 然后开始边做边记录吧! 申请QQ互联开发者身份 链接:https://connect.qq.com/index.html 需要实名认证,提交手持身份证照片,申请后等待审 ...
- 详解如何进行第三方App接入微信登录
微信登录接入 微信登录遵循协议Aouth2.0中的授权码模式 我们来看一下Aouth2.0中的授权码模式是怎么定义的: 授权码模式(authorization code)是功能最完整.流程最严密的授权 ...
- cocos creator接入微信登陆sdk android篇
cocos creator接入微信登陆sdk 背景 项目引擎使用cocos creator,使用android studio集成开发工具,在开发之前先做好准备工作 在微信开放平台上创建好移动应用,拿到 ...
- 第三方App接入微信登录 解读
最近在做一个微信登录功能,发现腾讯的API文档写的实在是让人摸不着头脑,也没有搜到很详细的能让人参考的文章,借此把自己的一点儿使用心得与大家分享,欢迎指正其中的不足之处,谢谢! 准备工作 1.在微信开 ...
- cocos creator接入微信登陆sdk ios篇
cocos creator接入微信登陆sdk ios篇 背景已经在Android篇里面交代过了,有兴趣的朋友可以再看看Android篇 步骤 去微信开放平台下载ios平台所需要的sdk 在" ...
- Android Studio App 接入微信登录
安卓接入微信登录 微信开发平台获取AppId和AppSecret 开始接入 添加依赖 注册wxApi 登录调用 监听登录回调 注意事项 微信开发平台获取AppId和AppSecret 创建应用 填写对 ...
- unity 接入 Facebook 登录
Unity 接入 Facebook 登录 Unity 接入 Facebook 登陆 使用unity sdk 到这 https://developers.facebook.com/docs/unity/ ...
最新文章
- webservice restful类型接口的调用实例
- Boost:bind绑定boost::apply的测试程序
- 【Boost】boost库中智能指针——scoped_ptr
- tftp 服务器 ip_360Stack裸金属服务器部署实践
- Docker部署运行微服务
- C/C++面试题—实现MyString类
- ip变更 mysql无法启动_ubuntu mysql 更改IP导致mysql无法启动
- 边界条件(求解偏微分方程的边界条件)
- 程序员的基本功:为什么非要用 Python 做数据分析?Excel 不好吗?
- java hql多条件查询_JSP 开发之hibernate的hql查询多对多查询
- ajax查询功能查询源码,ajax实现分页查询功能
- 按钮、菜单的重绘代码
- SQL SERVER 备份数据库sql语句
- tcp 抓包出现spurious retransmission
- Java数组分配的关键字_理解JAVA数组 - 小南超子的个人空间 - OSCHINA - 中文开源技术交流社区...
- ‘VBE6EXT.OLB’ 不能被加载
- SpringBoot爬虫
- 南方电网两栖机器人_南方电网首个作业级水下机器人落户海南 为海底电缆“护驾”...
- 知识图谱嵌入(KGE)主流模型简介
- python有参函数和无参函数的区别_构造函数的有参和无参的区别,构造函数的参数是派什么用场的?...