我尝试设置 FCM 通知以使用深层链接。如果应用程序位于前台,那么我们可以通过使用来处理通知FirebaseMessaginService,然后一切正常。当应用程序被终止并且 Firebase 的后台服务显示通知时,问题就出现了。我就是找不到一种方法让深层链接开箱即用。当前的解决方案是将深层链接放在 extras 中,并在应用程序启动时检查意图。但最好跳过这个并让通知传播正确的深层链接。
这是活动清单。深层链接的上升时间为<nav-graph .... />
<activity
android:name="com.*****.******.view.main.MainActivity"
android:exported="true"
android:launchMode="singleTask"
android:screenOrientation="portrait">
<nav-graph android:value="@navigation/services_graph" />
<nav-graph android:value="@navigation/infobox_graph" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
当然还有服务的设置
<service
android:name=".usecase.notifications.OscaPushService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
这对于 FCM 设置来说应该足够了,对吧?(当然按键也设置好了)
现在我尝试使用此有效负载发送深层链接:
"androidNotification":{
"click_action": "example://infobox/"
},
Run Code Online (Sandbox Code Playgroud)
然后点击通知什么也不会发生。ActivityTaskManager将打印以下消息,仅此而已:
I/ActivityTaskManager: START u0 {act=example://infobox/ flg=0x14000000 pkg=com.*****.*****.** (has extras)} from uid 10374 (replaced pkg with stars)
Run Code Online (Sandbox Code Playgroud)
这与使用 adb shell 命令启动深度链接不同。
adb shell am start -d …Run Code Online (Sandbox Code Playgroud) 我正在使用FrameLayout来显示包含ViewPager的片段。有时我需要换另一个片段。一切正常,直到我想回到包含ViewPager的Fragment为止。
这是我正在使用的代码:
包含ViewPager的片段:
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view : View = inflater!!.inflate(R.layout.main_quotes, null)
val vpQuotes = view.findViewById<CustomViewPager>(R.id.vpQuotes)
val vpAdapter = ViewPagerAdapter(activity.supportFragmentManager)
vpQuotes.adapter = vpAdapter
val vpPageChangeListener : ViewPager.OnPageChangeListener = object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
}
override fun onPageSelected(position: Int) {
(activity as ChangeLikeButton).changeLikeButton(vpAdapter.getQuoteItem(Shared.currentViewPager.currentItem))
}
}
vpQuotes.swipeDirection = CustomViewPager.SwipeDirection.RIGHT
vpQuotes.addOnPageChangeListener(vpPageChangeListener)
vpQuotes.setPageTransformer(true, ViewPagerTransformer())
vpQuotes.post { vpPageChangeListener.onPageSelected(0) }
return view
}
Run Code Online (Sandbox Code Playgroud)
ViewPagerAdapter: …