首次吐槽一下,微信官方的文档真的是服了,各种坑,而且贼不详细,而且还只能原生接入,在做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相关推荐

  1. Unity接入微信支付SDK

    最近1年转了UE开发,博客更新的比较少,技术栈宽了不少,以后有空尽量多更新,也方便总结记忆 Unity接入微信支付整个过程坑比较多,网上之前的教程要么比较老,要么比较零碎,只能东拼西凑摸索,跑通后还是 ...

  2. Unity接入微信SDK——iOS(接入微信SDK)

    Unity接入微信SDK--iOS(一 接入微信SDK) 下载微信SDK 下载地址:微信开放平台 导出Unity Xcode项目 导出Unity Xcode项目,并打开 微信SDK导入Xcode项目 ...

  3. 关于Unity接入微信扫码登录

    关于Unity接入微信扫码登录 请联系QQ63672785 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑器 ...

  4. Unity借助Eclipse导Jar包接入QQ登录SDK

    首先还是Unity大知识点列表 然后开始边做边记录吧! 申请QQ互联开发者身份 链接:https://connect.qq.com/index.html 需要实名认证,提交手持身份证照片,申请后等待审 ...

  5. 详解如何进行第三方App接入微信登录

    微信登录接入 微信登录遵循协议Aouth2.0中的授权码模式 我们来看一下Aouth2.0中的授权码模式是怎么定义的: 授权码模式(authorization code)是功能最完整.流程最严密的授权 ...

  6. cocos creator接入微信登陆sdk android篇

    cocos creator接入微信登陆sdk 背景 项目引擎使用cocos creator,使用android studio集成开发工具,在开发之前先做好准备工作 在微信开放平台上创建好移动应用,拿到 ...

  7. 第三方App接入微信登录 解读

    最近在做一个微信登录功能,发现腾讯的API文档写的实在是让人摸不着头脑,也没有搜到很详细的能让人参考的文章,借此把自己的一点儿使用心得与大家分享,欢迎指正其中的不足之处,谢谢! 准备工作 1.在微信开 ...

  8. cocos creator接入微信登陆sdk ios篇

    cocos creator接入微信登陆sdk ios篇 背景已经在Android篇里面交代过了,有兴趣的朋友可以再看看Android篇 步骤 去微信开放平台下载ios平台所需要的sdk 在" ...

  9. Android Studio App 接入微信登录

    安卓接入微信登录 微信开发平台获取AppId和AppSecret 开始接入 添加依赖 注册wxApi 登录调用 监听登录回调 注意事项 微信开发平台获取AppId和AppSecret 创建应用 填写对 ...

  10. unity 接入 Facebook 登录

    Unity 接入 Facebook 登录 Unity 接入 Facebook 登陆 使用unity sdk 到这 https://developers.facebook.com/docs/unity/ ...

最新文章

  1. webservice restful类型接口的调用实例
  2. Boost:bind绑定boost::apply的测试程序
  3. 【Boost】boost库中智能指针——scoped_ptr
  4. tftp 服务器 ip_360Stack裸金属服务器部署实践
  5. Docker部署运行微服务
  6. C/C++面试题—实现MyString类
  7. ip变更 mysql无法启动_ubuntu mysql 更改IP导致mysql无法启动
  8. 边界条件(求解偏微分方程的边界条件)
  9. 程序员的基本功:为什么非要用 Python 做数据分析?Excel 不好吗?
  10. java hql多条件查询_JSP 开发之hibernate的hql查询多对多查询
  11. ajax查询功能查询源码,ajax实现分页查询功能
  12. 按钮、菜单的重绘代码
  13. SQL SERVER 备份数据库sql语句
  14. tcp 抓包出现spurious retransmission
  15. Java数组分配的关键字_理解JAVA数组 - 小南超子的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. ‘VBE6EXT.OLB’ 不能被加载
  17. SpringBoot爬虫
  18. 南方电网两栖机器人_南方电网首个作业级水下机器人落户海南 为海底电缆“护驾”...
  19. 知识图谱嵌入(KGE)主流模型简介
  20. python有参函数和无参函数的区别_构造函数的有参和无参的区别,构造函数的参数是派什么用场的?...

热门文章

  1. 编译适配 联想Y1(NewifiMini)的Padavan 固件
  2. 【微信支付】微信支付之 Native 支付
  3. day18 - 正则表达式
  4. 【DB笔试面试666】在Oracle中,在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?...
  5. Spring学习传送门
  6. WP-CONTENT/UPLOADS的777,775,744,644,444文件权限设置
  7. 巴西电商olist store订单数据分析
  8. Flink 常见问题总结
  9. 平衡小车制作系列之一——捋清制作流程
  10. 电商OTA:如何评估社区产品?