微信授权openID和token获取,简单六步搞定 --Unity开发笔记
程序员文章站
2022-07-10 22:11:43
第一步 我们需要将Unity导出android studio 工程第二步 找到UnityPlayerActivity所在的文件夹新建文件夹 wxapi新建java文件 WXEntryActivity这里 WXEntryActivity 的代码 全部覆盖就好了 不用修改package com.casual.farm.fun.leisure.wxapi;import android.app.Activity;import android.content.Intent;import...
第一步 我们需要将Unity导出android studio 工程
第二步 找到UnityPlayerActivity所在的文件夹
新建文件夹 wxapi
新建java文件 WXEntryActivity
这里 WXEntryActivity 的代码 全部覆盖就好了 不用修改
package com.casual.farm.fun.leisure.wxapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import com.casual.farm.fun.leisure.UnityPlayerActivity;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.unity3d.player.UnityPlayer;
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
///通知Unity哪个物体GameObjectName 哪个方法CallBackFuncName
public static String GameObjectName = "";//GameObjectName 的 WXPayCallback方法
public static String CallBackFuncName = "";//
//监听支付回调的对象
private IWXAPI api;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//创建微信API对象
api = WXAPIFactory.createWXAPI(this, UnityPlayerActivity.APP_ID,false);
//把接受到的Intent给wxapi这个对象,它会解析回调结果,通过我们实现的IWXAPIEventHandler接口回调给我们
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq req) {
switch (req.getType()) {
case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
break;
case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
break;
case ConstantsAPI.COMMAND_LAUNCH_BY_WX:
break;
default:
break;
}
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp resp) {
System.out.println("$$$$$$$$$$$$unity_2_android微信响应");
switch (resp.errCode){
case BaseResp.ErrCode.ERR_OK:
//用户同意
//SendAuth.Resp authResp = (SendAuth.Resp) resp;
String code = ((SendAuth.Resp) resp).code;
UnityPlayer.UnitySendMessage(GameObjectName,CallBackFuncName, "1,"+code);
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
//用户拒绝
UnityPlayer.UnitySendMessage(GameObjectName,CallBackFuncName, "0,ERR_AUTH_DENIED");
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
//用户取消
UnityPlayer.UnitySendMessage(GameObjectName,CallBackFuncName, "0,ERR_USER_CANCEL");
break;
}
finish();
}
}
第三步 来到 AndroidManifest.xml 文件里 我们将新建的 WXEntryActivity 加入启动配置
代码可拷贝区
<!-- 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"/>
代码
xxx 部分 自己填写自己的包名
<activity
android:exported="true"
android:launchMode="singleTop"
android:name="com.xxx.xxx.xx.xxxx.wxapi.WXEntryActivity"
android:theme="@android:style/Theme.NoDisplay" />
第四步 在 dependencies里引用微信sdk
implementation ‘com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+’
记得勾一下同步哦 sync now
第五步 注册方法
- 在 UnityPlayerActivity 文件里 找到onCreate方法里 粘贴以下代码
在授权成功后 会调用 场景里的 IAdsMgr 对象上 脚本里的 WechatLoginCallback方法
//创建微信API对象
wxApi = WXAPIFactory.createWXAPI(this,APP_ID,false);
//Unity里接收授权回调的对象
WXEntryActivity.GameObjectName = "IAdsMgr";
//Unity接收授权对象的 回调方法
WXEntryActivity.CallBackFuncName = "WechatLoginCallback";
在 UnityPlayerActivity 类里 写一个方法 由Unity脚本来调用
代码如下
//登陆
public void WechatLogin(){
final SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_demo_test";
wxApi.sendReq(req);
}
Unity 如何调用
不用做修改 直接粘贴到一个脚本里 报错的话 记得引用头文件
public static AndroidJavaObject jo;
//微信授权
public static void WechatMandate()
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("WechatLogin");
}
大工告成
本文地址:https://blog.csdn.net/qq_39162566/article/details/112566325
上一篇: php中chdir()函数用法实例