FCM在通知栏中显示灰色图标,并提供空的getData()和getExtras()。

3

我正在集成FCM以管理iOS和Android移动应用程序的通知。对于iOS,一切都运行良好:后台/前台服务器/控制台消息。

对于Android,我无法使其流畅运行。

使用控制台或发送服务器通知

1- 当我发送一条通知并且应用程序在后台时,通知中心总是显示一个灰色方块,而不是在清单文件或负载中定义的图标。在展开通知中心之前,状态栏中的图标是正确的。

我尝试指定全局圆形@drawable/resource_name或仅使用resource_name,但结果相同。

2- 当应用程序在前台时,一切正常,但当应用程序在后台时,onMessageReceived()永远不会被触发,操作系统会自动在通知中心中显示一条透明的通知,对于应用程序来说是透明的,如果/当用户点击通知中心中的通知时,默认会启动Activity,但getIntent().getData()和getIntent().getExtra()都为null,如果应用程序在前台,则传递参数成功。

Manifest.xml

     <activity
        android:name=".ui.activities.MainActivity"
        android:theme="@style/AppTheme.ActionBar.Transparent">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:host="appName"
                android:scheme="appName" />
            <data
                android:host="subdomain.domain.com"
                android:scheme="https" />
        </intent-filter>
    </activity> 

...

<meta-data
            android:name="com.google.firebase.messaging.default_notification_icon"
            android:resource="@drawable/ic_launcher" />
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_color"
            android:resource="@android:color/black" />

        <!-- Used for FireBase Messaging and Analytics -->
        <service
            android:name=".services.MessagingService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>

        <service
            android:name=".services.TokenService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
            </intent-filter>
        </service>

有什么建议吗?

我将项目升级到了10.2.1版本,gradle如下: compile 'com.google.android.gms:play-services:10.2.1' compile 'com.google.android.gms:play-services-analytics:10.2.1' compile 'com.google.android.gms:play-services-maps:10.2.1' compile 'com.google.firebase:firebase-core:10.2.1' compile 'com.google.firebase:firebase-messaging:10.2.1' 但问题仍然存在。似乎为了触发onReceivedMessage,您必须在data中包含所有参数,而不是通知负载中。 - Iván Peralta
1个回答

1

问题 1

图片资源本身存在问题,按照 OneSignal 文档创建了一个新的可用资源。

以下在线 工具 特别有用。

问题 2

FCM 的 Web 控制台始终包含通知负载。假设当您单击本地通知时,如果还包括数据负载,则会将数据负载作为 Extra(Bundle)包含在新意图中。但实际上并没有发生这种情况。

使用 API 并仅包含数据负载即可正常工作,您必须像预期的那样手动处理位置通知。

最后,由于 FCM Web 控制台的限制,我决定采用另一种方法(OneSignal)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接