| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using System.Runtime.InteropServices;
- using System;
- using AOT;
- public class WeChatLoginHelper
- {
-
- 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
- }
|