3 Коммиты c607429bda ... 21b61cd3e3

Автор SHA1 Сообщение Дата
  leon 21b61cd3e3 Merge branch 'v1.0.1' of http://git.atmob.com:28999/Atmob-Flutter/ElectronicAssistant into v1.0.1 1 год назад
  leon fbbbf19f4c ios引力引擎获取idfa 1 год назад
  leon ab2d775d63 ios引力引擎添加获取idfa 1 год назад

+ 2 - 0
ios/Runner/Info.plist

@@ -47,5 +47,7 @@
 		<string>UIInterfaceOrientationLandscapeLeft</string>
 		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
+    <key>NSUserTrackingUsageDescription</key>
+    <string>此应用使用您的数据来提供个性化广告体验。</string>
 </dict>
 </plist>

+ 2 - 2
lib/module/store/view.dart

@@ -533,9 +533,9 @@ class StorePage extends BasePage<StoreController> {
 extension on PaymentWay {
   get _icon {
     switch (payMethod) {
-      case PayMethod.alipay:
+      case Constants.paymentMethodAlipay:
         return Assets.images.iconStoreAlipay.image(width: 20.w, height: 20.w);
-      case PayMethod.wechat:
+      case Constants.paymentMethodWechat:
         return Assets.images.iconStoreWechatPay
             .image(width: 20.w, height: 20.w);
       default:

+ 7 - 7
lib/sdk/gravity/gravity_helper.dart

@@ -2,12 +2,12 @@ import 'package:gravity_engine/gravity_engine.dart';
 
 class GravityHelper {
   static init() {
-    // GravityEngine.initialize(
-    //         "3q4k1zgleJpExobevRf0c6G2Owb5nIas", "test", "test", true)
-    //     .then((isAttributed) {
-    //   print("isAttributed: $isAttributed");
-    // }).catchError((error) {
-    //   print("error: $error");
-    // });
+    GravityEngine.initialize(
+        "appid","3q4k1zgleJpExobevRf0c6G2Owb5nIas", "test", "test", true)
+        .then((isAttributed) {
+      print("isAttributed: $isAttributed");
+    }).catchError((error) {
+      print("error: $error");
+    });
   }
 }

+ 14 - 0
plugin/gravity_engine/ios/Classes/GEDefine.swift

@@ -0,0 +1,14 @@
+//
+//  GEDefine.swift
+//  gravity_engine
+//
+//  Created by leon on 2024/9/26.
+//
+
+import Foundation
+
+func DebugPrint(_ items: Any..., separator: String = " ", terminator: String = "\n") {
+    #if DEBUG
+    Swift.print(items.map { "\($0)" }.joined(separator: separator), terminator: terminator)
+    #endif
+}

+ 23 - 18
plugin/gravity_engine/ios/Classes/GravityEnginePlugin.swift

@@ -17,9 +17,7 @@ public class GravityEnginePlugin: NSObject, FlutterPlugin {
     private static let ARG_CHANNEL = "channel"
 
     //ios>>>
-    private static let ARG_APPID = "appid"
-    private static let ARG_IDFA = "idfa"
-    private static let ARG_IDFV = "idfv"
+    private static let ARG_APPID = "appId"
     //<<<ios
 
     private static let ARG_EVENT_ID = "eventId"
@@ -31,8 +29,8 @@ public class GravityEnginePlugin: NSObject, FlutterPlugin {
     private static let ARG_PAY_TYPE = "payType"
     private static let ARG_ITEM_NAME = "itemName"
 
-    private var gravityEngineSDK: GravityEngineSDK?
-    private var isInitialized = false
+    public static var gravityEngineSDK: GravityEngineSDK?
+    private static var isInitialized = false
 
     public static func register(with registrar: FlutterPluginRegistrar) {
         let channel = FlutterMethodChannel(name: "gravity_engine", binaryMessenger: registrar.messenger())
@@ -43,27 +41,25 @@ public class GravityEnginePlugin: NSObject, FlutterPlugin {
     public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
         switch call.method {
         case GravityEnginePlugin.METHOD_INITIALIZE:
-            initialize(call: call, result: result)
-            print("GravityEnginePlugin.METHOD_INITIALIZE = \(call.method)");
+            DebugPrint("GravityEnginePlugin.METHOD_INITIALIZE = \(call.method)");
+            IDFAManager.getIDFA(call: call, result: result)
         case GravityEnginePlugin.METHOD_TRACK:
-            track(call: call, result: result)
-            print("GravityEnginePlugin.METHOD_TRACK = \(call.method)");
+            DebugPrint("GravityEnginePlugin.METHOD_TRACK = \(call.method)");
+            GravityEnginePlugin.track(call: call, result: result)
         case GravityEnginePlugin.METHOD_TRACK_PAY:
-            trackPay(call: call, result: result)
+            DebugPrint("GravityEnginePlugin.METHOD_TRACK_PAY = \(call.method)");
+            GravityEnginePlugin.trackPay(call: call, result: result)
         default:
             result(FlutterMethodNotImplemented)
         }
     }
 
     //init
-    private func initialize(call: FlutterMethodCall, result: @escaping FlutterResult) {
+    public static func initialize(call: FlutterMethodCall, result: @escaping FlutterResult, idfa: String) {
         guard let args = call.arguments as? [String: Any],
               let accessToken = args[GravityEnginePlugin.ARG_ACCESS_TOKEN] as? String,
               let appid = args[GravityEnginePlugin.ARG_APPID] as? String,
-              let idfa = args[GravityEnginePlugin.ARG_IDFA] as? String,
-              let idfv = args[GravityEnginePlugin.ARG_IDFV] as? String,
               let debug = args[GravityEnginePlugin.ARG_DEBUG] as? Bool,
-              let clientId = args[GravityEnginePlugin.ARG_CLIENT_ID] as? String,
               let channel = args[GravityEnginePlugin.ARG_CHANNEL] as? String else {
             result(FlutterError(code: "-1", message: "Missing required arguments", details: nil))
             return
@@ -87,6 +83,15 @@ public class GravityEnginePlugin: NSObject, FlutterPlugin {
         // 开启自动采集
         gravityEngineSDK?.enableAutoTrack(GravityEngineAutoTrackEventType.eventTypeAll);
 
+        //获取idfv
+        var idfv = ""
+        if let idfVendor = UIDevice.current.identifierForVendor {
+            idfv = idfVendor.uuidString
+            DebugPrint("引力引擎 IDFV == \(idfv)")
+        } else {
+            DebugPrint("引力引擎 无法获取 IDFV")
+        }
+        
         //获取当前版本号
         var appVersionName = 1
         if let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
@@ -101,11 +106,11 @@ public class GravityEnginePlugin: NSObject, FlutterPlugin {
 
         //初始化sdk
         gravityEngineSDK?.initializeGravityEngine(withClientId: idfv, withUserName: idfv, withVersion: Int32(appVersionName), withAsaEnable:enableAsa, withIdfa:idfa, withIdfv:idfv, withCaid1:userCaid1MD5, withCaid2:userCaid2MD5, withSyncAttribution:enableSyncAttribution, withSuccessCallback: { response in
-            print("gravity engine initialize success, response is ", response);
+//            DebugPrint("gravity engine initialize success, response is ", response);
             self.isInitialized = true
             result(response)
         }, withErrorCallback: { error in
-            print("gravity engine initialize failed, and error is", error);
+//            DebugPrint("gravity engine initialize failed, and error is", error);
             result(FlutterError(code: "-1", message: "Initialization failed", details: error.localizedDescription))
         });
 
@@ -123,7 +128,7 @@ public class GravityEnginePlugin: NSObject, FlutterPlugin {
     }
 
     //event
-    private func track(call: FlutterMethodCall, result: @escaping FlutterResult) {
+    private static func track(call: FlutterMethodCall, result: @escaping FlutterResult) {
         guard let args = call.arguments as? [String: Any],
               let eventId = args[GravityEnginePlugin.ARG_EVENT_ID] as? String else {
             result(FlutterError(code: "-1", message: "Missing eventId", details: nil))
@@ -139,7 +144,7 @@ public class GravityEnginePlugin: NSObject, FlutterPlugin {
     }
 
     //pay
-    private func trackPay(call: FlutterMethodCall, result: @escaping FlutterResult) {
+    private static func trackPay(call: FlutterMethodCall, result: @escaping FlutterResult) {
         guard let args = call.arguments as? [String: Any],
               let orderNo = args[GravityEnginePlugin.ARG_ORDER_NO] as? String,
               let amount = args[GravityEnginePlugin.ARG_AMOUNT] as? Int,

+ 66 - 0
plugin/gravity_engine/ios/Classes/IDFAManager.swift

@@ -0,0 +1,66 @@
+//
+//  IDFAManager.swift
+//  sunoAi
+//
+//  Created by leon on 2024/4/9.
+//
+
+import Foundation
+import AppTrackingTransparency
+import AdSupport
+import Flutter
+
+class IDFAManager{
+    
+    static func getIDFA(call: FlutterMethodCall, result: @escaping FlutterResult) {
+        
+        if #available(iOS 14.0, *){//ios14以上系统 请求用户授权
+            
+            ATTrackingManager.requestTrackingAuthorization { status in
+                switch status {
+                case .authorized:
+                    let idfa = ASIdentifierManager.shared().advertisingIdentifier
+                    DebugPrint("IDFA 用户同意了授权: \(idfa.uuidString)")
+                    initGravityEngineSDK(call: call, result: result, idfa: idfa.uuidString)
+                case .denied:
+                    DebugPrint("IDFA 用户拒绝了授权")
+                    initGravityEngineSDK(call: call, result: result, idfa: "")
+                case .restricted:
+                    DebugPrint("IDFA 应用无法请求授权,可能由于限制")
+                    initGravityEngineSDK(call: call, result: result, idfa: "")
+                case .notDetermined:
+                    DebugPrint("IDFA 用户尚未做出选择")
+                    initGravityEngineSDK(call: call, result: result, idfa: "")
+                @unknown default:
+                    break
+                }
+            }
+            
+        }else{//ios14以下系统 请求用户授权
+            if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
+                let idfa = ASIdentifierManager.shared().advertisingIdentifier
+                DebugPrint("ios14以下系统 IDFA 用户同意了授权: \(idfa)")
+                initGravityEngineSDK(call: call, result: result, idfa: idfa.uuidString)
+            } else {
+                DebugPrint("ios14以下系统 IDFA 用户拒绝了授权")
+                initGravityEngineSDK(call: call, result: result, idfa: "")
+            }
+            
+        }
+        
+    }
+    
+    //四种情况下都在这里初始化引力引擎sdk
+    static func initGravityEngineSDK(call: FlutterMethodCall, result: @escaping FlutterResult, idfa:String){
+        
+        //引力引擎调用的时候需返回主线程加载 否则程序会崩溃
+        DispatchQueue.main.async {
+            if (GravityEnginePlugin.gravityEngineSDK == nil){
+                GravityEnginePlugin.initialize(call: call, result: result, idfa: idfa)
+            }
+        }
+        
+    }
+    
+}
+