Skip to content

Commit 7bc14f9

Browse files
committed
add lifecycle events
1 parent 61ac22d commit 7bc14f9

File tree

6 files changed

+38
-0
lines changed

6 files changed

+38
-0
lines changed

android/src/main/kotlin/com/example/confidence_flutter_sdk/ConfidenceFlutterSdkPlugin.kt

+12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.example.confidence_flutter_sdk
22

33
import android.content.Context
4+
import androidx.lifecycle.LifecycleObserver
5+
import com.spotify.confidence.AndroidLifecycleEventProducer
46
import com.spotify.confidence.Confidence
57
import com.spotify.confidence.ConfidenceFactory
68
import com.spotify.confidence.ConfidenceValue
@@ -32,6 +34,7 @@ class ConfidenceFlutterSdkPlugin: FlutterPlugin, MethodCallHandler, ActivityAwar
3234
private lateinit var confidence: Confidence
3335
private val coroutineScope = CoroutineScope(Dispatchers.IO)
3436
private lateinit var context: Context
37+
private lateinit var application: android.app.Application
3538

3639
override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
3740
channel = MethodChannel(flutterPluginBinding.binaryMessenger, "confidence_flutter_sdk")
@@ -69,6 +72,14 @@ class ConfidenceFlutterSdkPlugin: FlutterPlugin, MethodCallHandler, ActivityAwar
6972
val isEmpty = confidence.isStorageEmpty()
7073
result.success(isEmpty)
7174
}
75+
"trackApplicationLifecycleState" -> {
76+
confidence.track(
77+
AndroidLifecycleEventProducer(
78+
application = application,
79+
trackActivities = true
80+
))
81+
result.success(null)
82+
}
7283
"getString" -> {
7384
val key = call.argument<String>("key")!!
7485
val defaultValue = call.argument<String>("defaultValue")
@@ -138,6 +149,7 @@ class ConfidenceFlutterSdkPlugin: FlutterPlugin, MethodCallHandler, ActivityAwar
138149

139150
override fun onAttachedToActivity(binding: ActivityPluginBinding) {
140151
context = binding.activity.applicationContext
152+
application = binding.activity.application
141153
}
142154

143155
override fun onDetachedFromActivityForConfigChanges() {

example/lib/main.dart

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class _MyAppState extends State<MyApp> {
4646
await dotenv.load(fileName: ".env");
4747
await _confidenceFlutterSdkPlugin.setup(dotenv.env["API_KEY"]!);
4848
await _confidenceFlutterSdkPlugin.putContext("targeting_key", "random");
49+
await _confidenceFlutterSdkPlugin.trackApplicationLifecycleState();
4950
await _confidenceFlutterSdkPlugin.fetchAndActivate();
5051
object =
5152
(_confidenceFlutterSdkPlugin.getObject("hawkflag", <String, dynamic>{})).toString();

ios/Classes/ConfidenceFlutterSdkPlugin.swift

+12
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public class ConfidenceFlutterSdkPlugin: NSObject, FlutterPlugin {
99
}
1010

1111
var confidence: Confidence? = nil
12+
var lifecycleProducer: ConfidenceAppLifecycleProducer? = nil
1213

1314
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
1415
switch call.method {
@@ -79,6 +80,17 @@ public class ConfidenceFlutterSdkPlugin: NSObject, FlutterPlugin {
7980
confidence?.putContext(key: key, value: value)
8081
result("")
8182
break;
83+
case "trackApplicationLifecycleState":
84+
if(lifecycleProducer == nil) {
85+
lifecycleProducer = ConfidenceAppLifecycleProducer()
86+
}
87+
guard let producer = lifecycleProducer else {
88+
result("")
89+
break;
90+
}
91+
confidence?.track(producer: producer)
92+
result("")
93+
break;
8294
case "track":
8395
guard let args = call.arguments as? Dictionary<String, Any> else {
8496
return

lib/confidence_flutter_sdk.dart

+4
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,8 @@ class ConfidenceFlutterSdk {
101101
await ConfidenceFlutterSdkPlatform.instance.activateAndFetchAsync();
102102
await fillAllFlags();
103103
}
104+
105+
Future<void> trackApplicationLifecycleState() async {
106+
await ConfidenceFlutterSdkPlatform.instance.trackApplicationLifecycleState();
107+
}
104108
}

lib/confidence_flutter_sdk_method_channel.dart

+5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ class MethodChannelConfidenceFlutterSdk extends ConfidenceFlutterSdkPlatform {
2020
return await methodChannel.invokeMethod<void>('fetchAndActivate');
2121
}
2222

23+
@override
24+
Future<void> trackApplicationLifecycleState() async {
25+
return await methodChannel.invokeMethod<void>('trackApplicationLifecycleState');
26+
}
27+
2328
@override
2429
Future<void> activateAndFetchAsync() async {
2530
return await methodChannel.invokeMethod<void>('activateAndFetchAsync');

lib/confidence_flutter_sdk_platform_interface.dart

+4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ abstract class ConfidenceFlutterSdkPlatform extends PlatformInterface {
2323
_instance = instance;
2424
}
2525

26+
Future<void> trackApplicationLifecycleState() async {
27+
throw UnimplementedError('trackApplicationLifecycleState() has not been implemented.');
28+
}
29+
2630
Future<void> setup(String apiKey) {
2731
throw UnimplementedError('setup() has not been implemented.');
2832
}

0 commit comments

Comments
 (0)