微信授权openID和token获取,简单六步搞定 --Unity开发笔记

第一步 我们需要将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
在这里插入图片描述


第五步 注册方法

  1. 在 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");
    }

在这里插入图片描述

大工告成

猜你喜欢

转载自blog.csdn.net/qq_39162566/article/details/112566325