推送通知在带有 release-apk 的 Android 7.0 (FCM) 上不起作用

Posted

技术标签:

【中文标题】推送通知在带有 release-apk 的 Android 7.0 (FCM) 上不起作用【英文标题】:Push notification not working on Android 7.0 (FCM) with release-apk 【发布时间】:2018-05-31 09:21:39 【问题描述】:

我的 android 应用程序在商店上线,它的推送通知在 > 7.0 android 操作系统上突然停止工作。

依赖:

'com.google.firebase:firebase-core:10.2.0'    
'com.google.firebase:firebase-messaging:10.2.0'

通知生成器代码:

通知管理器:

   public void createNotificationManager()
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 

            notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            String id = "projectname";
            // The user-visible name of the channel.
            CharSequence name = "projectname";
            // The user-visible description of the channel.
            int importance = NotificationManager.IMPORTANCE_MAX;
            NotificationChannel mChannel = new NotificationChannel(id, name, importance);
            // Configure the notification channel.
            mChannel.enableLights(true);
            mChannel.setLightColor(Color.RED);
            notificationManager.createNotificationChannel(mChannel);

        else
            notificationManager =
                    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        
    

通知生成器:

                NotificationCompat.Builder notificationBuilder = new
                        NotificationCompat.Builder(this);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
                    notificationBuilder.setSmallIcon(R.drawable.ic_launcher_transparent);
                 else 
                    notificationBuilder.setSmallIcon(R.mipmap.ic_launcher);
                
                notificationBuilder
                        .setContentTitle("Projectname")
                        .setStyle(new NotificationCompat.BigTextStyle()
                                .bigText(intent.getStringExtra("gcm.notification.body")))
                        .setContentText(intent.getStringExtra("gcm.notification.body"))
                        .setAutoCancel(true).setDefaults(Notification.DEFAULT_SOUND).setSound(soundUri)
                        .setContentIntent(pendingIntent).setVisibility(NotificationCompat.VISIBILITY_PUBLIC);

createNotificationManager();
notificationManager.notify(id, notificationBuilder.build());

在调试 apk 中我检查过它正在工作,但在生产 (release_apk) 中它没有显示通知。

请帮忙。

【问题讨论】:

是通知Chanel的问题。您必须创建通知 Chanel 才能检索通知 Jay Thummar ,我已经为 Oreo (8.0) 版本创建了通知 Chanel。但是对于 7.0,它不需要正确。同样在调试版本中它工作正常。仍然可能是问题吗? 分享您编写的通知构建器代码和服务。 @war_Hero 我分享了我的代码,请检查。我认为其他一些问题可能是我的 FCM 依赖版本? @ParvindraSingh 也许,检查我的答案,如果你也想给我们大文件,我可以进行更多测试。 【参考方案1】:

确保您已将发布证书的 SHA1 添加到 Firebase 项目的“项目设置/常规”页面中。

对于每个应用,您可以添加多个 SHA1,并且您应该同时包含您的调试和发布证书。

【讨论】:

您好 CodeChimp,感谢您的回答,它适用于 我已经在 firebase 项目中添加了 SHA1。我刚刚检查过。 它不允许我添加我的 SHA 密钥,它显示“您的操作被禁止。”【参考方案2】:

从代码中可以明显看出,您创建的NotificationChannel 没有传递NotificationCompat.Builder,因此您遇到了这个问题,您可以从文档@987654321 中了解它@。 Here 是 google 给出的通知示例。如果您想了解更多相关信息,请参阅docs。

【讨论】:

嗨,war_hero,我还有一个问题,如果应用程序处于终止状态,那么在 android 8.0 (Oreo) 中没有收到通知 哦,1) 在 onMessageReceived 中,您是否设置了任何条件来检查登录状态。 2)您是否会删除设备令牌 是的,如果我杀死了应用程序,它在 github.com/firebase/quickstart-android/issues/378 如何分享服务代码,您需要完整代码吗?或者你需要哪一部分?我仍然没有找到 8.0 android kill state 通知的解决方案。 非常感谢@war_hero,它真的帮了我很多! :-)【参考方案3】:

尝试替换:

'com.google.firebase:firebase-core:10.2.0'    
'com.google.firebase:firebase-messaging:10.2.0'

最新更新(基于this url):

implementation 'com.google.firebase:firebase-core:16.0.0'
implementation 'com.google.firebase:firebase-messaging:17.0.0'

并确保您也在使用最新版本的 google play 服务:

classpath 'com.google.gms:google-services:4.0.1'

【讨论】:

如果我要更新我的依赖项,那么我也需要更新我的通知生成器代码,对吗?它不会影响任何较低版本的支持吗?如果可能,请提出建议。 @ParvindraSingh 在更新依赖项后尝试推送通知并检查它是否有效可能不需要更新您的代码,并告诉我们发生了什么 没有@paraskevas 还在苦苦挣扎,我已经使用了 War_hero 解决方案并发送了频道,但是在创建发布构建通知后不起作用。我会尝试其他解决方案。

以上是关于推送通知在带有 release-apk 的 Android 7.0 (FCM) 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

带有推送通知的应用提交到应用商店

带有 RSS 的 truepush.com 推送通知图标

带有 FCM 的 Ionic 2 推送通知

带有 GCM 的 iOS 推送通知

带有 Web API 延迟的 Android 推送通知和 SignalR 通知

发送带有证书的 Windows Phone 推送通知?