WeChatLoginHelper.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System.Runtime.InteropServices;
  5. using System;
  6. using AOT;
  7. public class WeChatLoginHelper
  8. {
  9. public static string CurrentAppID { get; private set; }
  10. public static bool IsWechatInstalled()
  11. {
  12. #if UNITY_ANDROID
  13. using (var sdk = new AndroidJavaClass("com.xmjssvr.BowArrow.mi.WeChatSDK"))
  14. {
  15. bool bInstalled = sdk.CallStatic<bool>("IsWXAppInstalled");
  16. //Debug.Log("安裝微信:"+ bInstalled);
  17. return bInstalled;
  18. }
  19. #endif
  20. #if UNITY_IPHONE && !UNITY_EDITOR
  21. return IsWechatInstalled_iOS();
  22. #endif
  23. #if UNITY_STANDALONE_WIN || UNITY_EDITOR
  24. return false;
  25. #endif
  26. }
  27. //如果是iphone 动态处理
  28. public static void InitWeChat(string appId, string universalLink)
  29. {
  30. CurrentAppID = appId;
  31. #if UNITY_IPHONE && !UNITY_EDITOR
  32. _RegisterWeChat(appId, universalLink);
  33. #endif
  34. }
  35. public static void Login()
  36. {
  37. #if UNITY_ANDROID
  38. using (var sdk = new AndroidJavaClass("com.xmjssvr.BowArrow.mi.WeChatSDK")) sdk.CallStatic("WeChatLogin");
  39. #endif
  40. #if UNITY_IPHONE
  41. if (!IsWechatInstalled_iOS())
  42. {
  43. Debug.Log("微信未安装");
  44. return;
  45. }
  46. WXResultHandler handler = new WXResultHandler(resultHandler);
  47. IntPtr fp = Marshal.GetFunctionPointerForDelegate(handler);
  48. _WechatLogin(fp);
  49. #endif
  50. }
  51. public static void OnLoginResp(string code)
  52. {
  53. LoginView.ins?.OnWxLoginResp(code);
  54. }
  55. #if UNITY_IPHONE
  56. //这个方法就是引用在 xcode 中编写的方法,与 iOS 连接的桥梁
  57. [DllImport("__Internal")]
  58. private static extern void _RegisterWeChat(string appid, string universalLink);
  59. [DllImport("__Internal")]
  60. private static extern void _WechatLogin(IntPtr resultHandler);
  61. [DllImport("__Internal")]
  62. private static extern bool IsWechatInstalled_iOS();
  63. [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
  64. public delegate void WXResultHandler(string resultString);
  65. [MonoPInvokeCallback(typeof(WXResultHandler))]
  66. static void resultHandler(string content)
  67. {
  68. string[] args = content.Split(';');
  69. switch (args[0])
  70. {
  71. case "0":
  72. //WXLoginState.OK
  73. //Debug.Log("token:" + args[1]);
  74. LoginView.ins?.OnWxLoginResp(args[1]);
  75. break;
  76. case "-2":
  77. //WXLoginState.Denied
  78. Debug.Log(args[1]);
  79. break;
  80. case "-4":
  81. //WXLoginState.Cancel
  82. Debug.Log(args[1]);
  83. break;
  84. default:
  85. //WXLoginState.Other
  86. Debug.Log(args[1]);
  87. break;
  88. }
  89. }
  90. public enum WXLoginState
  91. {
  92. OK,
  93. Denied = -2,
  94. Cancel = -4,
  95. Other = -1
  96. }
  97. #endif
  98. }