Unity Android SDK 集成 微信登录

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

需求:Unity 项目 Android端 微信登录
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添加
 

7.Unity端调用代码如下
public void Login()
{
     AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
     AndroidJavaObject  currentActivity = javaClass.GetStatic("currentActivity");
     currentActivity.Call("WechatLogin");
}

8.回调的code方法
public void funName(string code)
{
     Debug.Log("code=   "+code);
}

好了这样就可以了、哇咔咔、不明白的私信~~~



可能发生的错误,解决方案:
1.解决Unity导入aar或jar出现的Program type already present: com.xx.BuildConfig问题
原因:当Unity导入的aar或jar包名和项目包名一样的话,BuildConfig会出现冲突。
解决方法:在aar/jar的build.gradle中添加下面的代码禁止生成BuildConfig即可。
afterEvaluate {
   generateReleaseBuildConfig.enabled = false
   generateDebugBuildConfig.enabled = false
}


你可能感兴趣的:(Unity Android SDK 集成 微信登录)