braze-inc / braze-android-sdk Goto Github PK
View Code? Open in Web Editor NEWHome Page: https://www.braze.com
License: Other
Home Page: https://www.braze.com
License: Other
30.0.0
Couldn't reproduce
Not crashing the app
Crashing the app
Fatal Exception: java.lang.NoSuchFieldError: No static field Key of type Lkotlinx/coroutines/CoroutineExceptionHandler$Key; in class Lkotlinx/coroutines/CoroutineExceptionHandler; or its superclasses (declaration of 'kotlinx.coroutines.CoroutineExceptionHandler' appears in base.apk)
at com.braze.coroutine.BrazeCoroutineScope.<clinit>(SourceFile:1)
at com.braze.images.DefaultBrazeImageLoader.initDiskCacheTask(SourceFile:1)
at com.braze.images.DefaultBrazeImageLoader.<init>(SourceFile:9)
at com.braze.Braze.<init>(SourceFile:49)
at com.braze.Braze$Companion.getInstance(SourceFile:4)
at fr.vestiairecollective.BaseApplication.initBraze(BaseApplication.kt:385)
at fr.vestiairecollective.BaseApplication.onCreate(BaseApplication.kt:105)
at fr.vestiairecollective.app.VestiaireApplication.onCreate(VestiaireApplication.kt:27)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
at androidx.test.runner.MonitoringInstrumentation.callApplicationOnCreate(MonitoringInstrumentation.java:2)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
at android.app.ActivityThread.access$1100(ActivityThread.java:199)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Since we have upgrade the SDK to the latest version 30.0.0 we are noticing some crash only for Rooted, Unknown device - GCE X86 Phone, Android 9
26.1.0; 23.2.1
Braze.ContentCardsDisplay.Recycler
style with vertical padding:
<style name="Braze.ContentCardsDisplay.Recycler">
<item name="android:paddingTop">4dp</item>
<item name="android:paddingBottom">4dp</item>
</style>
ContentCardsFragment
ContentCardsFragment
screenContentCardsFragment
screenAll cards that were on the screen should log impression.
None of the cards are logging the impression. When debugging, I saw that layoutManager.findFirstVisibleItemPosition()
and layoutManager.findLastVisibleItemPosition()
always return -1
.
16:59:29.869 V The card at position 0 isn't on screen or does not have a valid adapter position. Not logging impression.
16:59:29.872 V The card at position 1 isn't on screen or does not have a valid adapter position. Not logging impression.
No response
Since Braze doesn't support any logout method, we would like to identify if the current user is from fresh installation (anonymous state) or after user has logged out in order to deal with Braze events differently (log directly or queue upon next login)
Probably we can introduce a shared preference to indicate if the user has logged in before or not.
Ideally it would be nice if we could access the state directly from the Braze User.
Alternatively I would like to confirm what is the specifications for BrazeUser.userId
when the user is anonymous - will it return a UUID or an empty string? Tests so far (SDK 25.0.0) seems it is empty string.
28.0.0
samples
) by following the instructions described in its readmeMainActivity
so that data is not flushed (ref)Attached video:
https://github.com/braze-inc/braze-android-sdk/assets/117751562/d7f78a90-83b4-47d4-a842-7e9cec22c117
The behavior is different from Android 13. When the same steps are followed on Android 13, only a single task shows in the Recent tasks drawer. Attached video for Android 13.
Double tasks show up in Recent tasks drawer. One of them is the actual launched app and the other one is Braze's NotificationTrampolineActivity
. Ideally, the trampoline activity should finish after launching the app. When you try clicking on the black activity (from recent tasks - as shown in video), it launches the app again.
2023-09-27 11:14:37.022 589-1046 ActivityTaskManager system_server W startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { act=com.braze.action.BRAZE_PUSH_CLICKED cmp=com.remitly.androidapp.internal/com.braze.push.NotificationTrampolineActivity (has extras) }
2023-09-27 11:14:37.034 953-996 WindowManagerShell com.android.systemui V Transition requested: android.os.BinderProxy@dabc836 TransitionRequestInfo { type = OPEN, triggerTask = TaskInfo{userId=0 taskId=89 displayId=0 isRunning=true baseIntent=Intent { act=com.braze.action.BRAZE_PUSH_CLICKED flg=0x10000000 cmp=com.remitly.androidapp.internal/com.braze.push.NotificationTrampolineActivity } baseActivity=ComponentInfo{com.remitly.androidapp.internal/com.braze.push.NotificationTrampolineActivity} topActivity=ComponentInfo{com.remitly.androidapp.internal/com.braze.push.NotificationTrampolineActivity} origActivity=null realActivity=ComponentInfo{com.remitly.androidapp.internal/com.braze.push.NotificationTrampolineActivity} numActivities=1 lastActiveTime=11184812 supportsMultiWindow=true resizeMode=1 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{android.window.IWindowContainerToken$Stub$Proxy@8e8e337} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 128 - 0, 0) topActivityInfo=ActivityInfo{3edb0a4 com.braze.push.NotificationTrampolineActivity} launchCookies=[] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=false isVisible=false isVisibleRequested=false isSleeping=false topActivityInSizeCompat=false topActivityEligibleForLetterboxEducation= false topActivityLetterboxed= false isFromDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=-1 topActivityLetterboxHeight=-1 locusId=null displayAreaFeatureId=1 cameraCompatControlState=hidden}, remoteTransition = RemoteTransition { remoteTransition = com.android.systemui.shared.system.RemoteAnimationRunnerCompat$1@ade5e0d, appThread = null, debugName = SysUILaunch }, displayChange = null }
2023-09-27 11:14:37.035 589-1046 ActivityTaskManager system_server I START u0 {act=com.braze.action.BRAZE_PUSH_CLICKED cmp=com.remitly.androidapp.internal/com.braze.push.NotificationTrampolineActivity (has extras)} with LAUNCH_SINGLE_INSTANCE from uid 10194 (realCallingUid=10158) (BAL_ALLOW_PENDING_INTENT) result code=0
2023-09-27 11:14:37.133 28113-28113 Braze v28....ckListener com.remitly.androidapp.internal V Skipping automatic registration for notification trampoline activity class.
2023-09-27 11:14:37.133 28113-28113 Braze v28....neActivity com.remitly.androidapp.internal V NotificationTrampolineActivity created
2023-09-27 11:14:37.143 28113-28113 Braze v28....ckListener com.remitly.androidapp.internal V Skipping automatic registration for notification trampoline activity class.
2023-09-27 11:14:37.145 28113-28113 Braze v28....ckListener com.remitly.androidapp.internal V Skipping automatic registration for notification trampoline activity class.
2023-09-27 11:14:37.145 28113-28113 Braze v28....neActivity com.remitly.androidapp.internal V Notification trampoline activity received intent: Intent { act=com.braze.action.BRAZE_PUSH_CLICKED flg=0x10000000 cmp=com.remitly.androidapp.internal/com.braze.push.NotificationTrampolineActivity (has extras) }
2023-09-27 11:14:37.146 28113-28113 Braze v28....shReceiver com.remitly.androidapp.internal I Received broadcast message. Message: Intent { act=com.braze.action.BRAZE_PUSH_CLICKED cmp=com.remitly.androidapp.internal/com.braze.push.BrazePushReceiver (has extras) }
2023-09-27 11:14:37.146 28113-28113 Braze v28.0.0 .Braze com.remitly.androidapp.internal D Applying any pending runtime configuration values
2023-09-27 11:14:37.148 28113-28113 Braze v28....ationUtils com.remitly.androidapp.internal D Sending notification opened broadcast
2023-09-27 11:14:37.149 28113-28113 Braze v28....ationUtils com.remitly.androidapp.internal V Sending Braze broadcast receiver intent for OPENED
2023-09-27 11:14:37.149 28113-28113 Braze v28....ationUtils com.remitly.androidapp.internal V Sending push action intent: Intent { act=com.braze.push.intent.NOTIFICATION_OPENED pkg=com.remitly.androidapp.internal }
2023-09-27 11:14:37.150 28113-28113 Braze v28.0.0 .x0 com.remitly.androidapp.internal D com.braze.events.BrazePushEvent fired:
BrazePushEvent(eventType=NOTIFICATION_OPENED, notificationPayload=
IsPushStory = false
IsInlineImagePush = false
IsConversationalPush = false
NotificationChannelId = com_appboy_default_notification_channel
NotificationReceivedTimestampMillis = 1695838458345
TitleText = Test push - Deeplink
ContentText = Push sent - Open to deeplink
AccentColor = -12038445
ActionButtons = []
PushStoryPageIndex = 0
PushStoryPages = []
ConversationMessages = []
ConversationPersonMap = {}
PushDeliveryEnabled = false)
2023-09-27 11:14:37.150 28113-28113 Braze v28.0.0 .x0 com.remitly.androidapp.internal D Triggering com.braze.events.BrazePushEvent on 0 subscribers.
2023-09-27 11:14:37.150 28113-28113 Braze v28.0.0 .x0 com.remitly.androidapp.internal D Triggering com.braze.events.BrazePushEvent on 0 subscribers.
2023-09-27 11:14:37.151 28113-28113 Braze v28.0.0 .x0 com.remitly.androidapp.internal I Event was published, but no subscribers were found. Saving event for later publishing to a matching subscriber. Event class: class com.braze.events.BrazePushEvent
2023-09-27 11:14:37.151 28113-28113 Braze v28....onProvider com.remitly.androidapp.internal D Using runtime override value for key: 'com_braze_handle_push_deep_links_automatically' and value: 'true'
2023-09-27 11:14:37.154 28113-28113 Braze v28....ationUtils com.remitly.androidapp.internal D Push notification had no deep link. Opening main activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x34000000 pkg=com.remitly.androidapp.internal cmp=com.remitly.androidapp.internal/com.braze.firebasepush.MainActivity (has extras) }
2023-09-27 11:14:37.163 28113-28147 Braze v28.0.0 .t com.remitly.androidapp.internal D Getting the stored open session
2023-09-27 11:14:37.164 589-1026 ActivityTaskManager system_server I START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x34000000 pkg=com.remitly.androidapp.internal cmp=com.remitly.androidapp.internal/com.braze.firebasepush.MainActivity (has extras)} with LAUNCH_SINGLE_TASK from uid 10194 (BAL_ALLOW_VISIBLE_WINDOW) result code=0
2023-09-27 11:14:37.165 28113-28113 Braze v28....neActivity com.remitly.androidapp.internal V Notification trampoline activity finished processing. Delaying before finishing activity.
2023-09-27 11:14:37.166 28113-28147 Braze v28.0.0 .t com.remitly.androidapp.internal D Checking if this session needs to be sealed: 82f933d2-09b0-45e7-9130-dbc18fcfb688
2023-09-27 11:14:37.167 28113-28147 Braze v28.0.0 .t com.remitly.androidapp.internal I Session [82f933d2-09b0-45e7-9130-dbc18fcfb688] being sealed because its end time is over the grace period. Session:
MutableSession(sessionId=82f933d2-09b0-45e7-9130-dbc18fcfb688, startTime=1.695808795178E9, endTime=1.695808795204E9, isSealed=false, duration=0)
2023-09-27 11:14:37.168 28113-28147 Braze v28.0.0 .x0 com.remitly.androidapp.internal D bo.app.g5 fired:
SessionSealedEvent(sealedSession=
MutableSession(sessionId=82f933d2-09b0-45e7-9130-dbc18fcfb688, startTime=1.695808795178E9, endTime=1.695809775876E9, isSealed=true, duration=980))
2023-09-27 11:14:37.169 28113-28147 Braze v28.0.0 .x0 com.remitly.androidapp.internal D Triggering bo.app.g5 on 0 subscribers.
2023-09-27 11:14:37.169 28113-28147 Braze v28.0.0 .x0 com.remitly.androidapp.internal D Triggering bo.app.g5 on 1 subscribers.
2023-09-27 11:14:37.171 28113-28147 Braze v28.0.0 .o com.remitly.androidapp.internal D Not adding session id to event: {
"name": "se",
"data": {
"d": 980
},
"time": 1.695809775879E9,
"session_id": "82f933d2-09b0-45e7-9130-dbc18fcfb688"
}
2023-09-27 11:14:37.173 28113-28147 Braze v28.0.0 .o com.remitly.androidapp.internal V Attempting to log event: {
"name": "se",
"data": {
"d": 980
},
"time": 1.695809775879E9,
"user_id": "my-user-id",
"session_id": "82f933d2-09b0-45e7-9130-dbc18fcfb688"
}
2023-09-27 11:14:37.178 28113-28145 Braze v28.0.0 .k5 com.remitly.androidapp.internal D Adding event to storage with uid d98b0c57-e845-4e3e-be19-24d4de05a4cc
2023-09-27 11:14:37.181 28113-28147 Braze v28.0.0 .x0 com.remitly.androidapp.internal D bo.app.m0 fired:
commandType = ADD_BRAZE_EVENT
brazeEvent = {"name":"se","data":{"d":980},"time":1.695809775879E9,"user_id":"my-user-id","session_id":"82f933d2-09b0-45e7-9130-dbc18fcfb688"}
sessionId = null
brazeRequest = null
2023-09-27 11:14:37.181 28113-28147 Braze v28.0.0 .x0 com.remitly.androidapp.internal D Triggering bo.app.m0 on 0 subscribers.
2023-09-27 11:14:37.181 28113-28147 Braze v28.0.0 .x0 com.remitly.androidapp.internal D Triggering bo.app.m0 on 1 subscribers.
2023-09-27 11:14:37.185 28113-28147 Braze v28.0.0 .w0 com.remitly.androidapp.internal D Performing push delivery event flush
2023-09-27 11:14:37.187 28113-28147 Braze v28.0.0 .o com.remitly.androidapp.internal D Attempted to flush Push Delivery events, but no events are available
2023-09-27 11:14:37.188 28113-28147 Braze v28.0.0 .x0 com.remitly.androidapp.internal D com.braze.events.SessionStateChangedEvent fired:
SessionStateChangedEvent{sessionId='82f933d2-09b0-45e7-9130-dbc18fcfb688', eventType='SESSION_ENDED'}'
While debugging i found it useful to use dumpsys
to get activity logs.
adb shell dumpsys activity >> output.txt
In these logs, we can search for ACTIVITY MANAGER RECENT TASKS (dumpsys activity recents)
and find the Visible recent tasks
.
30.0.0
Create two singleton entities with a Braze instance field (created with the same Context instance)
class BrazeContentCardsHandler(private val braze: IBraze)
class BrazeAnalyticsHandler(private val braze: IBraze)
As specified in a KDoc, the same Braze
instance (singleton) should be provided
Sometimes two different instances are created with the first being isInstanceStopped == true
No response
No response
29.0.1
Incoming html in-app messages on a device
Not have an alert about strict mode
We have an alert
Process:X, PID: 2426 android.os.strictmode.DiskReadViolation at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1658) at libcore.io.BlockGuardOs.access(BlockGuardOs.java:74) at libcore.io.ForwardingOs.access(ForwardingOs.java:128) at android.app.ActivityThread$AndroidOs.access(ActivityThread.java:7795) at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:313) at java.io.File.exists(File.java:813) at android.app.ContextImpl.getDataDir(ContextImpl.java:2962) at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:704) at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:931) at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:553) at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:217) at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:217) at com.braze.configuration.RuntimeAppConfigurationProvider.<init>(SourceFile:2) at com.braze.configuration.CachedConfigurationProvider.<init>(SourceFile:16) at com.braze.configuration.BrazeConfigurationProvider.<init>(SourceFile:1) at com.braze.ui.inappmessage.views.InAppMessageHtmlBaseView.getMessageWebView(InAppMessageHtmlBaseView.kt:108) at com.braze.ui.inappmessage.views.InAppMessageHtmlBaseView.setWebViewContent(InAppMessageHtmlBaseView.kt:215) at com.braze.ui.inappmessage.views.InAppMessageHtmlBaseView.setWebViewContent$default(InAppMessageHtmlBaseView.kt:210) at com.braze.ui.inappmessage.factories.DefaultInAppMessageHtmlViewFactory.createInAppMessageView(DefaultInAppMessageHtmlViewFactory.kt:43) at com.braze.ui.inappmessage.factories.DefaultInAppMessageHtmlViewFactory.createInAppMessageView(DefaultInAppMessageHtmlViewFactory.kt:22) at com.braze.ui.inappmessage.BrazeInAppMessageManager.displayInAppMessage(BrazeInAppMessageManager.kt:520) at com.braze.ui.inappmessage.utils.BackgroundInAppMessagePreparer$displayPreparedInAppMessage$2.invokeSuspend(BackgroundInAppMessagePreparer.kt:274) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7918) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
No response
No response
29.0.1
Android resource linking failed
/root/.gradle/caches/transforms-3/c65ea9d3bc20d0320da8dfecbb75b1d3/transformed/commons-0.8.5.5/res/layout/md_preference_custom.xml:21: warn: generated id 'android:id/icon' for external package 'android'.
error: resource style/Braze.ContentCards.BannerImage (aka com.*.mobile.debug:style/Braze.ContentCards.BannerImage) not found.
error: failed linking references.
I am not able to sync the project because of this issue while trying to upgarde the braze sdk this issue starts coming from version 29
NA
NA
NA
Please deploy the library on maven central.
Copied from Appboy/appboy-android-sdk#237
No response
No response
com.braze:android-sdk-ui:24.3.0
Test Braze push notification.
by Braze dashboard creat campaign and send push notification.
I already have a Firebase Messaging Service registered ------> MySelfFCMService
public class MySelfFCMService extends FirebaseMessagingService {
@OverRide
public void onNewToken(@nonnull String token) {
super.onNewToken(token);
}
@OverRide
public void onMessageReceived(@nonnull RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
// if (BrazeFirebaseMessagingService.handleBrazeRemoteMessage(this, remoteMessage)) {
// // This Remote Message originated from Braze and a push notification was displayed.
// // No further action is needed.
// return;
// }
RemoteMessage.Notification notification = remoteMessage.getNotification();
if (notification != null) {
String title = notification.getTitle();
String body = notification.getBody();
}
}
@OverRide
public void onDeletedMessages() {
super.onDeletedMessages();
}
}
When I clicked the Send Test button,
the method onMessageReceived(@nonnull RemoteMessage remoteMessage) of the MySelfFCMService class was called.
However, I am unable to obtain the title and body of this notification through the class RemoteMessage.Notification.
RemoteMessage.Notification notification = remoteMessage.getNotification();
if (notification != null) {
String title = notification.getTitle();
String body = notification.getBody();
}
Because the return value of remoteMessage.getNotification() is null. notification == null ,I cannot execute the following code:
String title = notification.getTitle();
String body = notification.getBody();
But, by firebase dashboard send push notification ,
I can obtain the title and body through notification,
if (notification != null) {
String title = notification.getTitle();
String body = notification.getBody();
}
if (notification != null) {
String title = notification.getTitle();
String body = notification.getBody();
}
the return value of remoteMessage.getNotification() is null. notification == null ,I cannot execute the following code:
String title = notification.getTitle();
String body = notification.getBody();
No response
I want to know if this situation is normal?
Is this result caused by an issue with my operating steps on the Braze dashboard?
Is that the design of Braze Sdk?
26.3.2
Hello, after an upgrade from 25 to 26.3.2 (React Native module 5 => 6), we noticed that the app crashes when a user clicks on the following "Close" link. It seems related to window.open
.
<html>
<meta charset="utf-8">
<meta name="viewport" content="viewport-fit=cover, initial-scale=1, maximum-scale=1">
<body style="padding: 50px;">
<a href="#" onclick="window.open('myScheme://myPath')">Close</a>
</body>
</html>
Note that a button
will do nothing but won't crash.
Stacktrace below :
System.err W android.os.FileUriExposedException: file://null/# exposed beyond app through Intent.getData()
W at android.os.StrictMode.onFileUriExposed(StrictMode.java:2208)
W at android.net.Uri.checkFileUriExposed(Uri.java:2407)
W at android.content.Intent.prepareToLeaveProcess(Intent.java:11914)
W at android.content.Intent.prepareToLeaveProcess(Intent.java:11863)
W at android.app.Instrumentation.execStartActivity(Instrumentation.java:1833)
W at android.app.Activity.startActivityForResult(Activity.java:5507)
W at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:597)
W at android.app.Activity.startActivityForResult(Activity.java:5465)
W at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:583)
W at android.app.Activity.startActivity(Activity.java:5963)
W at android.app.Activity.startActivity(Activity.java:5930)
W at com.braze.ui.inappmessage.views.InAppMessageHtmlBaseView$messageWebView$7.onCreateWindow(InAppMessageHtmlBaseView.kt:147)
No crash
Crashes
No response
This works great on iOS and on the Android SDK 25.
Note that replacing the redirection with window.location.href =
somehow works.
<a href="#" onclick="window.location.href = 'myScheme://myPath'">Close</a>
25.0.0
I tried to use the accent icon color function in the Braze function, but the colors don't seem to be compatible.
(https://www.braze.com/docs/developer_guide/platform_integration_guides/android/push_notifications/android/integration/standard_integration/#step-3-configure-notification-icons)
To confirm proper color application, we only carried out a basic push-linked campaign.
We know that starting from Android specifiy version and higher, the icon color changes differently depending on the user-defined theme, but the braze icon accent color is not applied properly even when the theme is not applied.
There is no separate verbose log, and we share the braze xml file applied by the customer.
[braze.xml]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="com_braze_custom_endpoint" translatable="false">sdk.iad-05.braze.com</string>
<bool name="com_braze_firebase_cloud_messaging_registration_enabled" translatable="false">true</bool>
<bool name="com_braze_handle_push_deep_links_automatically">true</bool>
<bool name="com_braze_push_deep_link_back_stack_activity_enabled">true</bool>
<string name="com_braze_push_deep_link_back_stack_activity_class_name">com.app.celebshop.main.MainActivity</string>
<drawable name="com_braze_push_small_notification_icon">@drawable/ic_small_launcher</drawable>
<drawable name="com_braze_push_large_notification_icon">@mipmap/ic_launcher</drawable>
<color name="com_braze_default_notification_accent_color">@color/sys_background_coral</color>
<bool name="com_braze_push_notification_html_rendering_enabled" translatable="false">true</bool>
</resources>
Migrate between version e.g. 25.0.0 to 26.0.0
class BrazeManager {
private lateinit var brazeInstance: Braze
fun init(application: Application) {
BrazeLogger.logLevel = Log.VERBOSE
brazeInstance = Braze.getInstance(application)
application.registerActivityLifecycleCallbacks(
BrazeActivityLifecycleCallbackListener(
true,
true,
emptySet(),
null
)
)
// Request content card update after braze init
requestContentCards()
}
fun switchUser(userId: String) {
brazeInstance.changeUser(userId)
}
fun requestContentCards(cache: Boolean = false) = runBlocking {
val result = suspendCoroutineWithTimeout<List<Card>>(30_000) { continuation ->
var contentCardsUpdatedSubscriber: IEventSubscriber<ContentCardsUpdatedEvent>? = null
contentCardsUpdatedSubscriber = IEventSubscriber { event ->
// unsubscribe
contentCardsUpdatedSubscriber?.let {
brazeInstance.removeSingleSubscription(
it, ContentCardsUpdatedEvent::class.java
)
}
// Return value
continuation.resume(event.allCards)
}
brazeInstance.subscribeToContentCardsUpdates(
contentCardsUpdatedSubscriber
)
brazeInstance.requestContentCardsRefresh(cache)
}
Log.wtf("braze", "result: ${result?.size}")
}
}
private suspend inline fun <T> suspendCoroutineWithTimeout(
timeout: Long,
crossinline block: (Continuation<T>) -> Unit
): T? {
var finalValue: T? = null
withTimeoutOrNull(timeout) {
finalValue = suspendCancellableCoroutine(block = block)
}
return finalValue
}
Requesting Content Card update after SDK upgrade will succeed and return content cards from Braze backend
subscribeToContentCardsUpdates
callback won't return within the 30 seconds timeout (probably would never return) and LogCat states that no request was done because:
Content Cards is not enabled, skipping API call to refresh
---------------------------- PROCESS STARTED (11106) for package com.xxxx.debug ----------------------------
2023-06-09 14:10:43.883 11106-11106 Braze v26.0.0 .Braze V The instance is null. Allowing instance initialization
2023-06-09 14:10:43.883 11106-11106 Braze v26.0.0 .Braze V The instance is null. Allowing instance initialization
2023-06-09 14:10:43.883 11106-11106 Braze v26.0.0 .Braze D Braze SDK Initializing
2023-06-09 14:10:43.894 11106-11143 Braze v26....mageLoader D Initializing disk cache
2023-06-09 14:10:43.895 11106-11106 Braze v26.0.0 .Braze D Braze SDK loaded in 12 ms.
2023-06-09 14:10:43.898 11106-11106 Braze v26....ckListener V BrazeActivityLifecycleCallbackListener using in-app messaging blocklist: []
2023-06-09 14:10:43.899 11106-11106 Braze v26....ckListener V BrazeActivityLifecycleCallbackListener using session handling blocklist: []
2023-06-09 14:10:43.902 11106-11147 Braze v26.0.0 .Braze D Applying any pending runtime configuration values
2023-06-09 14:10:43.902 11106-11143 Braze v26....mageLoader D Disk cache initialized
2023-06-09 14:10:43.905 11106-11147 Braze v26....onProvider D Using resources value for key: 'com_braze_api_key' and value: 'xxxxxx'
2023-06-09 14:10:43.905 11106-11147 Braze v26....onProvider D Unable to find the xml INTEGER configuration value with primary key 'com_braze_logger_initial_log_level'. Using default value '4'.
2023-06-09 14:10:43.906 11106-11147 Braze v26....onProvider D Using resources value for key: 'com_braze_logger_initial_log_level' and value: '4'
2023-06-09 14:10:43.913 11106-11147 Braze v26....onProvider D Using resources value for key: 'com_braze_custom_endpoint' and value: 'sdk.iad-01.braze.com'
2023-06-09 14:10:43.914 11106-11147 Braze v26....onProvider D Using resources value for key: 'com_braze_firebase_cloud_messaging_registration_enabled' and value: 'true'
2023-06-09 14:10:43.917 11106-11147 Braze v26.0.0 .Braze I Firebase Cloud Messaging found. Setting up Firebase Cloud Messaging.
2023-06-09 14:10:43.917 11106-11147 Braze v26....onProvider D Using resources value for key: 'com_braze_firebase_cloud_messaging_sender_id' and value: 'xxxxxxx'
2023-06-09 14:10:43.918 11106-11147 Braze v26....onProvider D Unable to find the xml BOOLEAN configuration value with primary key 'com_braze_push_adm_messaging_registration_enabled'. Using default value 'false'.
2023-06-09 14:10:43.918 11106-11147 Braze v26....onProvider D Using resources value for key: 'com_braze_push_adm_messaging_registration_enabled' and value: 'false'
2023-06-09 14:10:43.918 11106-11147 Braze v26.0.0 .Braze I Automatic ADM registration not enabled in configuration. Braze will not register for ADM.
2023-06-09 14:10:43.919 11106-11147 Braze v26.0.0 .Braze V Starting up a new user dependency manager
2023-06-09 14:10:43.931 11106-11147 Braze v26....dPrefUtils V Detected SDK update from '25.0.0' -> '26.0.0'. Clearing com.braze.storage.server_config.a8781125-b32e-458b-9700-b9711b1d2f50 storage.
2023-06-09 14:10:43.940 11106-11147 Braze v26....onProvider D Using resources value for key: 'com_braze_session_timeout' and value: '2700'
2023-06-09 14:10:43.940 11106-11147 Braze v26....onProvider D Unable to find the xml BOOLEAN configuration value with primary key 'com_braze_session_start_based_timeout_enabled'. Using default value 'false'.
2023-06-09 14:10:43.940 11106-11147 Braze v26....onProvider D Using resources value for key: 'com_braze_session_start_based_timeout_enabled' and value: 'false'
2023-06-09 14:10:43.950 11106-11147 Braze v26....onProvider D Unable to find the xml INTEGER configuration value with primary key 'com_braze_trigger_action_minimum_time_interval_seconds'. Using default value '30'.
2023-06-09 14:10:43.950 11106-11147 Braze v26....onProvider D Using resources value for key: 'com_braze_trigger_action_minimum_time_interval_seconds' and value: '30'
2023-06-09 14:10:43.953 11106-11147 Braze v26.0.0 .g6 D Retrieving trigger local asset path '/data/user/0/com.xxxx.debug/cache/ab_triggers/500368795.png' from local storage for remote path 'https://braze-images.com/appboy/communication/marketing/slide_up/slide_up_message_parameters/images/6170fd59ee9f6f1aa2584bc9/19dc5aa81389dd9e8a3b7cc0cc6505eefc236555/original.png?1634794844'
2023-06-09 14:10:43.953 11106-11147 Braze v26.0.0 .g6 D Retrieving trigger local asset path '/data/user/0/com.xxxx.debug/cache/ab_triggers/1025422296.png' from local storage for remote path 'https://braze-images.com/appboy/communication/marketing/slide_up/slide_up_message_parameters/images/6180a89e3fe96a3df4026148/676f19f018a09dfd5dc8830e4ad802ab62311108/original.png?1635821730'
2023-06-09 14:10:43.953 11106-11147 Braze v26.0.0 .g6 D Retrieving trigger local asset path '/data/user/0/com.xxxx.debug/cache/ab_triggers/925351799.png' from local storage for remote path 'https://braze-images.com/appboy/communication/marketing/slide_up/slide_up_message_parameters/images/62fa15b059fdd24f2ab797d2/de81351e4a783038063125754f17dceeb5b59e0f/original.png?1660891117'
2023-06-09 14:10:43.953 11106-11147 Braze v26.0.0 .g6 D Retrieving trigger local asset path '/data/user/0/com.xxxx.debug/cache/ab_triggers/408190321.png' from local storage for remote path 'https://braze-images.com/appboy/communication/marketing/slide_up/slide_up_message_parameters/images/62624497f5f4207b248d9454/37b72f338ee9b8114b61ccaa4b16a6feaae178ff/original.png?1650607780'
2023-06-09 14:10:43.953 11106-11147 Braze v26.0.0 .g6 D Retrieving trigger local asset path '/data/user/0/com.xxxx.debug/cache/ab_triggers/427599600.png' from local storage for remote path 'https://braze-images.com/appboy/communication/marketing/slide_up/slide_up_message_parameters/images/62fa12f42876cd1a2cec1852/fca7d1258b62065f75296896a01e32f5f48f7806/original.png?1662347838'
2023-06-09 14:10:43.953 11106-11147 Braze v26.0.0 .g6 D Retrieving trigger local asset path '/data/user/0/com.xxxx.debug/cache/ab_triggers/913084475.png' from local storage for remote path 'https://braze-images.com/appboy/communication/marketing/slide_up/slide_up_message_parameters/images/62fa15333352c671bc300a96/a9535c4ea28795c71ba4173bf7495ee513059d06/original.png?1660889826'
2023-06-09 14:10:43.961 11106-11147 Braze v26.0.0 .f3 V Attempting to parse in-app message triggered action with JSON: {
"re_eligibility": -1,
"start_time": 1631160900,
"end_time": -1,
"priority": 2000176000,
"min_seconds_since_last_trigger": -1,
"timeout": -1,
"delay": 0,
"id": "62fa15b059fdd2xxxxx",
"trigger_condition": [...],
"prefetch": true,
"data": {
"message": "",
"click_action": "URI",
"uri": "xxxx",
"use_webview": null,
"type": "MODAL",
"message_close": "SWIPE",
"image_url": "https:\/\/braze-images.com\/appboy\/communication\/marketing\/slide_up\/slide_up_message_parameters\/images\/62fa15b059fdd24f2ab797d2\/de81351e4a783038063125754f17dceeb5b59e0f\/xxxx.png?1660891117",
"image_style": "GRAPHIC",
"close_btn_color": 4291085508,
"bg_color": 4294243575,
"frame_color": 3207803699,
"trigger_id": "NjJmYTE1YjA1OWZkZDI0ZjJhYjc5N2U4XyRfbXY9NjJmYTE1YjA1OWZkZDI0ZjJhYjc5N2Q2JnBpPWNtcA=="
},
"type": "inapp"
}
2023-06-09 14:10:43.969 11106-11147 Braze v26....ssageModal D Requested in-app message duration 0 is lower than the minimum of 999. Defaulting to 5000 milliseconds.
2023-06-09 14:10:43.970 11106-11147 Braze v26.....bo.app.o6 D Retrieving templated triggered action id 62fa15b059fdd24f2ab797e8 from local storage.
2023-06-09 14:10:43.982 11106-11147 Braze v26.....bo.app.o6 V Subscribing to trigger dispatch events.
2023-06-09 14:10:43.984 11106-11147 Braze v26....onProvider D Unable to find the xml STRING_ARRAY configuration value with primary key 'com_braze_custom_location_providers_list'. Using default value '[]'.
2023-06-09 14:10:43.984 11106-11147 Braze v26....onProvider D Using resources value for key: 'com_braze_custom_location_providers_list' and value: '[]'
2023-06-09 14:10:43.986 11106-11147 Braze v26....nceManager D Did not find stored geofences.
2023-06-09 14:10:43.987 11106-11147 Braze v26....nceManager I Geofences implicitly disabled via server configuration.
2023-06-09 14:10:43.987 11106-11147 Braze v26....nceManager I ***Geofence API not found. Please include the android-sdk-location module***
2023-06-09 14:10:43.988 11106-11147 Braze v26....nceManager D Braze geofences not enabled. Geofences not set up.
2023-06-09 14:10:43.988 11106-11147 Braze v26.0.0 .o I ***Location API not found. Please include android-sdk-location module***
2023-06-09 14:10:43.989 11106-11147 Braze v26.0.0 .g1 D Did not find stored Feature Flags.
2023-06-09 14:10:43.994 11106-11147 Braze v26....dPrefUtils V Detected SDK update from '25.0.0' -> '26.0.0'. Clearing com.braze.storage.content_cards_storage_provider.metadata.d41d8cd98f00b204e9800998ecf8427e.a8781125-b32e-458b-9700-b9711b1d2f50 storage.
2023-06-09 14:10:44.002 11106-11147 Braze v26.0.0 .i0 V recalculateDispatchState called with session state: NO_SESSION lastNetworkLevel: NONE
2023-06-09 14:10:44.002 11106-11147 Braze v26.0.0 .i0 V currentIntervalMs: -1
2023-06-09 14:10:44.002 11106-11147 Braze v26.0.0 .i0 D Data sync started
2023-06-09 14:10:44.011 11106-11147 Braze v26.0.0 .i0 V recalculateDispatchState called with session state: NO_SESSION lastNetworkLevel: GOOD
2023-06-09 14:10:44.012 11106-11147 Braze v26.0.0 .i0 V currentIntervalMs: -1
2023-06-09 14:10:44.013 11106-11184 Braze v26.0.0 .i0 V recalculateDispatchState called with session state: NO_SESSION lastNetworkLevel: GOOD
2023-06-09 14:10:44.013 11106-11184 Braze v26.0.0 .i0 V currentIntervalMs: -1
2023-06-09 14:10:44.016 11106-11147 Braze v26.0.0 .d1 D Started offline event recovery task.
2023-06-09 14:10:44.017 11106-11147 Braze v26.0.0 .Braze D Content Cards is not enabled, skipping API call to refresh
2023-06-09 14:11:13.911 11106-11106 braze E result: null
I've observed the same behavior by upgrading from Braze SDK 18.0.0 to 25.0.0.
19.0.0 and above
We updated from SDK 18.0.1 to SDK 25.0.0
Before release we noticed that the first start after fresh installation took 30-40 seconds which normally is like 1-2 seconds.
We narrowed the issue down to the SDK Upgrade, reverting to previous 18.0.1 fixed the issue. We tried also every version between 18.0.1 and 25.0.0 with the same results.
After removing the Braze session setup application.registerActivityLifecycleCallbacks(BrazeActivityLifecycleCallbackListener(...))
the delay didn't disappeared until we also removed the Braze.getInstance(applicationContext)
call.
Which let us suspect that any background process is triggered when creating an instance which runs on the main thread.
The first message in LogCat after the freeze relates to Firebase (Messaging?), so might be related to it.
I tried to re-create the issue in a sample project, but the issue seemed not replicable by default, probably because the FCM setup is missing. I will try to investigate that further.
No freezing during initial app launch
Freezing during initial app launch
See screenshot above, please let me know if you need more details.
I can't tell for sure if that issue is caused by the Braze SDK or missing/misconfiguration on our side. But I would appreciate any help in this matter 🙏 Please understand that we are not able to share any code, if it is better for us to reach out to the support instead, please let me know 🙇
30.2.0
Not sure, but we observe the crash from Firebase.
No crash
ActivityNotFoundException is not handled, which caused app crash.
Fatal Exception: org.chromium.base.JniAndroid$UncaughtExceptionException: Native stack trace:
#00 pc 0x00000000040ef587 /data/app/~~7bjPe4Gt3i2zigI4H0azzw==/com.google.android.trichromelibrary_626111933-LYkp38bkj02Depk3cUgkoQ==/base.apk (offset 0x8dc000)
#01 pc 0x0000000002c9a367 /data/app/~~7bjPe4Gt3i2zigI4H0azzw==/com.google.android.trichromelibrary_626111933-LYkp38bkj02Depk3cUgkoQ==/base.apk (offset 0x8dc000)
#02 pc 0x0000000002c9926f /data/app/~~7bjPe4Gt3i2zigI4H0azzw==/com.google.android.trichromelibrary_626111933-LYkp38bkj02Depk3cUgkoQ==/base.apk (offset 0x8dc000)
#03 pc 0x000000000472cadb /data/app/~~7bjPe4Gt3i2zigI4H0azzw==/com.google.android.trichromelibrary_626111933-LYkp38bkj02Depk3cUgkoQ==/base.apk (offset 0x8dc000)
#04 pc 0x00000000056f7163 /data/app/~~7bjPe4Gt3i2zigI4H0azzw==/com.google.android.trichromelibrary_626111933-LYkp38bkj02Depk3cUgkoQ==/base.apk (offset 0x8dc000)
#05 pc 0x000000000564d0fb /data/app/~~7bjPe4Gt3i2zigI4H0azzw==/com.google.android.trichromelibrary_626111933-LYkp38bkj02Depk3cUgkoQ==/base.apk (offset 0x8dc000)
#06 pc 0x00000000051f9877 /data/app/~~7bjPe4Gt3i2zigI4H0azzw==/com.google.android.trichromelibrary_626111933-LYkp38bkj02Depk3cUgkoQ==/base.apk (offset 0x8dc000)
#07 pc 0x00000000066ce8a7 /data/app/~~7bjPe4Gt3i2zigI4H0azzw==/com.google.android.trichromelibrary_626111933-LYkp38bkj02Depk3cUgkoQ==/base.apk (offset 0x8dc000)
#08 pc 0x0000000002c0613b /data/app/~~7bjPe4Gt3i2zigI4H0azzw==/com.google.android.trichromelibrary_626111933-LYkp38bkj02Depk3cUgkoQ==/base.apk (offset 0x8dc000)
#09 pc 0x0000000002c061d7 /data/app/~~7bjPe4Gt3i2zigI4H0azzw==/com.google.android.trichromelibrary_626111933-LYkp38bkj02Depk3cUgkoQ==/base.apk (offset 0x8dc000)
#10 pc 0x00000000039c5113 /data/app/~~7bjPe4Gt3i2zigI4H0azzw==/com.google.android.trichromelibrary_626111933-LYkp38bkj02Depk3cUgkoQ==/base.apk (offset 0x8dc000)
#11 pc 0x00000000039c401b /data/app/~~7bjPe4Gt3i2zigI4H0azzw==/com.google.android.trichromelibrary_626111933-LYkp38bkj02Depk3cUgkoQ==/base.apk (offset 0x8dc000)
#12 pc 0x0000000002c26323 /data/app/~~7bjPe4Gt3i2zigI4H0azzw==/com.google.android.trichromelibra<truncated: 553 chars>
at org.chromium.base.JniAndroid.handleException(chromium-TrichromeWebViewGoogle6432.aab-stable-626111933:11)
at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
at android.os.MessageQueue.next(MessageQueue.java:335)
at android.os.Looper.loopOnce(Looper.java:187)
at android.os.Looper.loop(Looper.java:319)
at android.app.ActivityThread.main(ActivityThread.java:8913)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
Caused by android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=appboy://close/... }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2252)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1878)
at android.app.Activity.startActivityForResult(Activity.java:5743)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:754)
at android.app.Activity.startActivityForResult(Activity.java:5701)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:735)
at android.app.Activity.startActivity(Activity.java:6199)
at android.app.Activity.startActivity(Activity.java:6166)
at com.braze.ui.inappmessage.views.InAppMessageHtmlBaseView$messageWebView$7.onCreateWindow(InAppMessageHtmlBaseView.kt:150)
at WV.z8.addNewContents(chromium-TrichromeWebViewGoogle6432.aab-stable-626111933:39)
at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
at android.os.MessageQueue.next(MessageQueue.java:335)
at android.os.Looper.loopOnce(Looper.java:187)
at android.os.Looper.loop(Looper.java:319)
at android.app.ActivityThread.main(ActivityThread.java:8913)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
No response
30.4.0
Not able to reproduce, saw the crashes from Crashlytics
No crash
Crash with IndexOutOfBoundsException, stack trace attached
Fatal Exception: java.lang.IndexOutOfBoundsException: index: 1, size: 0
at androidx.compose.runtime.external.kotlinx.collections.immutable.internal.ListImplementation.checkElementIndex$runtime_release(ListImplementation.java:15)
at androidx.compose.runtime.external.kotlinx.collections.immutable.implementations.immutableList.SmallPersistentVector.get(SmallPersistentVector.kt:146)
at androidx.compose.runtime.snapshots.SnapshotStateList.get(SnapshotStateList.kt:91)
at androidx.compose.foundation.lazy.LazyDslKt$items$3.invoke(LazyDsl.kt:147)
at com.braze.jetpackcompose.contentcards.ContentCardsListKt$ContentCardsList$7$1$1$invoke$$inlined$items$default$3.invoke(LazyDsl.kt:147)
at androidx.compose.foundation.lazy.LazyDslKt$items$3.invoke(LazyDsl.kt:144)
at com.braze.jetpackcompose.contentcards.ContentCardsListKt$ContentCardsList$7$1$1$invoke$$inlined$items$default$3.invoke(LazyDsl.kt:144)
at androidx.compose.foundation.lazy.layout.LazyLayoutIntervalContent.getContentType(LazyLayoutIntervalContent.java:49)
at androidx.compose.foundation.lazy.LazyListItemProviderImpl.getContentType(LazyListItemProvider.kt:87)
at androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScopeImpl.measure-0kLqBqw(LazyLayoutMeasureScope.kt:123)
at androidx.compose.foundation.lazy.LazyListMeasuredItemProvider.getAndMeasure(LazyListMeasuredItemProvider.java:48)
at androidx.compose.foundation.lazy.LazyListMeasureKt.measureLazyList-5IMabDg(LazyListMeasure.kt:195)
at androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke-0kLqBqw(LazyList.kt:313)
at androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke(LazyList.kt:178)
at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$3$2$1.invoke-0kLqBqw(LazyLayout.kt:107)
at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$3$2$1.invoke(LazyLayout.kt:100)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s(SubcomposeLayout.kt:709)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:126)
at androidx.compose.foundation.AndroidOverscroll_androidKt$StretchOverscrollNonClippingLayer$2.invoke-3p2s80s(AndroidOverscroll_android.kt:584)
at androidx.compose.foundation.AndroidOverscroll_androidKt$StretchOverscrollNonClippingLayer$2.invoke(AndroidOverscroll_android.kt:583)
at androidx.compose.ui.layout.LayoutModifierImpl.measure-3p2s80s(LayoutModifier.kt:294)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.foundation.AndroidOverscroll_androidKt$StretchOverscrollNonClippingLayer$1.invoke-3p2s80s(AndroidOverscroll.android.kt:568)
at androidx.compose.foundation.AndroidOverscroll_androidKt$StretchOverscrollNonClippingLayer$1.invoke(AndroidOverscroll.android.kt:567)
at androidx.compose.ui.layout.LayoutModifierImpl.measure-3p2s80s(LayoutModifier.kt:294)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:646)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasureBlock$1.invoke(LayoutNodeLayoutDelegate.java:252)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasureBlock$1.invoke(LayoutNodeLayoutDelegate.java:251)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.java:2303)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:500)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:256)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:113)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0(LayoutNodeLayoutDelegate.java:1617)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.java:36)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:620)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release(LayoutNode.java:1145)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release$default(LayoutNode.java:1136)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-sdFAvZA(MeasureAndLayoutDelegate.kt:356)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:514)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded$default(MeasureAndLayoutDelegate.kt:491)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:377)
at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout(AndroidComposeView.android.kt:971)
at androidx.compose.ui.node.Owner.measureAndLayout$default(Owner.java:228)
at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:1224)
at android.view.View.draw(View.java:23901)
at android.view.View.updateDisplayListIfDirty(View.java:22767)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5339)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5311)
at android.view.View.updateDisplayListIfDirty(View.java:22714)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:602)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:608)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:684)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:5440)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:5148)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4212)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2919)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:10491)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1108)
at android.view.Choreographer.doCallbacks(Choreographer.java:866)
at android.view.Choreographer.doFrame(Choreographer.java:797)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1092)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8663)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
No response
No response
30.2.0
Unfortunately, we don't have a way to reproduce this issue, only logs we receive from DataDog RUM.
No such logs
The stacktrace
at com.android.webview.chromium.WebViewChromium.init(chromium-TrichromeWebViewGoogle.aab-stable-626111931:97)
...
at android.webkit.WebView.<init>(WebView.java:338)
at com.braze.ui.inappmessage.views.InAppMessageWebView.<init>(InAppMessageWebView.java:13)
...
at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
at com.braze.ui.inappmessage.factories.DefaultInAppMessageHtmlViewFactory.createInAppMessageView(DefaultInAppMessageHtmlViewFactory.java:31)
at com.braze.ui.inappmessage.factories.DefaultInAppMessageHtmlViewFactory.createInAppMessageView(DefaultInAppMessageHtmlViewFactory.java:22)
at com.braze.ui.inappmessage.BrazeInAppMessageManager.displayInAppMessage(BrazeInAppMessageManager.java:520)
at com.braze.ui.inappmessage.utils.BackgroundInAppMessagePreparer$displayPreparedInAppMessage$2.invokeSuspend(BackgroundInAppMessagePreparer.java:274)
No response
This ANR is being reported by DataDog RUM. But we don't see this issue on Crashlytics or Play Console.
We are not sure if you can mitigate it on your side, or if ANR just propagates from WebView through Braze.
30.4.0
Not able to reproduce, saw the crashes from Crashlytics
No crash
Crash with IllegalArgumentException, stack trace attached
Fatal Exception: java.lang.IllegalArgumentException: Key "NjU0ZTBiNDRkZjc0YjkwMDRlMGQ3MDc0XyRfY2M9MzJkZTRlN2ItNmFlYy1jYThlLWNiOWQtYjljOGU1YzYyYjEzJmRpJmRtJm12PTY1NGUwYjQ0ZGY3NGI5MDA0ZTBkNzA3NiZvZCZwaT13ZnMmdz02NTRlMGI0NGRmNzRiOTAwNGUwZDcwMmYmd3A9MTcxNDE0NjkzMSZ3dj02NTRlMGI0NGRmNzRiOTAwNGUwZDczNmM=" was already used. If you are using LazyColumn/Row please make sure you provide a unique key for each item.
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose(LayoutNodeSubcompositionsState.java:437)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$Scope.subcompose(SubcomposeLayout.kt:872)
at androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScopeImpl.measure-0kLqBqw(LazyLayoutMeasureScope.kt:125)
at androidx.compose.foundation.lazy.LazyListMeasuredItemProvider.getAndMeasure(LazyListMeasuredItemProvider.java:48)
at androidx.compose.foundation.lazy.LazyListMeasureKt.measureLazyList-5IMabDg(LazyListMeasure.kt:195)
at androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke-0kLqBqw(LazyList.kt:313)
at androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke(LazyList.kt:178)
at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$3$2$1.invoke-0kLqBqw(LazyLayout.kt:107)
at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$3$2$1.invoke(LazyLayout.kt:100)
at androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s(SubcomposeLayout.kt:709)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:126)
at androidx.compose.foundation.AndroidOverscroll_androidKt$StretchOverscrollNonClippingLayer$2.invoke-3p2s80s(AndroidOverscroll_android.kt:584)
at androidx.compose.foundation.AndroidOverscroll_androidKt$StretchOverscrollNonClippingLayer$2.invoke(AndroidOverscroll_android.kt:583)
at androidx.compose.ui.layout.LayoutModifierImpl.measure-3p2s80s(LayoutModifier.kt:294)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.foundation.AndroidOverscroll_androidKt$StretchOverscrollNonClippingLayer$1.invoke-3p2s80s(AndroidOverscroll.android.kt:568)
at androidx.compose.foundation.AndroidOverscroll_androidKt$StretchOverscrollNonClippingLayer$1.invoke(AndroidOverscroll.android.kt:567)
at androidx.compose.ui.layout.LayoutModifierImpl.measure-3p2s80s(LayoutModifier.kt:294)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:646)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasureBlock$1.invoke(LayoutNodeLayoutDelegate.java:252)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasureBlock$1.invoke(LayoutNodeLayoutDelegate.java:251)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.java:2303)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:500)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:256)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:113)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0(LayoutNodeLayoutDelegate.java:1617)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.java:36)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:620)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release(LayoutNode.java:1145)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release$default(LayoutNode.java:1136)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-sdFAvZA(MeasureAndLayoutDelegate.kt:356)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:514)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded$default(MeasureAndLayoutDelegate.kt:491)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:377)
at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout(AndroidComposeView.android.kt:971)
at androidx.compose.ui.node.Owner.measureAndLayout$default(Owner.java:228)
at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:1224)
at android.view.View.draw(View.java:23303)
at android.view.View.updateDisplayListIfDirty(View.java:22151)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4566)
at android.view.View.updateDisplayListIfDirty(View.java:22097)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4566)
at android.view.View.updateDisplayListIfDirty(View.java:22097)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4566)
at android.view.View.updateDisplayListIfDirty(View.java:22097)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4566)
at android.view.View.updateDisplayListIfDirty(View.java:22097)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4566)
at android.view.View.updateDisplayListIfDirty(View.java:22097)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4566)
at android.view.View.updateDisplayListIfDirty(View.java:22097)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4566)
at android.view.View.updateDisplayListIfDirty(View.java:22097)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4566)
at android.view.View.updateDisplayListIfDirty(View.java:22097)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4593)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4566)
at android.view.View.updateDisplayListIfDirty(View.java:22097)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:682)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:688)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:786)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:4678)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4389)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3604)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2372)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9082)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1234)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1242)
at android.view.Choreographer.doCallbacks(Choreographer.java:902)
at android.view.Choreographer.doFrame(Choreographer.java:835)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1217)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:8066)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:703)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
No response
No response
com.braze:android-sdk-ui:24.3.0
Register activity lifecycle callbacks Android Studio prompts:
However, Android Studio can compile normally.
Android Studio does not have a red line prompt.
Perhaps this is a problem caused by Android Studio.
No response
No response
30.0.0
With StrictMode enabled, call com.braze.models.cards.Card.logClick()
by clicking on a Content Card
Crash shouldn't happen
Crash happens
E FATAL EXCEPTION: pool-16-thread-1
android.os.strictmode.DiskReadViolation
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1658)
at [libcore.io](http://libcore.io/).BlockGuardOs.access(BlockGuardOs.java:74)
at [libcore.io](http://libcore.io/).ForwardingOs.access(ForwardingOs.java:128)
at android.app.ActivityThread$AndroidOs.access(ActivityThread.java:8615)
at [java.io](http://java.io/).UnixFileSystem.checkAccess(UnixFileSystem.java:281)
at [java.io](http://java.io/).File.exists(File.java:813)
at android.app.SharedPreferencesImpl$EditorImpl.isSpeg(SharedPreferencesImpl.java:505)
at android.app.SharedPreferencesImpl$EditorImpl.apply(SharedPreferencesImpl.java:517)
at bo.app.y.a(SourceFile:1528)
at bo.app.y.a(SourceFile:1512)
at bo.app.y.markCardAsClicked(SourceFile:1)
at com.braze.models.cards.Card.logClick(SourceFile:6)
No response
Device
Brand:Samsung
Model:Galaxy S20 FE
Operating System
Version:Android 13
29.0.1
We currently have a content card that displays an in-app messaged when tapped. This in-app message creates an InAppMessageHtmlView
. When we try to display this in-app message for the first time, or any other in-app message for that matter, while the ContentCardFragment is displaying, we get the error thrown in the logs below. After closing the screen and opening again, it works as intended. But with the first time after killing the app, this always happens, and the common denominator seems to be the ContentCardFragment.
The expected behaviour is like version 29.0.0. No error is thrown and the in-app message opens the first time. Everything appears to be working with no issues with version 29.0.0.
E Child job of BrazeCoroutineScope got exception: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:11199)
at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:2487)
at android.view.View.requestLayout(View.java:27053)
at android.view.View.requestLayout(View.java:27053)
at android.view.View.requestLayout(View.java:27053)
at android.view.View.requestLayout(View.java:27053)
at android.view.View.requestLayout(View.java:27053)
at android.view.View.requestLayout(View.java:27053)
at android.view.View.requestLayout(View.java:27053)
at android.view.View.requestLayout(View.java:27053)
at android.view.View.requestLayout(View.java:27053)
at androidx.recyclerview.widget.RecyclerView.requestLayout(RecyclerView.java:4881)
at android.view.View.requestLayout(View.java:27053)
at android.view.View.requestLayout(View.java:27053)
at androidx.constraintlayout.widget.ConstraintLayout.requestLayout(ConstraintLayout.java:3605)
at android.view.View.requestLayout(View.java:27053)
at android.widget.ImageView.setImageDrawable(ImageView.java:606)
at androidx.appcompat.widget.AppCompatImageView.setImageDrawable(AppCompatImageView.java:112)
at android.widget.ImageView.setImageBitmap(ImageView.java:772)
at androidx.appcompat.widget.AppCompatImageView.setImageBitmap(AppCompatImageView.java:124)
at com.braze.images.DefaultBrazeImageLoader$q.invokeSuspend(SourceFile:13)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108)
at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:115)
at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:103)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:793)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:697)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:684)
No response
29.0.1
Steps:
An in-app message is displayed
In-app message disappears
2023-11-23 11:42:10.566 14711-14878/***** D/Braze v29.0.1 .e1: Triggering com.braze.events.InAppMessageEvent on 1 subscribers.
2023-11-23 11:42:10.566 14711-14878/***** D/Braze v29.0.1 .e1: Triggering com.braze.events.InAppMessageEvent on 0 subscribers.
2023-11-23 11:42:10.568 14711-14873/***** D/Braze v29.0.1 .BrazeInAppMessageManager: The IInAppMessageManagerListener method beforeInAppMessageDisplayed returned DISPLAY_NOW. The in-app message will be displayed.
2023-11-23 11:42:10.572 14711-14873/***** D/Braze v29.0.1 .BackgroundInAppMessagePreparer: Starting asynchronous in-app message preparation for message.
2023-11-23 11:42:10.573 14711-14878/***** D/Braze v29.0.1 .q6: Updating re-eligibility for action Id 655606e972225b1cd71afef4 to time 1700732530.
2023-11-23 11:42:10.573 14711-14878/***** D/Braze v29.0.1 .n6: TriggerManager lastDisplayTimeSeconds updated to 1700732530
2023-11-23 11:42:10.575 14711-14873/***** D/Braze v29.0.1 .WebContentUtils: Replacing remote url "https://cdn.braze.eu/appboy/communication/assets/image_assets/images/6554844d502ded04debee6f8/original.jpg?1700037708" with local uri "file:///data/user/0/*****/cache/ab_triggers/448429470.jpg"
2023-11-23 11:42:10.575 14711-14873/***** D/Braze v29.0.1 .WebContentUtils: Replacing remote url "https://cdn.braze.eu/appboy/communication/assets/image_assets/images/655487b76fce81021da8535b/original.png?1700038582" with local uri "file:///data/user/0/*****/cache/ab_triggers/365651839.png"
2023-11-23 11:42:10.577 14711-14711/***** D/Braze v29.0.1 .BackgroundInAppMessagePreparer: Displaying in-app message.
2023-11-23 11:42:10.580 14711-14711/***** D/Braze v29.0.1 .BrazeInAppMessageManager: Expiration timestamp not defined. Continuing.
2023-11-23 11:42:10.581 14711-14711/***** D/Braze v29.0.1 .ViewUtils: Current and preferred orientation are portrait.
2023-11-23 11:42:10.581 14711-14711/***** D/Braze v29.0.1 .BrazeInAppMessageManager: Requesting orientation lock.
2023-11-23 11:42:10.712 14711-14711/***** D/Braze v29.0.1 .BrazeConfigurationProvider: Unable to find the xml BOOLEAN configuration value with primary key 'com_braze_require_touch_mode_for_html_in_app_messages'. Using default value 'true'.
2023-11-23 11:42:10.712 14711-14711/***** D/Braze v29.0.1 .BrazeConfigurationProvider: Using resources value for key: 'com_braze_require_touch_mode_for_html_in_app_messages' and value: 'true'
2023-11-23 11:42:10.717 14711-14711/***** D/Braze v29.0.1 .BrazeConfigurationProvider: Unable to find the xml BOOLEAN configuration value with primary key 'com_braze_html_in_app_message_enable_html_link_target'. Using default value 'true'.
2023-11-23 11:42:10.717 14711-14711/***** D/Braze v29.0.1 .BrazeConfigurationProvider: Using resources value for key: 'com_braze_html_in_app_message_enable_html_link_target' and value: 'true'
2023-11-23 11:42:10.733 14711-14711/***** D/Braze v29.0.1 .BrazeConfigurationProvider: Unable to find the xml INTEGER configuration value with primary key 'com_braze_in_app_message_webview_client_max_onpagefinished_wait_ms'. Using default value '15000'.
2023-11-23 11:42:10.733 14711-14711/***** D/Braze v29.0.1 .BrazeConfigurationProvider: Using resources value for key: 'com_braze_in_app_message_webview_client_max_onpagefinished_wait_ms' and value: '15000'
2023-11-23 11:42:10.737 14711-14711/***** D/Braze v29.0.1 .BrazeInAppMessageManager: Creating view wrapper for base in-app message.
2023-11-23 11:42:10.738 14711-14711/***** D/Braze v29.0.1 .BrazeInAppMessageManager: In-app message view includes HTML. Delaying display until the content has finished loading.
2023-11-23 11:42:10.857 14711-14711/***** D/Braze v29.0.1 .BrazeInAppMessageManager: Page has finished loading. Opening in-app message view wrapper.
2023-11-23 11:42:10.857 14711-14711/***** D/Braze v29.0.1 .BrazeConfigurationProvider: Unable to find the xml BOOLEAN configuration value with primary key 'com_braze_device_in_app_message_accessibility_exclusive_mode_enabled'. Using default value 'false'.
2023-11-23 11:42:10.857 14711-14711/***** D/Braze v29.0.1 .BrazeConfigurationProvider: Using resources value for key: 'com_braze_device_in_app_message_accessibility_exclusive_mode_enabled' and value: 'false'
2023-11-23 11:42:10.857 14711-14711/***** D/Braze v29.0.1 .DefaultInAppMessageViewWrapper: Detected root view height of 2065
2023-11-23 11:42:10.857 14711-14711/***** D/Braze v29.0.1 .DefaultInAppMessageViewLifecycleListener: IInAppMessageViewLifecycleListener.beforeOpened called.
2023-11-23 11:42:10.857 14711-14711/***** D/Braze v29.0.1 .t: Checking if this session needs to be sealed: 8479879f-4ba3-4da1-a8fe-18db372ebf7e
2023-11-23 11:42:10.857 14711-14711/***** D/Braze v29.0.1 .t: Checking if this session needs to be sealed: 8479879f-4ba3-4da1-a8fe-18db372ebf7e
2023-11-23 11:42:10.858 14711-14711/***** D/Braze v29.0.1 .e1: bo.app.n0 fired:
commandType = ADD_BRAZE_EVENT
brazeEvent = {"name":"si","data":{"trigger_ids":["NjU1NjA2ZTk3MjIyNWIxY2Q3MWFmZWY0XyRfbXY9NjU1NjA2ZTk3MjIyNWIxY2Q3MWFmZWZlJnBpPWNtcA=="]},"time":1.700732530857E9,"user_id":"******","session_id":"8479879f-4ba3-4da1-a8fe-18db372ebf7e"}
sessionId = null
brazeRequest = null
2023-11-23 11:42:10.858 14711-14711/***** D/Braze v29.0.1 .e1: Triggering bo.app.n0 on 0 subscribers.
2023-11-23 11:42:10.858 14711-14711/***** D/Braze v29.0.1 .e1: Triggering bo.app.n0 on 1 subscribers.
2023-11-23 11:42:10.858 14711-14711/***** D/Braze v29.0.1 .DefaultInAppMessageViewWrapper: Adding In-app message view to parent view group.
2023-11-23 11:42:10.860 14711-14711/***** D/Braze v29.0.1 .DefaultInAppMessageViewWrapper: In-app message view will animate into the visible area.
2023-11-23 11:42:10.860 14711-14742/***** D/Braze v29.0.1 .u5: Adding event to storage with uid 8d4a5335-1f5e-4f88-994e-e614cd8f3e98
2023-11-23 11:42:11.092 14711-14711/***** D/Braze v29.0.1 .DefaultInAppMessageViewWrapper: In-app message animated into view.
2023-11-23 11:42:11.093 14711-14711/***** D/Braze v29.0.1 .DefaultInAppMessageViewLifecycleListener: IInAppMessageViewLifecycleListener.afterOpened called.
2023-11-23 11:42:13.187 14711-14711/***** D/Braze v29.0.1 .BrazeInAppMessageManager: In-app message view includes HTML. Removing the page finished listener.
2023-11-23 11:42:13.190 14711-14711/***** D/Braze v29.0.1 .ViewUtils: Removed view: com.braze.ui.inappmessage.views.InAppMessageHtmlView{6e8cefe VFE...C.. ......ID 0,0-1080,2065 #7f0b01a5 app:id/com_braze_inappmessage_html}
from parent: androidx.appcompat.widget.ContentFrameLayout{6a5b65f V.E...... ......ID 0,0-1080,2065 #1020002 android:id/content}
2023-11-23 11:42:13.910 14711-14796/***** D/Braze v29.0.1 .p: Messaging session stopped. Adding new messaging session timestamp: 1700732533
2023-11-23 11:42:13.910 14711-14796/***** D/Braze v29.0.1 .t: Checking if this session needs to be sealed: 8479879f-4ba3-4da1-a8fe-18db372ebf7e
2023-11-23 11:42:13.910 14711-14796/***** D/Braze v29.0.1 .t: Creating a session seal alarm with a delay of 240000 ms
2023-11-23 11:42:13.913 14711-14796/***** D/Braze v29.0.1 .e1: bo.app.t5 fired:
bo.app.t5@6c33ae7
2023-11-23 11:42:13.913 14711-14796/***** D/Braze v29.0.1 .e1: Triggering bo.app.t5 on 0 subscribers.
2023-11-23 11:42:13.913 14711-14796/***** D/Braze v29.0.1 .e1: Triggering bo.app.t5 on 2 subscribers.
2023-11-23 11:42:13.913 14711-14796/***** D/Braze v29.0.1 .t0: Ending DUST subscription on delay
2023-11-23 11:42:13.913 14711-14796/***** D/Braze v29.0.1 .t: Closed session with id 8479879f-4ba3-4da1-a8fe-18db372ebf7e
2023-11-23 11:42:15.631 14711-14796/***** D/Braze v29.0.1 .t: Checking if this session needs to be sealed: 8479879f-4ba3-4da1-a8fe-18db372ebf7e
2023-11-23 11:42:15.631 14711-14796/***** D/Braze v29.0.1 .t: Cancelling session seal alarm
2023-11-23 11:42:15.633 14711-14796/***** D/Braze v29.0.1 .e1: bo.app.r5 fired:
bo.app.r5@81b77d7
2023-11-23 11:42:15.633 14711-14796/***** D/Braze v29.0.1 .e1: Triggering bo.app.r5 on 0 subscribers.
2023-11-23 11:42:15.633 14711-14796/***** D/Braze v29.0.1 .e1: Triggering bo.app.r5 on 3 subscribers.
2023-11-23 11:42:15.634 14711-14796/***** D/Braze v29.0.1 .d1: Session start event for new session received.
2023-11-23 11:42:15.634 14711-14796/***** D/Braze v29.0.1 .d1: Not automatically requesting Content Card refresh on session created event due to server configuration.
2023-11-23 11:42:15.634 14711-14796/***** D/Braze v29.0.1 .d1: Not automatically requesting Feature Flags refresh on session created event due to server configuration.
2023-11-23 11:42:15.634 14711-14796/***** D/Braze v29.0.1 .d1: Not automatically requesting Push Max on session created event due to server configuration.
2023-11-23 11:42:15.634 14711-14796/***** D/Braze v29.0.1 .d1: Not automatically starting DUST subscription on session created event due to server configuration.
2023-11-23 11:42:15.634 14711-14796/***** D/Braze v29.0.1 .g0: Data flush interval has changed from -1 ms to 10000 ms after connectivity state change to: GREAT and session state: OPEN_SESSION
2023-11-23 11:42:15.634 14711-14796/***** D/Braze v29.0.1 .g0: Posting new sync runnable with delay 10000 ms
2023-11-23 11:42:15.636 14711-14796/***** D/Braze v29.0.1 .t0: Cancelling ending of DUST subscription on delay and resuming stream
2023-11-23 11:42:15.636 14711-14796/***** D/Braze v29.0.1 .t0: Cannot start a dust subscription with mite null and enabled false
2023-11-23 11:42:15.636 14711-14796/***** D/Braze v29.0.1 .t: Checking if this session needs to be sealed: 8479879f-4ba3-4da1-a8fe-18db372ebf7e
2023-11-23 11:42:15.636 14711-14796/***** I/Braze v29.0.1 .o: Completed the openSession call. Starting or continuing session 8479879f-4ba3-4da1-a8fe-18db372ebf7e
2023-11-23 11:42:15.637 14711-14796/***** D/Braze v29.0.1 .p: Messaging session timeout: 21600, current diff: 2
2023-11-23 11:42:15.637 14711-14796/***** D/Braze v29.0.1 .p: Messaging session not started.
2023-11-23 11:42:15.643 14711-14711/***** D/Braze v29.0.1 .BrazeInAppMessageManager: Removing existing in-app message event subscriber before subscribing a new one.
2023-11-23 11:42:15.643 14711-14711/***** D/Braze v29.0.1 .BrazeInAppMessageManager: Subscribing in-app message event subscriber
2023-11-23 11:42:15.643 14711-14711/***** D/Braze v29.0.1 .BrazeInAppMessageManager: Removing existing in-app message event subscriber before subscribing a new one.
2023-11-23 11:42:15.643 14711-14711/***** D/Braze v29.0.1 .BrazeInAppMessageManager: Subscribing in-app message event subscriber
2023-11-23 11:42:15.911 14711-14796/***** D/Braze v29.0.1 .t: Checking if this session needs to be sealed: 8479879f-4ba3-4da1-a8fe-18db372ebf7e
2023-11-23 11:42:15.911 14711-14796/***** D/Braze v29.0.1 .t: Checking if this session needs to be sealed: 8479879f-4ba3-4da1-a8fe-18db372ebf7e
2023-11-23 11:42:15.912 14711-14872/***** D/Braze v29.0.1 .u5: Adding event to storage with uid c54534b7-877f-4192-af5c-157da171777b
2023-11-23 11:42:15.912 14711-14796/***** D/Braze v29.0.1 .e1: bo.app.n0 fired:
commandType = ADD_BRAZE_EVENT
brazeEvent = {"name":"ce","data":{"n":"screen_view","p":{"name":"Account"}},"time":1.70073253591E9,"user_id":"******","session_id":"8479879f-4ba3-4da1-a8fe-18db372ebf7e"}
sessionId = null
brazeRequest = null
2023-11-23 11:42:15.912 14711-14796/***** D/Braze v29.0.1 .e1: Triggering bo.app.n0 on 0 subscribers.
2023-11-23 11:42:15.912 14711-14796/***** D/Braze v29.0.1 .e1: Triggering bo.app.n0 on 1 subscribers.
2023-11-23 11:42:15.912 14711-14796/***** D/Braze v29.0.1 .bo.app.n6: In flight trigger requests is empty. Executing any pending trigger events.
2023-11-23 11:42:15.912 14711-14796/***** D/Braze v29.0.1 .bo.app.n6: New incoming <custom_event>. Searching for matching triggers.
2023-11-23 11:42:15.912 14711-14796/***** D/Braze v29.0.1 .bo.app.n6: Failed to match triggered action for incoming <custom_event>.
2023-11-23 11:42:15.912 14711-14796/***** D/Braze v29.0.1 .n6: No action found for custom_event event, publishing NoMatchingTriggerEvent
2023-11-23 11:42:15.913 14711-14796/***** D/Braze v29.0.1 .e1: com.braze.events.NoMatchingTriggerEvent fired:
NoMatchingTriggerEvent(sourceEventType=custom_event)
2023-11-23 11:42:15.913 14711-14796/***** D/Braze v29.0.1 .e1: Triggering com.braze.events.NoMatchingTriggerEvent on 0 subscribers.
2023-11-23 11:42:15.913 14711-14796/***** D/Braze v29.0.1 .e1: Triggering com.braze.events.NoMatchingTriggerEvent on 0 subscribers.
2023-11-23 11:42:15.913 14711-14796/***** I/Braze v29.0.1 .e1: Event was published, but no subscribers were found. But not saving event for publishing later. Event class: class com.braze.events.NoMatchingTriggerEvent
No response
26.0.0
targetSdkVersion: 33
implementation "com.braze:android-sdk-ui:26.0.0"
We should show the notification permission flow.
The notification permission flow is not working on Android 13.
No response
Hi there,
Updating the targetSdkVersion to 33 we’re experimenting with some issues with the Notification Permission.
In our project we're using:
targetSdkVersion: 33
implementation "com.braze:android-sdk-ui:26.0.0"
We realized in devices with Android 13 the Push notification permission is not shown.
So, since from API 33 and above in Android we need to ask for that permission in a different way, it's called POST_NOTIFICATIONS.
https://developer.android.com/develop/ui/views/notifications/notification-permission
just wondering if this is something that you will address and give us support for that, or is something that we should handle on our side?
Thanks in advance
Jero
30.3.0
Run Flutter Android app using the Flutter braze_plugin
v9.0.0 which uses the Braze Android SDK v30.3.0
under the hood.
No errors in the logs.
The app works fine, however, ever since upgrading from v29.0.1
to v30.3.0
my logs get flooded with errors like these
E/Braze v30.3.0 .DateTimeUtils(10408): Error reading date and time from network. Using system time instead.
E/Braze v30.3.0 .DateTimeUtils(10408): java.time.DateTimeException: Missing network time fix
E/Braze v30.3.0 .DateTimeUtils(10408): at java.lang.reflect.Constructor.newInstance0(Native Method)
E/Braze v30.3.0 .DateTimeUtils(10408): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.ParcelableException.readFromParcel(ParcelableException.java:56)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.ParcelableException$1.createFromParcel(ParcelableException.java:82)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.ParcelableException$1.createFromParcel(ParcelableException.java:79)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.Parcel.readParcelableInternal(Parcel.java:5015)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.Parcel.readParcelable(Parcel.java:4997)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.Parcel.createExceptionOrNull(Parcel.java:3177)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.Parcel.createException(Parcel.java:3166)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.Parcel.readException(Parcel.java:3149)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.Parcel.readException(Parcel.java:3091)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.app.timedetector.ITimeDetectorService$Stub$Proxy.latestNetworkTime(ITimeDetectorService.java:462)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.SystemClock.currentNetworkTimeMillis(SystemClock.java:345)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.SystemClock$3.millis(SystemClock.java:392)
E/Braze v30.3.0 .DateTimeUtils(10408): at com.braze.support.DateTimeUtils.nowInMilliseconds(SourceFile:4)
E/Braze v30.3.0 .DateTimeUtils(10408): at bo.app.c5.a(SourceFile:19)
E/Braze v30.3.0 .DateTimeUtils(10408): at bo.app.c5$g.invokeSuspend(SourceFile:4)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:111)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:99)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
Using v29.0.1
I only got 1 of these on app startup, now they are just constant and won't go away unless I set
BrazeLogger.logLevel = Log.ASSERT
E/Braze v30.3.0 .DateTimeUtils(10408): Error reading date and time from network. Using system time instead.
E/Braze v30.3.0 .DateTimeUtils(10408): java.time.DateTimeException: Missing network time fix
E/Braze v30.3.0 .DateTimeUtils(10408): at java.lang.reflect.Constructor.newInstance0(Native Method)
E/Braze v30.3.0 .DateTimeUtils(10408): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.ParcelableException.readFromParcel(ParcelableException.java:56)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.ParcelableException$1.createFromParcel(ParcelableException.java:82)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.ParcelableException$1.createFromParcel(ParcelableException.java:79)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.Parcel.readParcelableInternal(Parcel.java:5015)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.Parcel.readParcelable(Parcel.java:4997)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.Parcel.createExceptionOrNull(Parcel.java:3177)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.Parcel.createException(Parcel.java:3166)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.Parcel.readException(Parcel.java:3149)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.Parcel.readException(Parcel.java:3091)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.app.timedetector.ITimeDetectorService$Stub$Proxy.latestNetworkTime(ITimeDetectorService.java:462)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.SystemClock.currentNetworkTimeMillis(SystemClock.java:345)
E/Braze v30.3.0 .DateTimeUtils(10408): at android.os.SystemClock$3.millis(SystemClock.java:392)
E/Braze v30.3.0 .DateTimeUtils(10408): at com.braze.support.DateTimeUtils.nowInMilliseconds(SourceFile:4)
E/Braze v30.3.0 .DateTimeUtils(10408): at bo.app.c5.a(SourceFile:19)
E/Braze v30.3.0 .DateTimeUtils(10408): at bo.app.c5$g.invokeSuspend(SourceFile:4)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:111)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:99)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
E/Braze v30.3.0 .DateTimeUtils(10408): at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
Device: Google Pixel 6
OS: Android 14 (SDK 34)
I would like to know if there are any plans for Jetpack Compose support in near future?
In our new App that is completely build of Jetpack Compose components (UI, Navigation, etc) we still need to use XML layouts for our customized views like In-App-Modal and implement a custom Braze Navigator to work with the new compose navigation.
Technically it is working, but preference would be to have support for it to avoid workarounds.
Thank you!
Cloned from Appboy/appboy-android-sdk#208
No response
No response
25.0.0
Hi Braze team.
We are facing a huge number of ANR.
And the Android Vitals presenting that ANR is happening when
Broadcast of Intent { act=com.safetyculture.iauditor.intent.BRAZE_SESSION_SHOULD_SEAL }
Following are stacktrace
"main" tid=1 Native
#00 pc 0x00000000000a6b6c /apex/com.android.runtime/lib64/bionic/libc.so (__epoll_pwait+12)
#01 pc 0x0000000000017cbc /system/lib64/libutils.so (android::Looper::pollInner+192)
#02 pc 0x0000000000017b98 /system/lib64/libutils.so (android::Looper::pollOnce+116)
#03 pc 0x0000000000162854 /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce+48)
at android.os.MessageQueue.nativePollOnce (Native method)
at android.os.MessageQueue.next (MessageQueue.java:335)
at android.os.Looper.loopOnce (Looper.java:161)
at android.os.Looper.loop (Looper.java:288)
at android.app.ActivityThread.main (ActivityThread.java:8022)
at java.lang.reflect.Method.invoke (Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:942)
"ReferenceQueueDaemon" tid=10 Waiting
at java.lang.Object.wait (Native method)
at java.lang.Object.wait (Object.java:386)
at java.lang.Object.wait (Object.java:524)
at java.lang.Daemons$ReferenceQueueDaemon.runInternal (Daemons.java:239)
at java.lang.Daemons$Daemon.run (Daemons.java:145)
at java.lang.Thread.run (Thread.java:1012)
"FinalizerDaemon" tid=11 Waiting
at java.lang.Object.wait (Native method)
at java.lang.Object.wait (Object.java:386)
at java.lang.ref.ReferenceQueue.remove (ReferenceQueue.java:210)
at java.lang.ref.ReferenceQueue.remove (ReferenceQueue.java:231)
at java.lang.Daemons$FinalizerDaemon.runInternal (Daemons.java:309)
at java.lang.Daemons$Daemon.run (Daemons.java:145)
at java.lang.Thread.run (Thread.java:1012)
"FinalizerWatchdogDaemon" tid=12 Waiting
at java.lang.Object.wait (Native method)
at java.lang.Object.wait (Object.java:386)
at java.lang.Object.wait (Object.java:524)
at java.lang.Daemons$FinalizerWatchdogDaemon.sleepUntilNeeded (Daemons.java:428)
at java.lang.Daemons$FinalizerWatchdogDaemon.runInternal (Daemons.java:408)
at java.lang.Daemons$Daemon.run (Daemons.java:145)
at java.lang.Thread.run (Thread.java:1012)
It's looks like Main thread get blocked when Braze broadcasting the intent with action BRAZE_SESSION_SHOULD_SEAL
.
Could you please have a look?
Thanks and regards.
No ANR
ANR
No response
No response
30.3.0
As per the log, this method is getting ANR
setPushNotificationSubscriptionType
Should not create ANR
ANR is getting for many users
main (timed waiting):tid=1 systid=30487
at jdk.internal.misc.Unsafe.park(Native method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:91)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:85)
at kotlinx.coroutines.BuildersKt.runBlocking(Builders.kt:9)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:15)
at kotlinx.coroutines.BuildersKt.runBlocking$default(Builders.kt:9)
at t55649196.m5c55e4a0.k797572f3.t8e970ce4(unavailable:36)
at t55649196.m5c55e4a0.k797572f3.getCurrentUser(SourceFile:1)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.zd76f9813.d021e715b.m5c55e4a0.ee1fd6ba8.setPushNotificationSubscriptionType(unavailable:22)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.y77eb7b70.x22c24678.p9d5e45b0(unavailable:60)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.y77eb7b70.x22c24678.b25920628(unavailable:9)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.y77eb7b70.x22c24678$ca044e827$1.invoke(SourceFile:5)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.y77eb7b70.x22c24678$ca044e827$1.invoke(SourceFile:1)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.qe9d7ecf2.r6efb82ac.se4e1f682.requestPermissions(unavailable:99)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.qe9d7ecf2.r6efb82ac.p5c0587ce$h7b0fed00.zfe4715f0(unavailable:16)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.y77eb7b70.x22c24678.requestPermissions(unavailable:38)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.ec636fe97.yc420334c.m1cb83989.o1eeac866(unavailable:44)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.ec636fe97.yc420334c.m1cb83989.h4486e06b(unavailable:12)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.ec636fe97.yc420334c.m1cb83989.wccd3ab75(unavailable:9)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.ec636fe97.yc420334c.m1cb83989$w8d912e17$1$1$1.h57fc69a7(unavailable:9)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.ec636fe97.yc420334c.m1cb83989$w8d912e17$1$1$1.r106c1bda(unavailable:9)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.ec636fe97.yc420334c.m1cb83989$w8d912e17$1$1$1$1.emit(SourceFile:2)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.ec636fe97.yc420334c.m1cb83989$w8d912e17$1$1$1$1.emit(SourceFile:1)
at kotlinx.coroutines.flow.StateFlowImpl.collect(StateFlow.kt:400)
at kotlinx.coroutines.flow.StateFlowImpl$collect$1.invokeSuspend(StateFlow.kt:21)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
at kotlinx.coroutines.CoroutineContextKt.withContinuationContext(CoroutineContext.kt:119)
at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:178)
at kotlinx.coroutines.DispatchedTaskKt.runUnconfinedEventLoop(DispatchedTask.kt:214)
at kotlinx.coroutines.DispatchedTaskKt.resumeUnconfined(DispatchedTask.kt:190)
at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:56)
at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:16)
at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:517)
at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:497)
at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:19)
at kotlinx.coroutines.flow.StateFlowSlot.makePending(StateFlow.kt:66)
at kotlinx.coroutines.flow.StateFlowImpl.updateState(StateFlow.kt:353)
at kotlinx.coroutines.flow.StateFlowImpl.setValue(StateFlow.kt:14)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.ec636fe97.yc420334c.pd9de8f35.cce07e5a6(unavailable:97)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.ec636fe97.yc420334c.pd9de8f35.gb38dae6f(unavailable:9)
at t55649196.ief4fea39.s80dc7ca3.s66f4d0f1.ui.ec636fe97.yc420334c.pd9de8f35$cce07e5a6$1.invokeSuspend(unavailable:20)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
at kotlinx.coroutines.CoroutineContextKt.withContinuationContext(CoroutineContext.kt:118)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:90)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.app.ActivityThread.main(ActivityThread.java:8893)
at java.lang.reflect.Method.invoke(Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
No response
29.0.1
Call the method Braze.disableSdk(context)
Not have an alert about strict mode
We have an alert
Fatal Exception: android.os.strictmode.DiskReadViolation:
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1658)
at libcore.io.BlockGuardOs.access(BlockGuardOs.java:74)
at libcore.io.ForwardingOs.access(ForwardingOs.java:128)
at android.app.ActivityThread$AndroidOs.access(ActivityThread.java:8610)
at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:281)
at java.io.File.exists(File.java:813)
at android.app.SharedPreferencesImpl$EditorImpl.isSpeg(SharedPreferencesImpl.java:505)
at android.app.SharedPreferencesImpl$EditorImpl.apply(SharedPreferencesImpl.java:517)
at bo.app.g5.a(SourceFile:5)
at com.braze.Braze$Companion.disableSdk(SourceFile:1)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8757)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
No response
Device
Brand:Samsung
Model:Galaxy S20 FE
Operating System
Version:Android 13
30.1.0
This Braze crash is the number 1 top crash from our app in production. We have not identified a way to reproduce the crash.
App should not crash when activity goes in pause
App crash when activity goes in pause (not easy to reproduce)
Caused by java.lang.IndexOutOfBoundsException:
at android.view.ViewGroup.removeFromArray(ViewGroup.java:6215)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:6403)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:6365)
at android.view.ViewGroup.removeView(ViewGroup.java:6296)
at com.braze.ui.support.ViewUtils.removeViewFromParent(ViewUtils.kt:28)
at com.braze.ui.inappmessage.BrazeInAppMessageManager.unregisterInAppMessageManager(BrazeInAppMessageManager.kt:259)
at com.braze.BrazeActivityLifecycleCallbackListener.onActivityPaused(BrazeActivityLifecycleCallbackListener.kt:122)
at android.app.Application.dispatchActivityPaused(Application.java:485)
at android.app.Activity.dispatchActivityPaused(Activity.java:1454)
at android.app.Activity.onPause(Activity.java:2392)
at androidx.fragment.app.FragmentActivity.onPause(FragmentActivity.java:282)
at android.app.Activity.performPause(Activity.java:8400)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1510)
at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:5261)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:5222)
at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:6040)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5958)
at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2336)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:247)
at android.app.ActivityThread.main(ActivityThread.java:8676)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
We are using the recommended Activity lifecycle callback integration
29.0.1
braze.requestContentCardsRefresh()
Local content cards list should get updated, remove dismissed cards or add new ones
The content cards list is not changed
The refresh works as expected when using the deprecated method instead
braze.requestContentCardsRefresh(
fromCache = false
)
No response
No response
com.appboy:android-sdk-ui:24.2.+
Steps to reproduce :
Check attached video
When application in foreground or background and user clicks on notification to redirect on expected screen, it should not leave black window as another app instance in background.
When application is in foreground / background and user clicks on notification present in notification bar to redirect on specific page, it's triggering another instance of application with blank/black screen in background as shown in attached video
No response
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.