前言:

遇到微信代码能调用,没有报错,但是没有调起微信窗口,或者没有微信回掉,查看以下内容是否正确。

1、是否添加微信回掉

2、检查包名和签名是否与游戏注册时的一致

3、如觉得包名签名代码没问题,可先换其他手机测试下, 可能与你接的其他第三方平台的关系,和只有部分手机无法弹出,例如(我先接了的广告平台,然后接微信后刚好我的华为手机没办法登录微信)

部分华为手机android10不走WXEntryActivity回调问题?

( 解答篇 )部分华为手机android10不走WXEntryActivity回调问题? | 微信开放社区

 接入官方文档:

关于openSDK6.8.0的更新说明 | 微信开放文档

调用代码:

    //微信登录
    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);
            }
        }
    }
}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐