Php 使用onesignal向特定用户发送通知

Php 使用onesignal向特定用户发送通知,php,laravel,notifications,onesignal,web-push,Php,Laravel,Notifications,Onesignal,Web Push,我第一次在我的项目中使用。我必须向特定用户发送通知(无论用户在chrome或android设备上登录到哪里),例如whatsapp也会在手机和网站上发送通知,并且只有用户登录时才会发送通知。我已成功向所有用户发送通知。在对OneSignal进行了一些研发之后,我知道我必须为此向特定的playerId发送通知。但以下是我的一些问题/疑问 我认为玩家Id是设备Id。如果我是对的,那么如果当前用户注销,而另一个用户登录到同一个设备,该怎么办。我怎样才能知道,当用户发生更改时,我不必发送关于此玩家Id

我第一次在我的项目中使用。我必须向特定用户发送通知(无论用户在chrome或android设备上登录到哪里),例如whatsapp也会在手机和网站上发送通知,并且只有用户登录时才会发送通知。我已成功向所有用户发送通知。在对OneSignal进行了一些研发之后,我知道我必须为此向特定的playerId发送通知。但以下是我的一些问题/疑问

  • 我认为玩家Id是设备Id。如果我是对的,那么如果当前用户注销,而另一个用户登录到同一个设备,该怎么办。我怎样才能知道,当用户发生更改时,我不必发送关于此玩家Id的通知
  • 单个用户是否有多个PlayerID?一个用于chrome,一个用于iOS设备,一个用于Android等
  • 如何将用户的playerId存储在数据库中。因为我必须使用发送通知

如果有人能解释这些要点,并描述在我的数据库中存储playerid(何时和如何)的工作流程,我将不胜感激。

不久前我开发了一款android应用程序,它使用OneSignal进行通知。这是用C#开发的,但是可能对您有用

我希望这些答案有帮助:

-播放器ID由OneSignal类生成,因此需要使用回调函数进行检索,如下面所示的代码:

void CheckPushRegistration(){
    OneSignal.GetIdsAvailable(IdsAvailable); //Passes the 'callback'

}

private void IdsAvailable(string userID, string pushToken) {
    player_id = userID;
    player_token = pushToken;

    //Make a request to my server to store this information along with device id
    //For easy reference
}
注意:在上面的代码中,我在应用程序运行开始时调用函数“CheckPushRegistration”。一旦运行,它会将信息发送到“IdsAvailable”函数。在此之后,我向服务器发出一个快速的web请求,以存储唯一的播放器ID、设备ID和令牌

-如果我没有弄错的话,至少在安卓系统中,玩家ID是基于与谷歌Play帐户相关的设备的。这意味着,如果用户切换帐户,它将作为不同的玩家ID进行计数/操作(不过,我可能错了)

我假设OneSignal有某种方法可以确定浏览器/其他设备上的播放器ID或用户ID。但是,可以安全地假设它们始终是唯一的,并且不会基于用户帐户执行

-如前所述,通过向RESTAPI发出简单的web请求将其存储到数据库中,只存储设备ID、播放器ID和令牌信息。也许可以添加一个检查,查看设备ID是否不在系统中。我建议使用设备ID来识别用户

您还询问如何知道通知是否正确发送,或者发送是否安全。不幸的是,OneSignal API只能报告通知状态

当您发送通知时,您将从服务器收到一个通知ID。您可以在以后的阶段使用它来检查通知是否已发送、是否已查看以及是否已点击


我希望这有助于了解OneSignal系统

只需使用登录活动将PlayerID存储到数据库中即可。当他们注销时,只需启动一个与从数据库中删除玩家Id相关的查询。

玩家Id不是设备Id, 它是OneSignal提供的UUID(唯一通用标识符)

在一台设备上管理多个用户 要管理共享设备的多个用户,您需要检测用户a何时在设备上,并且只在他们在设备上时向他们发送通知,否则用户B将获得通知

方法A:标记 处理这一问题的一种方法是在用户登录应用程序时对其进行标记,然后您可以通过标记将其作为目标,如果设置了标记,用户将收到通知。一旦他们退出应用程序,你就可以删除标签

因此,如果用户B正在使用该设备,那么他们将获得自己的标签,而不会获得用户A的通知。 因此,用户只有在登录应用程序时才会收到通知

方法B:CRM或数据库 另一个选项是将用户当前登录的设备的播放器ID存储在服务器上,然后使用我们的API使用“include\u Player\u IDs”API目标参数发送通知。
有关更多详细信息,请检查此项

如果其他用户登录到同一应用程序中,用户ID值将是多少?它会改变还是相同?据我所知,当玩家帐户改变时,用户ID会改变。这意味着,如果用户确实从同一设备登录到不同的帐户,它将被视为一个单独的用户ID。因此,我建议还跟踪设备ID,以便您可以向同一设备的所有玩家ID发送通知。(我就是这么做的)但是onesignal怎么知道这是同一设备上的另一个用户呢?我们不发送任何用户数据。对吗?它保持相同的playerid,因为它与设备相关,而不是用户或帐户。