IOSNativeWrapper.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System;
  2. using System.Runtime.InteropServices;
  3. using UnityEngine;
  4. using System.Collections;
  5. using TapSDK.Core.Internal;
  6. using TapSDK.Core;
  7. namespace TapSDK.Core.Mobile {
  8. public class IOSNativeWrapper
  9. {
  10. #if UNITY_IOS
  11. // 导入 C 函数
  12. // 定义一个委托类型,匹配 Objective-C 中的 block 参数
  13. public delegate string DynamicPropertiesCalculatorDelegate();
  14. // 注意:这个方法的封装比较特殊,因为它需要一个返回 NSDictionary 的回调。
  15. [DllImport("__Internal")]
  16. private static extern void _TapTapEventRegisterDynamicProperties(DynamicPropertiesCalculatorDelegate callback);
  17. [DllImport("__Internal")]
  18. private static extern void _TapTapSDKCoreSwitchToRND();
  19. public static void SetRND(){
  20. _TapTapSDKCoreSwitchToRND();
  21. }
  22. // 定义一个 Func<string> 委托,用于从 Unity 使用者那里获取动态属性
  23. private static Func<string> dynamicPropertiesCallback;
  24. public static void RegisterDynamicProperties(Func<string> callback)
  25. {
  26. dynamicPropertiesCallback = callback;
  27. _TapTapEventRegisterDynamicProperties(DynamicPropertiesCalculator);
  28. }
  29. // Unity 端的回调方法,返回一个 JSON 字符串
  30. [AOT.MonoPInvokeCallback(typeof(DynamicPropertiesCalculatorDelegate))]
  31. private static string DynamicPropertiesCalculator()
  32. {
  33. if (dynamicPropertiesCallback != null)
  34. {
  35. string properties = dynamicPropertiesCallback();
  36. return properties;
  37. }
  38. return null;
  39. }
  40. #endif
  41. }
  42. }