Android 中的 NotificationCompat Content Intent,它利用 DeepLinks 打开我的应用程序的特定功能

问题描述

我通过 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" />-->
<!--                &lt;!&ndash; Accepts URIs that begin with "http://www.example.com/gizmos” &ndash;&gt;-->
<!--                <data-->
<!--                    android:host="www.nikolam.com"-->
<!--                    android:pathPrefix="/critiq"-->
<!--                    android:scheme="http" />-->
<!--                &lt;!&ndash; note that the leading "/" is required for pathPrefix&ndash;&gt;-->
<!--            </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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...