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
}