| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using System.Runtime.InteropServices;
- using System;
- using AOT;
- public class WeChatLoginHelper
- {
- public static bool IsWechatInstalled()
- {
- #if UNITY_ANDROID
- using (var sdk = new AndroidJavaClass("com.xmjssvr.BowArrow.mi.WeChatSDK"))
- {
- bool bInstalled = sdk.CallStatic<bool>("IsWXAppInstalled");
- //Debug.Log("安裝微信:"+ bInstalled);
- return bInstalled;
- }
-
- #endif
- #if UNITY_IPHONE && !UNITY_EDITOR
- return IsWechatInstalled_iOS();
- #endif
- #if UNITY_STANDALONE_WIN || UNITY_EDITOR
- return false;
- #endif
- }
- public static void Login()
- {
- #if UNITY_ANDROID
- using (var sdk = new AndroidJavaClass("com.xmjssvr.BowArrow.mi.WeChatSDK")) sdk.CallStatic("WeChatLogin");
- #endif
- #if UNITY_IPHONE
- if (!IsWechatInstalled_iOS())
- {
- Debug.Log("微信未安装");
- return;
- }
- WXResultHandler handler = new WXResultHandler(resultHandler);
- IntPtr fp = Marshal.GetFunctionPointerForDelegate(handler);
- _WechatLogin(fp);
- #endif
- }
- public static void OnLoginResp(string code)
- {
- LoginView.ins?.OnWxLoginResp(code);
- }
- #if UNITY_IPHONE
- //这个方法就是引用在 xcode 中编写的方法,与 iOS 连接的桥梁
- [DllImport("__Internal")]
- private static extern void _WechatLogin(IntPtr resultHandler);
- [DllImport("__Internal")]
- private static extern bool IsWechatInstalled_iOS();
- [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- public delegate void WXResultHandler(string resultString);
- [MonoPInvokeCallback(typeof(WXResultHandler))]
- static void resultHandler(string content)
- {
- string[] args = content.Split(';');
- switch (args[0])
- {
- case "0":
- //WXLoginState.OK
- //Debug.Log("token:" + args[1]);
- LoginView.ins?.OnWxLoginResp(args[1]);
- break;
- case "-2":
- //WXLoginState.Denied
- Debug.Log(args[1]);
- break;
- case "-4":
- //WXLoginState.Cancel
- Debug.Log(args[1]);
- break;
- default:
- //WXLoginState.Other
- Debug.Log(args[1]);
- break;
- }
- }
-
- public enum WXLoginState
- {
- OK,
- Denied = -2,
- Cancel = -4,
- Other = -1
- }
- #endif
- }
|