由同一开发人员管理来自设备中许多应用程序的通知[关闭]

Posted

技术标签:

【中文标题】由同一开发人员管理来自设备中许多应用程序的通知[关闭]【英文标题】:Manage notifications from many apps in a device by the same developer [closed] 【发布时间】:2014-10-21 14:59:27 【问题描述】:

我正在使用 GCM(谷歌云消息传递)开发一些应用程序,我想向所有当前应用程序的用户发送有关我公司的一些信息(新应用程序、促销活动等)的通知。如果设备安装了很多应用程序,它会多次收到并通知相同的通知,因此用户可能会感到不舒服。我希望每个通知只在设备中通知一次,有没有解决这个问题的方法?

我看到有人误解了我的问题。我的问题是:一台设备安装了我公司的许多应用程序,所以如果我向每个单独的应用程序发送相同的通知(例如:通知我的公司发布了一个新应用程序),此设备将多次通知相同的内容.

我的解决方案:为所有应用程序使用共享内存(文件),每个通知都有一个唯一的 id,当通知到来时,每个应用程序都会检查这个文件(如果不存在,则创建一个新文件),如果这个文件内容不' t 包含此通知的唯一 ID,并且设备允许此应用显示通知,它将写入此 ID 并显示此通知的文件,否则(此 ID 存在或设备不允许此应用显示通知)此应用将忽略此通知。通过这个解决方案,我需要检查用户是否允许应用程序显示通知,我可以检查吗?

还有其他解决方案或建议可以改进我的解决方案吗?

【问题讨论】:

【参考方案1】:

(检查此答案的历史以查看以前的编辑)

服务器端,您现在必须知道您的用户安装了哪些应用程序。

    You need a serial number 或其他唯一标识您的用户的方式 You can inspect installed packages You can listen for install/uninstall events 或定期更新您的信息

然后,您选择哪个应用程序将触发通知(使用 @mina fawzy 建议的 SENDER_ID)。

编辑

总而言之,您的方法是客户端:

应用程序使用NOTIF_ID 触发通知。 NOTIF_IDSHARED_FILE 中吗? Y: 通知已显示 N: 允许通知吗? Y:将NOTIF_ID 写入SHARED_FILE 并显示通知 N:忽略此通知

您现在需要检查您的应用是否禁用了通知:

How to check notifications are disabled for the application? Check for access to notifications using NotificationListenerService

【讨论】:

谢谢,但我想你误解了我的问题,不是“一个用户使用很多设备”,而是“一个设备安装了同一个开发者的多个应用程序”,请看我编辑的问题 好的@Ikarus,我编辑了! 我想到了这些功能,挺复杂的,问题是当用户关闭选择显示通知的应用程序的通知时,我可以监听打开/关闭通知事件吗(像安装/卸载事件)将显示通知任务切换到另一个启用显示通知的应用程序?我还更新了上面的另一个解决方案,我认为这是一个更好的方法 澄清一下:is this the feature you are afraid of that enables users to disable notifications? 我从很久以前就在使用 cyanogenmod,并认为这是它的功能之一:P 很好,有了 android.service.notification 包,即使我可能不需要使用共享文件,因为它可以帮助我检查通知栏中的通知 ID(需要考虑竞争条件),不幸的是 android.service.notification仅适用于 Android 版本 >= 4.3。因为这不是一个重要的功能,所以我会推迟它【参考方案2】:

在 GCM 服务器中注册的每个应用程序都有唯一的 SENDER ID,这个号码放在手机和您将发送通知的服务器中,所以当您发送通知时,您发送到特定的移动应用程序而不是所有应用程序,所以它的服务器端问题不是安卓一

更新答案

您需要每个手机的唯一标识符,例如 Settings.Secure 中的 ANDROID_ID

private String android_id = Secure.getString(getContext().getContentResolver(),
                                                        Secure.ANDROID_ID); 

别忘了导入

import android.provider.Settings.Secure;

【讨论】:

【参考方案3】:

在客户端,您可以导出您的 GCM 接收器,让您公司的所有应用程序都可以使用。 所有应用程序使用相同的 GCM 接收器,然后他们可以判断 是否需要提示通知。

然后在服务器端, 您应该通过用户 id 收集用户手机中安装的应用程序(因为 GCM 注册 id 可能不一样); 当您想向用户发送通知时, 您应该检查每个用户 ID,而不是检查注册 ID。

那么你可以解决这个问题。

【讨论】:

以上是关于由同一开发人员管理来自设备中许多应用程序的通知[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Xcode:推送通知以在设备工作上构建,而不是在同一设备上安装 TestFlight/App Store

iOS 推送通知仅由开发设备接收

苹果向开发人员推出开源项目:让密码管理App创建强密码

如何通知多线程应用程序中的特定线程

用于开发和生产的 iOS 推送通知设备令牌

使用 php 向 ios 设备发送带有 fcm 令牌的远程通知