Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Getting crash with Firebase in-app messaging when show specify campaign #4625

Closed
sscatch20 opened this issue Feb 6, 2023 · 7 comments
Closed

Comments

@sscatch20
Copy link

sscatch20 commented Feb 6, 2023

[READ] Step 1: Are you in the right place?

Issues filed here should be about bugs in the code in this repository.
If you have a general question, need help debugging, or fall into some
other category use one of these other channels:

  • For general technical questions, post a question on StackOverflow
    with the firebase tag.
  • For general Firebase discussion, use the firebase-talk
    google group.
  • For help troubleshooting your application that does not fall under one
    of the above categories, reach out to the personalized
    Firebase support channel.

[REQUIRED] Step 2: Describe your environment

  • Android Studio version: Electric Eel 2022.1.1
  • Firebase Component: Firebase in-app messaging
  • Component version: 20.2.0 (Bom 31.0.2)

[REQUIRED] Step 3: Describe the problem

Getting crash with Firebase in-app messaging when specify campaign need to show
The log show secondary action must be null or have a button
But the issue happened when it trigger a specify campaign, and the campaign has 1 button only.
However, copy the campaign, or create same new campaign, can't reproduce the issue.

Similar issue:
#4048

10:25:03.088 E FATAL EXCEPTION: main
Process: com.catchplay.asiaplay, PID: 32750
io.reactivex.exceptions.OnErrorNotImplementedException: The exception was not handled due to missing onError handler in the subscribe() method call. Further reading: https://github.com/ReactiveX/RxJava/wiki/Error-Handling | java.lang.IllegalArgumentException: Card model secondary action must be null or have a button
at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704)
at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701)
at io.reactivex.internal.subscribers.LambdaSubscriber.onError(LambdaSubscriber.java:79)
at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.checkTerminated(FlowableObserveOn.java:209)
at io.reactivex.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runAsync(FlowableObserveOn.java:399)
at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176)
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:124)
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(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Caused by: java.lang.IllegalArgumentException: Card model secondary action must be null or have a button
at com.google.firebase.inappmessaging.model.CardMessage$Builder.build(CardMessage.java:249)
at com.google.firebase.inappmessaging.model.ProtoMarshallerClient.decode(ProtoMarshallerClient.java:231)
at com.google.firebase.inappmessaging.internal.InAppMessageStreamManager.triggeredInAppMessage(InAppMessageStreamManager.java:365)
at com.google.firebase.inappmessaging.internal.InAppMessageStreamManager.lambda$getTriggeredInAppMessageMaybe$27(InAppMessageStreamManager.java:341)
at com.google.firebase.inappmessaging.internal.InAppMessageStreamManager.$r8$lambda$w4tUspl0-bTh48AvRyCAZ0a1mSM(Unknown Source:0)
at com.google.firebase.inappmessaging.internal.InAppMessageStreamManager$$ExternalSyntheticLambda16.apply(Unknown Source:6)
at io.reactivex.internal.operators.maybe.MaybeFlatten$FlatMapMaybeObserver.onSuccess(MaybeFlatten.java:88)
at io.reactivex.internal.operators.flowable.FlowableElementAtMaybe$ElementAtSubscriber.onNext(FlowableElementAtMaybe.java:80)
at io.reactivex.internal.operators.flowable.FlowableFlattenIterable$FlattenIterableSubscriber.drain(FlowableFlattenIterable.java:312)
at io.reactivex.internal.operators.flowable.FlowableFlattenIterable$FlattenIterableSubscriber.onNext(FlowableFlattenIterable.java:174)
at io.reactivex.internal.operators.flowable.FlowableMap$MapSubscriber.onNext(FlowableMap.java:56)
at io.reactivex.internal.subscriptions.DeferredScalarSubscription.complete(DeferredScalarSubscription.java:117)
at io.reactivex.internal.operators.flowable.FlowableToList$ToListSubscriber.onComplete(FlowableToList.java:84)
at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe$FlatMapMaybeSubscriber.drainLoop(FlowableFlatMapMaybe.java:327)
at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe$FlatMapMaybeSubscriber.drain(FlowableFlatMapMaybe.java:280)
at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe$FlatMapMaybeSubscriber.onComplete(FlowableFlatMapMaybe.java:152)
at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe$FlatMapMaybeSubscriber.drainLoop(FlowableFlatMapMaybe.java:327)
at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe$FlatMapMaybeSubscriber.drain(FlowableFlatMapMaybe.java:280)
10:25:03.089 E at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe$FlatMapMaybeSubscriber.onComplete(FlowableFlatMapMaybe.java:152)
at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe$FlatMapMaybeSubscriber.drainLoop(FlowableFlatMapMaybe.java:327)
at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe$FlatMapMaybeSubscriber.drain(FlowableFlatMapMaybe.java:280)
at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe$FlatMapMaybeSubscriber.onComplete(FlowableFlatMapMaybe.java:152)
at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onComplete(BasicFuseableSubscriber.java:120)
at io.reactivex.internal.subscribers.BasicFuseableConditionalSubscriber.onComplete(BasicFuseableConditionalSubscriber.java:119)
at io.reactivex.internal.operators.flowable.FlowableFromIterable$IteratorConditionalSubscription.fastPath(FlowableFromIterable.java:333)
at io.reactivex.internal.operators.flowable.FlowableFromIterable$BaseRangeSubscription.request(FlowableFromIterable.java:122)
at io.reactivex.internal.subscribers.BasicFuseableConditionalSubscriber.request(BasicFuseableConditionalSubscriber.java:152)
at io.reactivex.internal.subscribers.BasicFuseableSubscriber.request(BasicFuseableSubscriber.java:153)
at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe$FlatMapMaybeSubscriber.onSubscribe(FlowableFlatMapMaybe.java:107)
at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onSubscribe(BasicFuseableSubscriber.java:67)
at io.reactivex.internal.subscribers.BasicFuseableConditionalSubscriber.onSubscribe(BasicFuseableConditionalSubscriber.java:66)
at io.reactivex.internal.operators.flowable.FlowableFromIterable.subscribe(FlowableFromIterable.java:66)
at io.reactivex.internal.operators.flowable.FlowableFromIterable.subscribeActual(FlowableFromIterable.java:47)
at io.reactivex.Flowable.subscribe(Flowable.java:14805)
at io.reactivex.internal.operators.flowable.FlowableFilter.subscribeActual(FlowableFilter.java:34)
at io.reactivex.Flowable.subscribe(Flowable.java:14805)
at io.reactivex.internal.operators.flowable.FlowableFilter.subscribeActual(FlowableFilter.java:37)
at io.reactivex.Flowable.subscribe(Flowable.java:14805)
at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe.subscribeActual(FlowableFlatMapMaybe.java:54)
at io.reactivex.Flowable.subscribe(Flowable.java:14805)
at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe.subscribeActual(FlowableFlatMapMaybe.java:54)
at io.reactivex.Flowable.subscribe(Flowable.java:14805)
at io.reactivex.internal.operators.flowable.FlowableFlatMapMaybe.subscribeActual(FlowableFlatMapMaybe.java:54)
at io.reactivex.Flowable.subscribe(Flowable.java:14805)
at io.reactivex.internal.operators.flowable.FlowableToList.subscribeActual(FlowableToList.java:44)
at io.reactivex.Flowable.subscribe(Flowable.java:14805)
at io.reactivex.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:37)
at io.reactivex.Flowable.subscribe(Flowable.java:14805)
at io.reactivex.internal.operators.flowable.FlowableFlattenIterable.subscribeActual(FlowableFlattenIterable.java:81)
at io.reactivex.Flowable.subscribe(Flowable.java:14805)
at io.reactivex.internal.operators.flowable.FlowableElementAtMaybe.subscribeActual(FlowableElementAtMaybe.java:36)
at io.reactivex.Maybe.subscribe(Maybe.java:4262)
at io.reactivex.internal.operators.maybe.MaybeFlatten.subscribeActual(MaybeFlatten.java:42)
at io.reactivex.Maybe.subscribe(Maybe.java:4262)
at io.reactivex.internal.operators.maybe.MaybeFlatten$FlatMapMaybeObserver.onSuccess(MaybeFlatten.java:96)
at io.reactivex.internal.operators.maybe.MaybeSwitchIfEmpty$SwitchIfEmptyMaybeObserver.onSuccess(MaybeSwitchIfEmpty.java:75)
at io.reactivex.internal.operators.maybe.MaybeOnErrorNext$OnErrorNextMaybeObserver.onSuccess(MaybeOnErrorNext.java:88)
at io.reactivex.internal.operators.maybe.MaybePeek$MaybePeekObserver.onSuccess(MaybePeek.java:122)
10:25:03.089 E at io.reactivex.internal.operators.maybe.MaybePeek$MaybePeekObserver.onSuccess(MaybePeek.java:122)
at io.reactivex.internal.operators.maybe.MaybePeek$MaybePeekObserver.onSuccess(MaybePeek.java:122)
at io.reactivex.internal.operators.maybe.MaybeFilter$FilterMaybeObserver.onSuccess(MaybeFilter.java:89)
at io.reactivex.internal.operators.maybe.MaybeSwitchIfEmpty$SwitchIfEmptyMaybeObserver$OtherMaybeObserver.onSuccess(MaybeSwitchIfEmpty.java:110)
at io.reactivex.internal.operators.maybe.MaybePeek$MaybePeekObserver.onSuccess(MaybePeek.java:122)
at io.reactivex.internal.operators.maybe.MaybeFromCallable.subscribeActual(MaybeFromCallable.java:61)
at io.reactivex.Maybe.subscribe(Maybe.java:4262)
at io.reactivex.internal.operators.maybe.MaybePeek.subscribeActual(MaybePeek.java:56)
at io.reactivex.Maybe.subscribe(Maybe.java:4262)
at io.reactivex.internal.operators.maybe.MaybeSwitchIfEmpty$SwitchIfEmptyMaybeObserver.onComplete(MaybeSwitchIfEmpty.java:88)
at io.reactivex.internal.operators.maybe.MaybeFromCallable.subscribeActual(MaybeFromCallable.java:59)
at io.reactivex.Maybe.subscribe(Maybe.java:4262)
at io.reactivex.internal.operators.maybe.MaybeSwitchIfEmpty.subscribeActual(MaybeSwitchIfEmpty.java:38)
at io.reactivex.Maybe.subscribe(Maybe.java:4262)
at io.reactivex.internal.operators.maybe.MaybeFilter.subscribeActual(MaybeFilter.java:39)
at io.reactivex.Maybe.subscribe(Maybe.java:4262)
at io.reactivex.internal.operators.maybe.MaybePeek.subscribeActual(MaybePeek.java:56)
at io.reactivex.Maybe.subscribe(Maybe.java:4262)
at io.reactivex.internal.operators.maybe.MaybePeek.subscribeActual(MaybePeek.java:56)
at io.reactivex.Maybe.subscribe(Maybe.java:4262)
at io.reactivex.internal.operators.maybe.MaybePeek.subscribeActual(MaybePeek.java:56)
at io.reactivex.Maybe.subscribe(Maybe.java:4262)
at io.reactivex.internal.operators.maybe.MaybeOnErrorNext.subscribeActual(MaybeOnErrorNext.java:46)
at io.reactivex.Maybe.subscribe(Maybe.java:4262)
at io.reactivex.internal.operators.maybe.MaybeSwitchIfEmpty.subscribeActual(MaybeSwitchIfEmpty.java:38)
at io.reactivex.Maybe.subscribe(Maybe.java:4262)
at io.reactivex.internal.operators.maybe.MaybeFlatten.subscribeActual(MaybeFlatten.java:42)
at io.reactivex.Maybe.subscribe(Maybe.java:4262)
at io.reactivex.internal.operators.maybe.MaybeToFlowable.subscribeActual(MaybeToFlowable.java:45)
at io.reactivex.Flowable.subscribe(Flowable.java:14805)
at io.reactivex.Flowable.subscribe(Flowable.java:14752)
at io.reactivex.internal.operators.flowable.FlowableConcatMap$ConcatMapImmediate.drain(FlowableConcatMap.java:340)
at io.reactivex.internal.operators.flowable.FlowableConcatMap$BaseConcatMapSubscriber.onNext(FlowableConcatMap.java:159)
at io.reactivex.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runBackfused(FlowableObserveOn.java:448)
at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:172)
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
at java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)

Steps to reproduce:

The issue happened when it trigger a specify campaign, and the campaign has 1 button only.
However, copy the campaign, or create same new campaign, can't reproduce the issue.

Relevant Code:

else if (this.secondaryAction != null && this.secondaryAction.getButton() == null) {
throw new IllegalArgumentException("Card model secondary action must be null or have a button");
}
@google-oss-bot
Copy link
Contributor

I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.

@sscatch20 sscatch20 changed the title Getting crash with Firebase in-app messaging without secondary action Getting crash with Firebase in-app messaging when show specify campaign Feb 6, 2023
@argzdev
Copy link
Contributor

argzdev commented Feb 7, 2023

Thanks for reporting, @sscatch20. Might be related to #4214 which I think is being caused by a race condition. Are you running multiple campaigns? Or just one campaign?

@sscatch20
Copy link
Author

sscatch20 commented Feb 9, 2023

There are multiple campaigns, only when show the specify campaign will trigger the issue.
Campaign ID: 2630176140336433549

13:38:55.902 FIAM.Headless I Already impressed campaign Campaign C ? : true (copy from Campaign 2630176140336433549, not a must)
13:38:55.903 FIAM.Headless I Already impressed campaign Campaign A ? : true
13:38:55.903 FIAM.Headless I Already impressed campaign Campaign 2630176140336433549 ? : false

@argzdev
Copy link
Contributor

argzdev commented Feb 9, 2023

That's interesting, so just to confirm, other campaigns do not trigger this issue. Only one specific campaign does? Can you share some details or steps how you created your campaign, so I can try reproducing this on my end? Kindly remove any personally identifiable information when sharing. Thanks!

@google-oss-bot
Copy link
Contributor

Hey @sscatch20. We need more information to resolve this issue but there hasn't been an update in 5 weekdays. I'm marking the issue as stale and if there are no new updates in the next 5 days I will close it automatically.

If you have more information that will help us get to the bottom of this, just add a comment!

@sscatch20
Copy link
Author

sscatch20 commented Feb 16, 2023

The campaign setting are like this. It's no end time, once a day, and fired when to main foreground campaign.

@argzdev
Copy link
Contributor

argzdev commented Feb 17, 2023

Thanks for the extra details, @sscatch20. Upon checking your settings, it doesn't seem like there's anything unusual that would trigger a crash. I think the culprit is that there's an issue with the backend processing the campaign. That said, could you file an issue to our Firebase support? Since they have visibility on your campaign setup, our agents will be able to assist you better.

@argzdev argzdev closed this as completed Feb 17, 2023
@firebase firebase locked and limited conversation to collaborators Mar 20, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants