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添加
 <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);
}

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



可能发生的错误,解决方案:
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
}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容