From ff8b32671a0d3947837968226d48893a689ec93c Mon Sep 17 00:00:00 2001 From: ShiCheng Lu Date: Thu, 10 Jul 2025 11:00:01 -0400 Subject: [PATCH 1/5] add campaign metadata as intent extra value --- sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt | 6 +++++- sdk/src/main/java/io/radar/sdk/RadarSettings.kt | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt b/sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt index b05f85301..652c2b5ce 100644 --- a/sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt +++ b/sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt @@ -12,6 +12,7 @@ import android.net.Uri import android.os.Build import androidx.core.app.NotificationCompat import io.radar.sdk.model.RadarEvent +import org.json.JSONObject class RadarNotificationHelper { @@ -19,6 +20,7 @@ class RadarNotificationHelper { private const val CHANNEL_NAME = "Location" private const val NOTIFICATION_ID = 20160525 // Radar's birthday! const val RADAR_CAMPAIGN_ID = "radar_campaign_id" + const val RADAR_CAMPAIGN_METADATA = "radar_campaign_metadata" @SuppressLint("DiscouragedApi", "LaunchActivityFromNotification") internal fun showNotifications(context: Context, events: Array) { @@ -46,15 +48,17 @@ class RadarNotificationHelper { val smallIcon = context.applicationContext.resources.getIdentifier(iconString, "drawable", context.applicationContext.packageName) if (notificationText != null && campaignType == "eventBased") { - val notificationTitle: String? = event.metadata?.optString("radar:notificationTitle") val subTitle: String? = event.metadata?.optString("radar:notificationSubTitle") val campaignId: String? = event.metadata?.optString("radar:campaignId") val deeplinkURL = event.metadata?.optString("radar:notificationURL") + val campaignMetadata: String? = event.metadata?.optString("radar:campaignMetadata") + Radar.logger.d("creating campaign notification with metadata = ${event.metadata}") val intent = context.packageManager.getLaunchIntentForPackage(context.packageName)?.apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP putExtra(RADAR_CAMPAIGN_ID, campaignId) + putExtra(RADAR_CAMPAIGN_METADATA, campaignMetadata) if (deeplinkURL != null) { data = Uri.parse(deeplinkURL) action = Intent.ACTION_VIEW diff --git a/sdk/src/main/java/io/radar/sdk/RadarSettings.kt b/sdk/src/main/java/io/radar/sdk/RadarSettings.kt index d825c4b88..d669003a5 100644 --- a/sdk/src/main/java/io/radar/sdk/RadarSettings.kt +++ b/sdk/src/main/java/io/radar/sdk/RadarSettings.kt @@ -355,6 +355,7 @@ internal object RadarSettings { } internal fun getHost(context: Context): String { + return "https://api-shicheng.radar-staging.com" return getSharedPreferences(context).getString(KEY_HOST, null) ?: "https://api.radar.io" } From 643ba7191a1d4904b9a16d6afa2653bb9543438a Mon Sep 17 00:00:00 2001 From: ShiCheng Lu Date: Thu, 10 Jul 2025 15:53:32 -0400 Subject: [PATCH 2/5] . --- sdk/src/main/java/io/radar/sdk/RadarSettings.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/sdk/src/main/java/io/radar/sdk/RadarSettings.kt b/sdk/src/main/java/io/radar/sdk/RadarSettings.kt index d669003a5..d825c4b88 100644 --- a/sdk/src/main/java/io/radar/sdk/RadarSettings.kt +++ b/sdk/src/main/java/io/radar/sdk/RadarSettings.kt @@ -355,7 +355,6 @@ internal object RadarSettings { } internal fun getHost(context: Context): String { - return "https://api-shicheng.radar-staging.com" return getSharedPreferences(context).getString(KEY_HOST, null) ?: "https://api.radar.io" } From 95d8ade009afb8db4d12152a4f87f23b1f3737bd Mon Sep 17 00:00:00 2001 From: ShiCheng Lu Date: Thu, 10 Jul 2025 15:55:26 -0400 Subject: [PATCH 3/5] Update sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt b/sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt index 652c2b5ce..a19027e89 100644 --- a/sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt +++ b/sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt @@ -12,8 +12,6 @@ import android.net.Uri import android.os.Build import androidx.core.app.NotificationCompat import io.radar.sdk.model.RadarEvent -import org.json.JSONObject - class RadarNotificationHelper { internal companion object { From 379d72bac5b43c3b9a677c3d0864058962f5f779 Mon Sep 17 00:00:00 2001 From: ShiCheng Lu Date: Tue, 12 Aug 2025 11:20:50 -0400 Subject: [PATCH 4/5] testing --- .../java/io/radar/example/MainActivity.kt | 9 ++++++- .../example/MyActivityLifecycleCallbacks.kt | 27 +++++++++++++++++++ .../java/io/radar/example/MyRadarReceiver.kt | 1 + .../io/radar/sdk/RadarNotificationHelper.kt | 17 ++++++------ 4 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 example/src/main/java/io/radar/example/MyActivityLifecycleCallbacks.kt diff --git a/example/src/main/java/io/radar/example/MainActivity.kt b/example/src/main/java/io/radar/example/MainActivity.kt index 3ec1b4524..0f09a8735 100644 --- a/example/src/main/java/io/radar/example/MainActivity.kt +++ b/example/src/main/java/io/radar/example/MainActivity.kt @@ -4,6 +4,7 @@ import android.Manifest import android.content.Context import android.content.pm.PackageManager import android.location.Location +import android.os.Build import android.os.Bundle import android.util.Log import android.widget.Button @@ -11,6 +12,7 @@ import android.widget.LinearLayout import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat +import androidx.core.content.edit import io.radar.sdk.Radar import io.radar.sdk.RadarTrackingOptions import io.radar.sdk.RadarTripOptions @@ -32,7 +34,12 @@ class MainActivity : AppCompatActivity() { setContentView(R.layout.activity_main) val receiver = MyRadarReceiver() - Radar.initialize(this, "prj_test_pk_0000000000000000000000000000000000000000", receiver, Radar.RadarLocationServicesProvider.GOOGLE, true) + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + registerActivityLifecycleCallbacks(MyActivityLifecycleCallbacks()) + } + + Radar.initialize(this, "prj_live_pk_bbcc3b729cf153b34d67170da37e1a3b50c7c631", receiver, Radar.RadarLocationServicesProvider.GOOGLE, true) Radar.sdkVersion().let { Log.i("version", it) } val verifiedReceiver = object : RadarVerifiedReceiver() { diff --git a/example/src/main/java/io/radar/example/MyActivityLifecycleCallbacks.kt b/example/src/main/java/io/radar/example/MyActivityLifecycleCallbacks.kt new file mode 100644 index 000000000..12dc5c8d5 --- /dev/null +++ b/example/src/main/java/io/radar/example/MyActivityLifecycleCallbacks.kt @@ -0,0 +1,27 @@ +package io.radar.example + +import android.app.Activity +import android.app.Application +import android.os.Bundle +import android.util.Log +import org.json.JSONObject + +class MyActivityLifecycleCallbacks : Application.ActivityLifecycleCallbacks { + override fun onActivityResumed(activity: Activity) { + // Your custom logic. E.g. tracking, analytics, session checks, etc. + Log.d("MyLifecycle", "onActivityResumed, Intent metadata: " + activity.intent.getStringExtra("radar_campaign_metadata")) + + val campaignMetadata = try { + activity.intent.getStringExtra("radar_campaign_metadata")?.let { JSONObject(it) } + } catch (e: Exception) { + null + } + } + // Other lifecycle methods (optional) + override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {} + override fun onActivityStarted(activity: Activity) {} + override fun onActivityPaused(activity: Activity) {} + override fun onActivityStopped(activity: Activity) {} + override fun onActivityDestroyed(activity: Activity) {} + override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {} +} \ No newline at end of file diff --git a/example/src/main/java/io/radar/example/MyRadarReceiver.kt b/example/src/main/java/io/radar/example/MyRadarReceiver.kt index 01a6e8707..ef527997b 100644 --- a/example/src/main/java/io/radar/example/MyRadarReceiver.kt +++ b/example/src/main/java/io/radar/example/MyRadarReceiver.kt @@ -19,6 +19,7 @@ class MyRadarReceiver : RadarReceiver() { var identifier = 0 internal fun notify(context: Context, body: String) { + return; identifier++ val channelId = "example" diff --git a/sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt b/sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt index a19027e89..544bb4999 100644 --- a/sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt +++ b/sdk/src/main/java/io/radar/sdk/RadarNotificationHelper.kt @@ -10,6 +10,7 @@ import android.content.Intent import android.graphics.Color import android.net.Uri import android.os.Build +import android.util.Log import androidx.core.app.NotificationCompat import io.radar.sdk.model.RadarEvent class RadarNotificationHelper { @@ -46,21 +47,19 @@ class RadarNotificationHelper { val smallIcon = context.applicationContext.resources.getIdentifier(iconString, "drawable", context.applicationContext.packageName) if (notificationText != null && campaignType == "eventBased") { - val notificationTitle: String? = event.metadata?.optString("radar:notificationTitle") - val subTitle: String? = event.metadata?.optString("radar:notificationSubTitle") - val campaignId: String? = event.metadata?.optString("radar:campaignId") - val deeplinkURL = event.metadata?.optString("radar:notificationURL") - val campaignMetadata: String? = event.metadata?.optString("radar:campaignMetadata") + val notificationTitle: String? = event.metadata.optString("radar:notificationTitle") + val subTitle: String? = event.metadata.optString("radar:notificationSubTitle") + val campaignId: String? = event.metadata.optString("radar:campaignId") + val deeplinkURL = event.metadata.optString("radar:notificationURL") + val campaignMetadata: String? = event.metadata.optString("radar:campaignMetadata") Radar.logger.d("creating campaign notification with metadata = ${event.metadata}") val intent = context.packageManager.getLaunchIntentForPackage(context.packageName)?.apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP putExtra(RADAR_CAMPAIGN_ID, campaignId) putExtra(RADAR_CAMPAIGN_METADATA, campaignMetadata) - if (deeplinkURL != null) { - data = Uri.parse(deeplinkURL) - action = Intent.ACTION_VIEW - } + data = Uri.parse(deeplinkURL) + action = Intent.ACTION_VIEW } val pendingIntentForAppOpen = PendingIntent.getActivity( From b5d6635c159f39213d76c693d6f95cd3bdbe8638 Mon Sep 17 00:00:00 2001 From: ShiCheng Lu Date: Wed, 3 Sep 2025 13:35:22 -0400 Subject: [PATCH 5/5] cleanup --- example/src/main/java/io/radar/example/MainActivity.kt | 3 +-- example/src/main/java/io/radar/example/MyRadarReceiver.kt | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/example/src/main/java/io/radar/example/MainActivity.kt b/example/src/main/java/io/radar/example/MainActivity.kt index 0f09a8735..c0b5dce6f 100644 --- a/example/src/main/java/io/radar/example/MainActivity.kt +++ b/example/src/main/java/io/radar/example/MainActivity.kt @@ -12,7 +12,6 @@ import android.widget.LinearLayout import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat -import androidx.core.content.edit import io.radar.sdk.Radar import io.radar.sdk.RadarTrackingOptions import io.radar.sdk.RadarTripOptions @@ -39,7 +38,7 @@ class MainActivity : AppCompatActivity() { registerActivityLifecycleCallbacks(MyActivityLifecycleCallbacks()) } - Radar.initialize(this, "prj_live_pk_bbcc3b729cf153b34d67170da37e1a3b50c7c631", receiver, Radar.RadarLocationServicesProvider.GOOGLE, true) + Radar.initialize(this, "prj_test_pk_0000000000000000000000000000000000000000", receiver, Radar.RadarLocationServicesProvider.GOOGLE, true) Radar.sdkVersion().let { Log.i("version", it) } val verifiedReceiver = object : RadarVerifiedReceiver() { diff --git a/example/src/main/java/io/radar/example/MyRadarReceiver.kt b/example/src/main/java/io/radar/example/MyRadarReceiver.kt index ef527997b..01a6e8707 100644 --- a/example/src/main/java/io/radar/example/MyRadarReceiver.kt +++ b/example/src/main/java/io/radar/example/MyRadarReceiver.kt @@ -19,7 +19,6 @@ class MyRadarReceiver : RadarReceiver() { var identifier = 0 internal fun notify(context: Context, body: String) { - return; identifier++ val channelId = "example"