unity 國內sdk接入總結(android)-微信接入
阿新 • • 發佈:2021-01-06
前言:
遇到微信程式碼能呼叫,沒有報錯,但是沒有調起微信視窗,或者沒有微信回掉,檢視以下內容是否正確。
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); } } } }