unity sdk(android)-微信接入
前言:遇到微信代码能调用,没有报错,但是没有调起微信窗口,或者没有微信回掉,查看以下内容是否正确。1、是否添加微信回掉2、检查包名和签名是否与游戏注册时的一致3、如觉得包名签名代码没问题,可先换其他手机测试下,可能与你接的其他第三方平台的关系,和只有部分手机无法弹出,例如(我先接了的广告平台,然后接微信后刚好我的华为手机没办法登录微信)部分华为手机android10不走WXEntryActivit
·
前言:
遇到微信代码能调用,没有报错,但是没有调起微信窗口,或者没有微信回掉,查看以下内容是否正确。
1、是否添加微信回掉
2、检查包名和签名是否与游戏注册时的一致
3、如觉得包名签名代码没问题,可先换其他手机测试下, 可能与你接的其他第三方平台的关系,和只有部分手机无法弹出,例如(我先接了的广告平台,然后接微信后刚好我的华为手机没办法登录微信)
部分华为手机android10不走WXEntryActivity回调问题?
( 解答篇 )部分华为手机android10不走WXEntryActivity回调问题? | 微信开放社区
接入官方文档:
调用代码:
//微信登录
public void wxLogin() {
Log.w("unity_2_android", "----wxLogin--1---");
if (null == wxApi) {
Log.w("unity_2_android", "----createWXAPI--1---");
wxApi = WXAPIFactory.createWXAPI(UnityPlayerActivity.instance, appId, true);
Log.w("unity_2_android", "----createWXAPI---2--");
if (null == wxApi) {
Log.w("unity_2_android", "----null == wxApi-----");
if (!wxApi.isWXAppInstalled()) {
//Toast.makeText(this, "您还未安装微信客户端", Toast.LENGTH_SHORT).show();
Log.w("unity_2_android", "----null == wxApi-----");
UnityPlayer.UnitySendMessage("UrlController","WXLoagInError","您还未安装微信客户端");
return;
}
UnityPlayer.UnitySendMessage("UrlController","WXLoagInError","微信登录失败");
return;
}
wxApi.registerApp(appId);
Log.w("unity_2_android", "----registerApp-----");
}
wxapi/WXEntryActivity.java
package com.cooking.fun.dapaidang.merge.game.wxapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.cooking.fun.dapaidang.merge.game.UnityPlayerActivity;
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;
import java.io.InputStreamReader;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
//微信接口类
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
//监听支付回调的对象
private IWXAPI api;
public String furl, a_t_r,openId;
@Override
public void onCreate(Bundle savedInstanceState) {
//final String appId = WXEntryActivity.appId;
Log.w("unity_2_android","----WXEntryActivity onCreate-----");
super.onCreate(savedInstanceState);
//api = WXAPIFactory.createWXAPI(this, appId);
Log.w("unity_2_android","----WXEntryActivity api-----");
try
{
api = WXAPIFactory.createWXAPI(this, UnityPlayerActivity.appId);
Log.w("unity_2_android","----WXEntryActivity handleIntent-----");
api.handleIntent(getIntent(), this);
}
catch(Exception e)
{
e.printStackTrace();
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.w("unity_2_android","----onNewIntent-----");
setIntent(intent);
//api.handleIntent(intent, this);
}
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq baseReq) {
switch (baseReq.getType()) {
case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
break;
case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
break;
case ConstantsAPI.COMMAND_LAUNCH_BY_WX:
break;
default:
break;
}
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp baseResp) {
Log.w("unity_2_android", "onResp: " );
Log.w("unity_2_android", "onResp: " +baseResp.errCode);
switch (baseResp.errCode) {
case BaseResp.ErrCode.ERR_OK:
System.out.println("unity_2_android用户同意");
//TagManager.onTagWechat();
if(baseResp instanceof SendAuth.Resp)
{
SendAuth.Resp newResp = (SendAuth.Resp) baseResp;
String code = newResp.code;
//传出微信返回的code信息 到Unity处理
//UnityPlayer.UnitySendMessage("WXTools","RespLogin",code);
//Log.w("unity_2_android", "code: " +newResp.code);
//furl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + UnityPlayerActivity.instance.appId + "&secret=" + UnityPlayerActivity.instance.appSecret + "&code=" + code + "&grant_type=authorization_code";
//HTTPrequest http = new HTTPrequest();
UnityPlayer.UnitySendMessage("UrlController","WxCodeReturn",newResp.code);
}
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
System.out.println("unity_2_android用户拒绝授权" + baseResp.openId);
UnityPlayer.UnitySendMessage("UrlController","WXLoagInError","拒绝授权");
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
System.out.println("unity_2_android用户取消");
UnityPlayer.UnitySendMessage("UrlController","WXLoagInError","取消登入");
break;
}
finish();
}
public class HTTPrequest extends Thread {
public void run() {
String urlget=furl;
a_t_r="";
try {
URL url = new URL(urlget);
HttpsURLConnection httpURLConnection = (HttpsURLConnection) url.openConnection();
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
httpURLConnection.setConnectTimeout(10000);
httpURLConnection.setRequestMethod("GET");
httpURLConnection.connect();
InputStreamReader bis = new InputStreamReader(httpURLConnection.getInputStream(),"utf-8");
int c = 0;
while((c = bis.read()) != -1){
a_t_r=a_t_r+(char)c;
}
System.out.println("HTTP通信成功!"+a_t_r);
}catch (Exception e) {
System.out.println(urlget + " HTTP通信失败");
a_t_r = "http error";
}
if (a_t_r!="http error"){
Log.w("unity_2_android", "HTTP通信成功: " +a_t_r);
UnityPlayer.UnitySendMessage("UrlController","SetWXAcToken",a_t_r);
// if(openId == null) //json暂时都是在unity中解开.... 这里是调用unity解http回应的json
// UnityPlayer.UnitySendMessage("UI_Root","json_AcToken",a_t_r);
// else
// UnityPlayer.UnitySendMessage("UI_Root","json_UserInfo",a_t_r);
}
}
}
}
更多推荐
已为社区贡献9条内容
所有评论(0)