gravity_engine_method_channel.dart 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. import 'dart:io';
  2. import 'package:flutter/foundation.dart';
  3. import 'package:flutter/services.dart';
  4. import 'gravity_engine_platform_interface.dart';
  5. /// An implementation of [GravityEnginePlatform] that uses method channels.
  6. class MethodChannelGravityEngine extends GravityEnginePlatform {
  7. /// The method channel used to interact with the native platform.
  8. @visibleForTesting
  9. final methodChannel = const MethodChannel('gravity_engine');
  10. /// Initializes the Gravity Engine SDK.
  11. /// Returns `true` if the user is attributed, `false` otherwise.
  12. @override
  13. Future<String> initialize(String appId, String accessToken, String clientId,
  14. String channel, bool debug) async {
  15. final result = await methodChannel.invokeMethod<String>(
  16. 'initialize',
  17. <String, dynamic>{
  18. 'appId': appId,
  19. 'accessToken': accessToken,
  20. 'debug': debug,
  21. 'clientId': clientId,
  22. 'channel': channel,
  23. },
  24. );
  25. return result ?? false;
  26. }
  27. @override
  28. Future<void> trackEvent(String eventName,
  29. {Map<String, dynamic>? eventProperties}) async {
  30. await methodChannel.invokeMethod<void>(
  31. 'track',
  32. <String, dynamic>{
  33. 'eventId': eventName,
  34. 'eventParams': eventProperties,
  35. },
  36. );
  37. }
  38. @override
  39. Future<void> trackPay(String orderNo, String itemName, int amountCent,
  40. String currency, PayType payType) async {
  41. await methodChannel.invokeMethod<void>(
  42. 'trackPay',
  43. <String, dynamic>{
  44. "orderNo": orderNo,
  45. "itemName": itemName,
  46. "amount": amountCent,
  47. "currency": currency,
  48. "payType": payType.name,
  49. },
  50. );
  51. }
  52. @override
  53. Future<void> logout() async {
  54. // if android
  55. if (Platform.isAndroid) {
  56. await methodChannel.invokeMethod<void>('logout');
  57. }
  58. }
  59. @override
  60. Future<void> login(String clientId) async {
  61. // if android
  62. if (Platform.isAndroid) {
  63. await methodChannel.invokeMethod<void>(
  64. 'login',
  65. <String, dynamic>{
  66. 'clientId': clientId,
  67. },
  68. );
  69. }
  70. }
  71. @override
  72. Future<void> trackAdLoadEvent(String? adUnionType, String? adPlacementId,
  73. String? adSourceId, String? adType, String? adnType) {
  74. return methodChannel.invokeMethod<void>(
  75. 'trackAdLoadEvent',
  76. <String, dynamic>{
  77. 'adUnionType': adUnionType,
  78. 'adPlacementId': adPlacementId,
  79. 'adSourceId': adSourceId,
  80. 'adType': adType,
  81. 'adnType': adnType,
  82. },
  83. );
  84. }
  85. @override
  86. Future<void> trackAdShowEvent(String? adUnionType, String? adPlacementId,
  87. String? adSourceId, String? adType, String? adnType, double? ecpm) {
  88. return methodChannel.invokeMethod<void>(
  89. 'trackAdShowEvent',
  90. <String, dynamic>{
  91. 'adUnionType': adUnionType,
  92. 'adPlacementId': adPlacementId,
  93. 'adSourceId': adSourceId,
  94. 'adType': adType,
  95. 'adnType': adnType,
  96. 'ecpm': ecpm,
  97. },
  98. );
  99. }
  100. @override
  101. Future<void> trackAdClickEvent(String? adUnionType, String? adPlacementId,
  102. String? adSourceId, String? adType, String? adnType, double? ecpm) {
  103. return methodChannel.invokeMethod<void>(
  104. 'trackAdClickEvent',
  105. <String, dynamic>{
  106. 'adUnionType': adUnionType,
  107. 'adPlacementId': adPlacementId,
  108. 'adSourceId': adSourceId,
  109. 'adType': adType,
  110. 'adnType': adnType,
  111. 'ecpm': ecpm,
  112. },
  113. );
  114. }
  115. @override
  116. Future<void> trackAdPlayStartEvent(String? adUnionType, String? adPlacementId,
  117. String? adSourceId, String? adType, String? adnType, double? ecpm) {
  118. return methodChannel.invokeMethod<void>(
  119. 'trackAdPlayStartEvent',
  120. <String, dynamic>{
  121. 'adUnionType': adUnionType,
  122. 'adPlacementId': adPlacementId,
  123. 'adSourceId': adSourceId,
  124. 'adType': adType,
  125. 'adnType': adnType,
  126. 'ecpm': ecpm,
  127. },
  128. );
  129. }
  130. @override
  131. Future<void> trackAdPlayEndEvent(
  132. String? adUnionType,
  133. String? adPlacementId,
  134. String? adSourceId,
  135. String? adType,
  136. String? adnType,
  137. double? ecpm,
  138. int? duration,
  139. bool? isPlayOver) {
  140. return methodChannel.invokeMethod<void>(
  141. 'trackAdPlayEndEvent',
  142. <String, dynamic>{
  143. 'adUnionType': adUnionType,
  144. 'adPlacementId': adPlacementId,
  145. 'adSourceId': adSourceId,
  146. 'adType': adType,
  147. 'adnType': adnType,
  148. 'ecpm': ecpm,
  149. 'duration': duration,
  150. 'isPlayOver': isPlayOver,
  151. },
  152. );
  153. }
  154. }
  155. enum PayType {
  156. alipay,
  157. wechat,
  158. apple,
  159. unknown,
  160. }
  161. extension PayTypeExtension on PayType {
  162. String get name {
  163. switch (this) {
  164. case PayType.alipay:
  165. return "支付宝";
  166. case PayType.wechat:
  167. return "微信";
  168. case PayType.apple:
  169. return "苹果支付";
  170. default:
  171. return "未知";
  172. }
  173. }
  174. }