Unity3D接入第三方插件之微信登录安卓SDK

一、项目介绍

本案例是基于不继承UnityPlayerActivity的Java类,所以不会与已经存在的其他sdk冲突

注:如果是新手,请查看我的其他博客学习如歌创建一个自己的AndroidStudio项目

二、导入并引用微信官方登录sdk的jar包与Unity的classes.jar包

Unity3D接入第三方插件之微信登录安卓SDK_第1张图片

三、在包目录下新建Package,名字为wxapi,此名字不可修改,必须写死

Unity3D接入第三方插件之微信登录安卓SDK_第2张图片

四、新建WxEntryActivity类用于接收登录回调

package com.xxx.xxx.wxapi;

import android.app.Activity;
import android.os.Bundle;
import android.view.WindowManager;

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 {

    //微信
    public IWXAPI wxApi;
    public static final String AppId = "wxa2ee6175924e21fc";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 隐藏状态栏
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
         WindowManager.LayoutParams.FLAG_FULLSCREEN);
        wxApi = WXAPIFactory.createWXAPI(this, AppId,true);
        wxApi.registerApp(AppId);
        try
        {
            boolean handleIntent = wxApi.handleIntent(getIntent(), this);
            if(!handleIntent){
                System.out.println("参数不合法");
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }


    @Override
    public void onReq(BaseReq baseReq) {

    }

    @Override
    public void onResp(BaseResp baseResp) {
        if (baseResp.getType() == ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX) {//分享

        } else if (baseResp.getType() == ConstantsAPI.COMMAND_SENDAUTH) {//登陆发送广播
            switch (baseResp.errCode) {
                case BaseResp.ErrCode.ERR_OK:
                    SendAuth.Resp newResp = (SendAuth.Resp) baseResp;
                    String code = newResp.code;
                    UnityPlayer.UnitySendMessage("NetLogic", "CallbackWxLogin", code);

                    break;
                case BaseResp.ErrCode.ERR_AUTH_DENIED:
                    UnityPlayer.UnitySendMessage("NetLogic", "CallbackWxLogin", "-1");;
                    break;
                case BaseResp.ErrCode.ERR_USER_CANCEL:
                    UnityPlayer.UnitySendMessage("NetLogic", "CallbackWxLogin", "0");;
                    break;
            }
        }
        finish();
    }
}

五、新建单利Java类用来给Unity调用

package com.xxx.xxx;//自己的包名称
import android.content.Context;
import android.util.Log;

import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

public class ClientWeiXinActivity {
    private static final String App_Id = "xxxxxx";//自己的appId
    public static ClientWeiXinActivity _instance;
    IWXAPI msgApi;

    public static ClientWeiXinActivity getInstance() {
        if (_instance == null) {
            _instance = new ClientWeiXinActivity();
        }
        return _instance;
    }
    public void WxSdkLogin(Context res,String scope,String state) {
        msgApi = WXAPIFactory.createWXAPI(res, App_Id,false);
        if (!msgApi.isWXAppInstalled()) return;
        msgApi.registerApp(App_Id);
        SendAuth.Req req = new SendAuth.Req();
        req.scope = scope;
        req.state = state;
        Log.d("Debug", "发起用户授权");
        msgApi.sendReq(req);
    }

}

六、代码逻辑

客户端调用微信的安卓sdk拉起登录授权页面,用户点击授权后,向服务器端发送微信回调的code参数,将code传给服务器,通过服务器获取授权后的用户信息

七、发布arr包到自己的项目中

Unity代码

    public void WxSdkLogin()
    {
#if UNITY_ANDROID && !UNITY_EDITOR
        AndroidJavaClass jc = new AndroidJavaClass("com.xxx.xxx.ClientWeiXinActivity");//包名+Java类名
        AndroidJavaObject m_Android = jc.CallStatic("getInstance");
        if (m_Android != null)
        {
            m_Android.Call("WxSdkLogin",m_AndroidPluginObj,"snsapi_userinfo" ,"frwfrwsdxefe");
        }
        else
            Debug.Log("AndroidPlugin is Null");
#endif
    }
    public void CallbackWxLogin(string code)
    {
        Debug.Log("微信登录回调:" + code);
        if (code == "0" || code == "-1") return;
       
    }

 

你可能感兴趣的:(Unity第三方SDK对接,unity,android,studio,sdk,微信游戏)