使用PHP的OneSignal推送通知

Aks*_*iya -1 php notifications laravel web-push onesignal

我第一次使用信号.我已经花了太多时间研发.但产量几乎为零.所以我在这里遵循我的要求.

  • 我有一个网站.该网站的iOS应用程序和Android应用程序也是如此.就像whatsapp或facebook一样.
  • 当用户登录上述任何一项时,用户应根据登录的设备获取webpush通知或iOS通知.
  • 如果用户一次登录网站以及iOS应用程序,则用户应该同时收到通知.
  • 如果用户从iOS注销,则用户不应在iOS设备中收到通知,直到他再次登录为止.
  • 如果其他用户登录到同一iOS应用程序,则不应收到上次登录用户的通知.他应该只收到与他有关的通知.
  • 网站也一样.

我已成功开发了信号演示.但它与用户无关.如果我触发通知,则所有设备都会收到通知.所以这是我的问题.

  • 我参与过GCM(我来自PHP背景).据我所知,推送通知适用于设备ID.那么我应该在我的mysql数据库中为单个用户存储多个设备ID(对于chrome,iOS,android等)?
  • 我如何获得该设备ID?请记住,如果用户未登录,我不想发送通知.
  • 如何将它存储在我的数据库中?我将通过调用API将该设备ID传递给我的服务器,我的服务器将它存储在数据库中.但是什么时候发送?因为如果用户没有登录,那么我如何才能知道哪个用户需要保存设备ID?
  • 如何检查用户是在设备上更改还是相同或已注销?

如果有人能告诉我基本的例子,我们将不胜感激.我来自PHP方面.如果我从PHP开发人员的视图中得到答案,那将对我有好处.我已经在stackoverflow上问了这个问题.但答案来自Android视图.但我认为他不知道在服务器端,我们必须管理所有设备.所以我从那个答案中得不到更多.

JTh*_*Dev 5

Onesignal是向不同类型的设备发送推送通知的好平台.我在我的项目中使用相同的东西.我正在做的是,每当用户登录时,我将从客户端获取设备令牌,并使用他们的API在信号中创建用户.(我相信你知道如何使用谷歌项目编号和Android的谷歌API密钥,ios的p12文件等配置信号...)

Android透视:

  • 我们必须记住一件事,只要谷歌项目编号和谷歌API密钥没有改变,设备的gcm令牌将始终保持不变.
  • 如果同一项目有不同的应用程序,如b2b,b2c等...(使用相同的数据库和后端),您的谷歌API密钥将更改,因此是gcm令牌,所以是信号播放器ID.

因此,对于相同的Google API密钥,即使您再次删除并创建用户,onesignal也将始终返回相同的玩家ID.在一个大项目中,开发人员应该期望用户可能登录到不同的设备(android,ios等).因此,用户可以拥有多个令牌,玩家ID也是如此.还有一个要求是,如果用户没有登录,则用户不希望收到通知.

因此,记住您的所有需求,我可以建议您使用一个MySQL表结构来存储用户详细信息.

  1. 一个用于存储设备类型的表(可选)

      -id
      -device_type
    
    Run Code Online (Sandbox Code Playgroud)
  2. 一个用于存储令牌和玩家ID

      -token_id
      -user_id
      -device_id
      -device_token
      -onesignal_player_id
      -subscription
    
    Run Code Online (Sandbox Code Playgroud)

这些信号需要这两个表才能工作.

案例1:

每当用户尝试登录时,首先检查令牌表.查找是否有任何其他用户具有相同的给定令牌(这意味着另一个用户使用同一设备登录).删除此标记(如果有).然后在onesignal中创建一个新的播放器并将详细信息保存到令牌表中.将订阅标记为1,即订阅通知.每当用户注销时,将订阅标记为0,即取消订阅通知.

案例2:

每当用户登录时,检查令牌是否已存在于表中.如果是,并且令牌的所有者是相同的,那么只需将订阅标记为1.这样他就会收到进一步的通知.

案例3:

当用户使用其他设备登录(一次多个设备)时,gcm令牌肯定会有所不同.因此,将其另存为同一用户的另一个令牌并将订阅标记为1.因此,两个设备都将收到通知.

最后,在发送通知之前,获取订阅的特定用户的所有令牌,并一次性向所有用户发送通知.这将解决您的问题.

我知道这可能有点令人困惑.但不要担心,我们可以解决它.

在此输入图像描述