SplashActivity 中显示的 Firebase 应用内消息。如何在MainActivity中显示?

Firebase In-App Messaging showing in SplashActivity. How to show it in MainActivity?

我为我的 android 应用启用了 Firebase 应用内消息传递。当我测试应用程序内消息时,它显示在应用程序的 SplashActivity 中。

Activity 流程如下:SplashActivity>LoginActivity>MainActivity

注意: SplashActivity 仅具有 runnable 以获得 3 秒的延迟。 LoginActivity 有一些函数可以检查共享首选项是否不为空。

我尝试在 onCreate() 中添加以下代码行: FirebaseInAppMessaging.getInstance().setMessagesSuppressed(true)

FirebaseInAppMessaging.getInstance().setMessagesSuppressed(false)在onDestroy()

我希望这条消息显示在 MainActivity。

我只是 运行 参与其中,因为我还有一个启动器 activity 一直在接收我的通知。我将假设您将启动画面 activity 设置为启动器:

        <activity android:name=".SplashActivity"
          android:theme="@style/SplashTheme">
          <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
        </activity>

挑战在于系统将所有通知传递给您的启动器activity,它们在那里等待作为 Intent 捆绑数据。

这是此线程中的一个重要主题,下面突出显示了其中的一个要点:

  • 应用程序在后台:通知由 FCM 自动发送到通知托盘。当用户触摸通知时,通过启动清单中具有 android.intent.category.LAUNCHER 的 activity,应用程序会被带到前台。

通读整个链接的线程,因为这是一个最近似乎一直在发展的领域。

Firebase 应用内消息由分析事件触发。

如果你想在 MainActivity 中显示消息 ->

class MainActivity : AppCompatActivity() { 
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    FirebaseAnalytics.getInstance(this).logEvent("main_activity_ready",null)
    //or 
    //FirebaseInAppMessaging.getInstance().triggerEvent("main_activity_ready");

}
}

和select Firebase 控制台中的此事件。

使用以下方法在不同的 Activity 中“启动”和“停止”InAppMessaging。

public static void inAppMessagingInitialization(Context context, boolean setSuppressed,String eventName){ //setSuppressed false means start getting message
    FirebaseInAppMessaging.getInstance().setMessagesSuppressed(setSuppressed); //true==Stop inAppMessaging

    if (!eventName.equals("")){
        FirebaseAnalytics.getInstance(context).logEvent(eventName,null); //To Show InAppMessage in MainActivity. Need to add this event name in Web console campaign
        FirebaseInAppMessaging.getInstance().triggerEvent(eventName);
    }
}

如果您不想在 SplashActivity 中显示,则调用上面的方法如下:

inAppMessagingInitialization(context,true,""); //Stops inAppMessaging

要在 MainActivity 中显示 InAppMessage,请调用上面的方法,如下所示,并在 InAppMessaging 控制台中设置事件名称。

inAppMessagingInitialization(context,false,"main_activity_inappmessaging"); //Starts inAppMessaging