美文网首页Unity3D游戏开发
Unity Android SDK 集成之微信登录

Unity Android SDK 集成之微信登录

作者: xzhuan | 来源:发表于2019-06-27 15:42 被阅读2次

    xzhuan原创稿件,转载请注明出处!
    用到的地址:注
    微信开放平台 获取微信官方文档、以及案例Demo
    签名生成工具 用于微信开放平台填写应用信息(app签名)

    需求:Unity 项目 微信登录
    1.使用Android Studio 新建项目
    2.新建libs文件夹,放入 Unity的classes.jar包
    3.打开build.gradle   最上方改为 apply plugin: 'com.android.library'  作为库 被第三方调用
    
    //开始微信部分
    1.打开build.gradle添加
    dependencies {
       compile files('libs/classes.jar')
       compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
    }
    //task to delete the old jar(删除之前的.jar)
    task deleteOldJar(type: Delete) {
       delete 'release/outPlugin.jar'
    }
    
    //task to export contents as jar(拷贝到指定目录 并修改名)
    task makeJar(type: Copy) {
       from('build/intermediates/bundles/default/')
       into('release/')
       include('classes.jar')
       ///Rename the jar
       rename('classes.jar', 'outPlugin.jar')
    }
    
    makeJar.dependsOn(deleteOldJar, build);
    (outPlugin.jar 是最后导出的包,名字可以自己设定)
    
    2.在 com.xxx.xxx下 新建wxapi文件夹目录wxapi下新建WXEntryActivity.java (注意:微信指定的目录和代码名,不能更改,否则无法正常调用)
    代码如下
    package com.xxx.xxx.wxapi;
    
    import android.os.Bundle;
    import com.xxx.xxx.Util;
    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;
    import android.app.Activity;
    
    
    public class WXEntryActivity extends Activity  implements IWXAPIEventHandler{
       @Override
       public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           try
           {
              boolean handleIntent = wxApi.handleIntent(getIntent(), this);
              if(!handleIntent){
                  System.out.println("参数不合法")
                  finish();
              }
           }
           catch(Exception e)
           {
               e.printStackTrace();
           }
       }
    
       // 微信发送请求到第三方应用时,会回调到该方法
       @Override
       public void onReq(BaseReq baseReq) {
    
       }
    
       // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
       @Override
       public void onResp(BaseResp baseResp) {
           System.out.println("微信响应" + baseResp.errCode);
           switch (baseResp.errCode) {
               case BaseResp.ErrCode.ERR_OK:
                   System.out.println("用户同意");
                   if(baseResp instanceof SendAuth.Resp)
                   {
                       SendAuth.Resp newResp = (SendAuth.Resp) baseResp;
                       String code = newResp.code;
                       //传出微信返回的code信息 到Unity处理
                       UnityPlayer.UnitySendMessage("ObjName","funName",code);
                   }
                   break;
               case BaseResp.ErrCode.ERR_AUTH_DENIED:
                   System.out.println("用户拒绝授权" + baseResp.openId);
                   break;
               case BaseResp.ErrCode.ERR_USER_CANCEL:
                   System.out.println("用户取消");
                   break;
           }
           finish();
       }
    }
    
    3.在主UnityPlayerActivity里面注册微信API,代码如下
       // 微信登录:拉起微信授权
       public void WechatLogin() {
           final String appId ="xxxxxxxxxxxx";
           if(null == wxApi) {
               wxApi = WXAPIFactory.createWXAPI(this, appId, false);
               if(null == wxApi)
               {
                   System.out.println("微信登录失败...")
                   return;
               }
               wxApi.registerApp(appId);
           }
           final SendAuth.Req req = new SendAuth.Req();
           req.scope = "snsapi_userinfo";
           req.state = "wechat_sdk_demo_test";
           wxApi.sendReq(req);
       }
    
    4.导出jar:
    在命令行窗口 Terminal输入 gradlew makeJar
    出现BUILD SUCCESSFUL、则成功
    导出目录在release/文件夹下
    
    5.将导出的
    outPlugin.jar
    wechat-sdk-android-with-mta-xxx.jar
    包放到Assets\Plugins\Android\libs目录下
    
    6.AndroidManifest.xml添加
     <activity android:name=".wxapi.WXEntryActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" />
    
    7.Unity端调用代码如下
    public void Login()
    {
         AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
         AndroidJavaObject  currentActivity = javaClass.GetStatic<AndroidJavaObject>("currentActivity");
         currentActivity.Call("WechatLogin");
    }
    
    8.回调的code方法
    public void funName(string code)
    {
         Debug.Log("code=   "+code);
    }
    
    好了这样就可以了、哇咔咔、不明白的私信~~~
    

    相关文章

      网友评论

        本文标题:Unity Android SDK 集成之微信登录

        本文链接:https://www.haomeiwen.com/subject/tyrrcctx.html