From b29d9071d3e0c86a0cb96771893b65bd0195c757 Mon Sep 17 00:00:00 2001 From: "Huang, Larry" Date: Wed, 3 May 2023 15:13:11 +0800 Subject: [PATCH] removed dummy code --- .../AmplitudeFlutterPlugin.kt | 66 +++++++++++++- ios/Classes/SwiftAmplitudeFlutterPlugin.swift | 72 ++++++++++++++++ lib/amplitude.dart | 8 ++ lib/trackingOptions.dart | 85 +++++++++++++++++++ 4 files changed, 230 insertions(+), 1 deletion(-) create mode 100644 lib/trackingOptions.dart diff --git a/android/src/main/kotlin/com/amplitude/amplitude_flutter/AmplitudeFlutterPlugin.kt b/android/src/main/kotlin/com/amplitude/amplitude_flutter/AmplitudeFlutterPlugin.kt index b17495a..3a432d1 100644 --- a/android/src/main/kotlin/com/amplitude/amplitude_flutter/AmplitudeFlutterPlugin.kt +++ b/android/src/main/kotlin/com/amplitude/amplitude_flutter/AmplitudeFlutterPlugin.kt @@ -4,6 +4,7 @@ import android.app.Application import android.content.Context import com.amplitude.api.Amplitude import com.amplitude.api.AmplitudeServerZone +import com.amplitude.api.TrackingOptions import com.amplitude.api.Identify import com.amplitude.api.Revenue import io.flutter.embedding.engine.plugins.FlutterPlugin @@ -14,6 +15,7 @@ import io.flutter.plugin.common.MethodChannel.Result import io.flutter.plugin.common.PluginRegistry.Registrar import org.json.JSONArray import org.json.JSONObject +import android.util.Log class AmplitudeFlutterPlugin : FlutterPlugin, MethodCallHandler { companion object { @@ -42,7 +44,7 @@ class AmplitudeFlutterPlugin : FlutterPlugin, MethodCallHandler { override fun onMethodCall(call: MethodCall, result: Result) { val json = JSONObject(call.arguments.toString()) val instanceName = json["instanceName"].toString() - + when (call.method) { "init" -> { val client = Amplitude.getInstance(instanceName) @@ -249,6 +251,68 @@ class AmplitudeFlutterPlugin : FlutterPlugin, MethodCallHandler { result.success("setServerZone called..") } + + "setTrackingOptions" -> { + val client = Amplitude.getInstance(instanceName) + val options = TrackingOptions() + + if(!json.getBoolean("Adid")) + options.disableAdid() + + if(!json.getBoolean("ApiLevel")) + options.disableApiLevel() + + if(!json.getBoolean("AppSetId")) + options.disableAppSetId() + + if(!json.getBoolean("Carrier")) + options.disableCarrier() + + if(!json.getBoolean("City")) + options.disableCity() + + if(!json.getBoolean("Country")) + options.disableCountry() + + if(!json.getBoolean("DeviceBrand")) + options.disableDeviceBrand() + + if(!json.getBoolean("DeviceManufacturer")) + options.disableDeviceManufacturer() + + if(!json.getBoolean("DeviceModel")) + options.disableDeviceModel() + + if(!json.getBoolean("DMA")) + options.disableDma() + + if(!json.getBoolean("IpAddress")) + options.disableIpAddress() + + if(!json.getBoolean("Language")) + options.disableLanguage() + + if(!json.getBoolean("LatLng")) + options.disableLatLng() + + if(!json.getBoolean("OsName")) + options.disableOsName() + + if(!json.getBoolean("OsVersion")) + options.disableOsVersion() + + if(!json.getBoolean("Platform")) + options.disablePlatform() + + if(!json.getBoolean("Region")) + options.disableRegion() + + if(!json.getBoolean("VersionName")) + options.disableVersionName() + + client.setTrackingOptions(options) + result.success("setTrackingOptions called..") + } else -> { result.notImplemented() diff --git a/ios/Classes/SwiftAmplitudeFlutterPlugin.swift b/ios/Classes/SwiftAmplitudeFlutterPlugin.swift index 06fab05..0128fae 100644 --- a/ios/Classes/SwiftAmplitudeFlutterPlugin.swift +++ b/ios/Classes/SwiftAmplitudeFlutterPlugin.swift @@ -201,6 +201,78 @@ import Amplitude Amplitude.instance(withName: instanceName).setServerZone(ampServerZone, updateServerUrl: updateServerUrl) result(true) + + // TrackingOptions + case "setTrackingOptions": + let options = AMPTrackingOptions() + + if !(args["Carrier"] as! Bool) { + options.disableCarrier() + } + + if !(args["City"] as! Bool) { + options.disableCity() + } + + if !(args["Country"] as! Bool) { + options.disableCountry() + } + + if !(args["DeviceManufacturer"] as! Bool) { + options.disableDeviceManufacturer() + } + + if !(args["DeviceModel"] as! Bool) { + options.disableDeviceModel() + } + + if !(args["DMA"] as! Bool) { + options.disableDMA() + } + + if !(args["IDFA"] as! Bool) { + options.disableIDFA() + } + + if !(args["IDFV"] as! Bool) { + options.disableIDFV() + } + + if !(args["IpAddress"] as! Bool) { + options.disableIPAddress() + } + + if !(args["Language"] as! Bool) { + options.disableLanguage() + } + + if !(args["LatLng"] as! Bool) { + options.disableLatLng() + } + + if !(args["OsName"] as! Bool) { + options.disableOSName() + } + + if !(args["OsVersion"] as! Bool) { + options.disableOSVersion() + } + + if !(args["Platform"] as! Bool) { + options.disablePlatform() + } + + if !(args["Region"] as! Bool) { + options.disableRegion() + } + + if !(args["VersionName"] as! Bool) { + options.disableVersionName() + } + + Amplitude.instance(withName: instanceName).setTrackingOptions(options) + result(true) + default: result(FlutterMethodNotImplemented) } diff --git a/lib/amplitude.dart b/lib/amplitude.dart index 378f653..54d4ee3 100644 --- a/lib/amplitude.dart +++ b/lib/amplitude.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import 'package:amplitude_flutter/constants.dart'; import 'package:amplitude_flutter/identify.dart'; +import 'package:amplitude_flutter/trackingOptions.dart'; import 'package:flutter/services.dart'; abstract class _Amplitude { @@ -330,4 +331,11 @@ class Amplitude extends _Amplitude { return await _channel.invokeMethod('setServerZone', jsonEncode(properties)); } + + /// Set Amplitude Tracking Options, to enabla or disable some default properties. + Future setTrackingOptions(TrackingOptions options) async { + Map properties = _baseProperties(); + properties.addAll(options.getProperties()); + return await _channel.invokeMethod('setTrackingOptions', jsonEncode(properties)); + } } diff --git a/lib/trackingOptions.dart b/lib/trackingOptions.dart new file mode 100644 index 0000000..9f3814b --- /dev/null +++ b/lib/trackingOptions.dart @@ -0,0 +1,85 @@ +import 'package:flutter/foundation.dart'; +import 'dart:convert'; + +enum TrackingOptionStatus { unknown, enabled, disabled } + +// iOS only +// IDFA, IDFV +// Android only +// Adid, ApiLevel, AppSetId, DeviceBrand + +class TrackingOptions { + final Map _options = { + 'Adid': true, + 'ApiLevel': true, + 'AppSetId': true, + 'Carrier': true, + 'City': true, + 'Country': true, + 'DeviceBrand': true, + 'DeviceManufacturer': true, + 'DeviceModel': true, + 'DMA': true, + 'IDFA': true, + 'IDFV': true, + 'IpAddress': true, + 'Language': true, + 'LatLng': true, + 'OsName': true, + 'OsVersion': true, + 'Platform': true, + 'Region': true, + 'VersionName': true + }; + + TrackingOptionStatus enableProperty(String key) { + if (_options.containsKey(key)) { + _options[key] = true; + return TrackingOptionStatus.enabled; + } + return TrackingOptionStatus.unknown; + } + + TrackingOptionStatus disableProperty(String key) { + if (_options.containsKey(key)) { + _options[key] = false; + return TrackingOptionStatus.disabled; + } + return TrackingOptionStatus.unknown; + } + + int enableProperties(List optionKeys) { + int count = 0; + optionKeys.forEach((key) { + if (_options.containsKey(key)) { + _options[key] = true; + count++; + } + }); + return count; + } + + int disableProperties(List optionKeys) { + int count = 0; + optionKeys.forEach((key) { + if (_options.containsKey(key)) { + _options[key] = false; + count++; + } + }); + return count; + } + + TrackingOptionStatus queryProperty(String key) { + if (_options.containsKey(key)) { + if(_options[key]!) + return TrackingOptionStatus.enabled; + return TrackingOptionStatus.disabled; + } + return TrackingOptionStatus.unknown; + } + + Map getProperties(){ + return new Map.from(_options); + } +}