1. 程式人生 > 其它 >unity 國內sdk接入總結(android)-微信接入

unity 國內sdk接入總結(android)-微信接入

技術標籤:unity3dunity sdk

前言:

遇到微信程式碼能呼叫,沒有報錯,但是沒有調起微信視窗,或者沒有微信回掉,檢視以下內容是否正確。

1、是否新增微信回掉

2、檢查包名和簽名是否與遊戲註冊時的一致

3、如覺得包名簽名程式碼沒問題,可先換其他手機測試下,可能與你接的其他第三方平臺的關係,和只有部分手機無法彈出,例如(我先接了的廣告平臺,然後接微信後剛好我的華為手機沒辦法登入微信)

部分華為手機android10不走WXEntryActivity回撥問題?

https://developers.weixin.qq.com/community/develop/doc/0002ac72d4cd5823376adda7056800?fromCreate=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);
            }
        }
    }
}