使用onesignal

时间:2017-03-10 03:45:41

标签: php laravel notifications onesignal web-push

我在项目中第一次使用onesignal。我必须向特定用户发送通知(用户在Chrome或Android设备上登录的地方),例如whatsapp在移动设备和网站上发送通知,并且仅在用户登录时才发送通知。我已成功向所有用户发送通知用户。在OneSignal上进行了一些R& D之后,我知道为了这个目的,我必须向特定的playerId发送通知。但这里有一些我的疑问/怀疑。

  • 我认为玩家ID是设备ID。如果我是对的,如果当前用户注销并且另一个用户登录到同一设备上会怎样。我如何知道我不会在用户更改时发送此播放器ID的通知。
  • 单个用户会有多个playerIds吗?一个用于chrome,一个用于iOS设备,一个用于Android等?
  • 我将如何让用户的playerId存储在我的数据库中。因为我必须使用server rest API发送通知。

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

3 个答案:

答案 0 :(得分:3)

只需将playerIds存储到具有登录活动的数据库中。当他们注销时,只需触发与从数据库中删除playerIds相关的查询。

答案 1 :(得分:1)

我不久前开发了一款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,至少在Android中是基于链接Google Play帐户的设备,如果我没有记错的话。这意味着如果用户切换帐户,它将计入/作为不同的玩家ID(但我可能在这里错了)

我认为OneSignal可以通过某种方式确定浏览器/其他设备上的播放器ID或用户ID。但是,可以安全地假设它们将始终是唯一的,并且不会基于用户帐户进行操作。

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

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

当您发送通知时,您将从服务器收到通知ID。您可以在以后使用此选项来检查是否已发送通知,是否已查看通知以及是否已点击通知。

我希望这有助于揭示OneSignal系统?

答案 2 :(得分:0)

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

在一台设备上管理多个用户 要管理共享一个设备的多个用户,您将需要检测用户A在设备上的时间,并且仅在他们在设备上时向他们发送通知,否则用户B会得到它们。

方法A:标记 解决此问题的一种方法是在用户登录应用程序时对其进行标记,然后您可以通过标记来定位用户,如果设置了标记,他们将收到通知。他们退出应用后,您可以删除标签。

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

方法B:CRM或数据库 另一种选择是在您的服务器上存储用户当前登录设备的播放器ID,然后使用我们的API通过“ include_player_ids” API定位参数发送通知。 有关更多详细信息,请检查此One signal player id