Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 由同一开发人员管理设备中多个应用程序的通知_Android_Notifications_Push Notification_Google Cloud Messaging - Fatal编程技术网

Android 由同一开发人员管理设备中多个应用程序的通知

Android 由同一开发人员管理设备中多个应用程序的通知,android,notifications,push-notification,google-cloud-messaging,Android,Notifications,Push Notification,Google Cloud Messaging,我正在使用GCM(google cloud messaging)开发一些应用程序,我想向所有当前应用程序的用户发送有关我公司某些信息(新应用程序、促销等)的通知。如果一台设备安装了许多应用程序,它会多次接收并通知相同的通知,因此用户可能会感到不舒服。我希望每个通知在一个设备中只通知一次,是否有解决此问题的方法 我看到有人误解了我的问题。我的问题是:一台设备安装了我公司的多个应用程序,因此如果我向每个单独的应用程序发送相同的通知(例如:通知我公司发布了一个新应用程序),该设备将使用相同的内容多次通

我正在使用GCM(google cloud messaging)开发一些应用程序,我想向所有当前应用程序的用户发送有关我公司某些信息(新应用程序、促销等)的通知。如果一台设备安装了许多应用程序,它会多次接收并通知相同的通知,因此用户可能会感到不舒服。我希望每个通知在一个设备中只通知一次,是否有解决此问题的方法

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

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

是否有其他解决方案或建议来改进我的解决方案?

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

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

  • 或者另一种唯一标识用户的方法
  • 或者定期更新您的信息
  • 然后,您选择哪个应用程序将触发通知(使用@mina fawzy建议的发件人ID)

    编辑

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

    • 应用程序使用
      NOTIF\u ID
      触发通知。
      NOTIF\u ID
      是否在
      共享文件中?
      
      • Y
        :已显示通知
      • N
        :是否允许通知?
        • Y
          :将
          NOTIF\u ID
          写入
          共享\u文件
          并显示通知
        • N
          :忽略此通知
    您现在需要检查您的应用程序是否禁用了通知:


    GCM服务器中的每个应用程序注册都有唯一的发送者ID,该号码放在手机和将发送通知的服务器中,因此当您发送通知时,您发送给特定的移动应用程序,而不是所有应用程序,因此其服务器端问题不是android问题

    最新答案

    您需要每个手机的唯一标识符,如中的ANDROID\u ID

    别忘了导入它

    import android.provider.Settings.Secure;
    

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

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


    然后你就可以解决这个问题了

    谢谢,但我想你误解了我的问题,不是“一个用户使用多台设备”,而是“一台设备安装了同一个开发者的多个应用”,请看我编辑的问题OK@Ikarus,我编辑过!我考虑过这些功能,这相当复杂,问题是当用户关闭选择显示通知的应用程序的通知时,我是否可以侦听打开/关闭通知事件(如安装/卸载事件),以将显示通知任务切换到另一个启用显示通知的应用程序?我还更新了上面的另一个解决方案,我认为这是一个更好的方法来澄清:我从很久以前就开始使用SyoGeNod了,并且认为这是它的一个特点:PNice,用安卓ID.Service通知包,即使我不需要使用共享文件,因为它可以帮助我检查通知栏中的通知ID(需要考虑竞争条件),不幸的是,它只出现在Android版本>=4.3上。因为这不是一个重要的功能,我会推迟它
    import android.provider.Settings.Secure;