问题描述
我通过 Firebase Cloud 消息发送通知,然后显示通知,理论上应该打开一个新活动并通过深层链接导航到应用程序的特定部分。但是现在每当我点击通知时什么都没有发生。老实说,我知道我可能用深层链接搞砸了一些东西,但文档相当混乱,并没有解决我的问题。我的担忧在于方案和我在应用清单中实现深层链接的方式。
该应用程序是一个单一的 Activity,具有多种功能(功能由具有 MVP 架构的片段/视图模型表示)。我添加了一个新活动,因为我不知道如何启动我的 MainActivity。
public class NotificationService extends FirebaseMessagingService {
private void showNotification(String comment,String user,String postID){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData( Uri.parse(DeepLinks.POST_DETAIL_DEEPLINK + "/" + postID)); // deeplink is critiq://postdetail
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this,intent,PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this,"comments")
.setSmallIcon(R.drawable.ic_launcher_background)
.setContentTitle("New comment from " + user)
.setContentText(comment)
.setContentIntent(pendingIntent)
.setPriority(NotificationCompat.PRIORITY_HIGH);
notificationmanagerCompat managerCompat = notificationmanagerCompat.from(this);
managerCompat.notify(123,builder.build());
}
这是清单
package="com.nikolam.critiq">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<application
android:name=".CritiqApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Critiq"
android:usesCleartextTraffic="true">
<activity
android:name=".DeepLinkActivity"
android:label="@string/title_activity_deep_link">
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.VIEW" />-->
<!-- <category android:name="android.intent.category.DEFAULT" />-->
<!-- <category android:name="android.intent.category.broWSABLE" />-->
<!-- <!– Accepts URIs that begin with "http://www.example.com/gizmos” –>-->
<!-- <data-->
<!-- android:host="www.nikolam.com"-->
<!-- android:pathPrefix="/critiq"-->
<!-- android:scheme="http" />-->
<!-- <!– note that the leading "/" is required for pathPrefix–>-->
<!-- </intent-filter>-->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.broWSABLE" />
<!-- Accepts URIs that begin with "example://gizmos” critiq://mainScreen -->
<data
android:host="critiq"
android:scheme="postdetail" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.nikolam.critiq.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<Meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<service
android:name=".notifications.NotificationService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>
</manifest>
现在我有两个活动,我的 MainActivity(启动器活动)和我的 DeeplinkActivity(如果可能,我只想以某种方式保留 1 个活动)。我试图实现这一点,当有人点击通知时,我的活动将启动,并使用导航管理器导航到正确的片段。
这是我要导航到的地方
<fragment
android:id="@+id/postDetailFragment"
android:name="com.nikolam.feature_post_detail.presenter.PostDetailFragment"
android:label="PostDetailFragment">
<argument
android:name="id"
app:argType="string" />
<deepLink
android:id="@+id/deepLink4"
app:uri="critiq://postdetail/{id}" />
</fragment>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)