使用PHP

时间:2017-03-10 09:49:34

标签: php laravel notifications onesignal web-push

我第一次使用onesignal。我已经在R& D上花了太多时间。但产量几乎为零。所以我在这里遵循我的要求。

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

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

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

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

4 个答案:

答案 0 :(得分:5)

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

Android Perspective

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

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

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

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

      -id
      -device_type
    
  2. 用于存储令牌和玩家ID

      -token_id
      -user_id
      -device_id
      -device_token
      -onesignal_player_id
      -subscription
    
  3. 这两个表是需要信号才能工作的。

    案例1

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

    案例2

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

    案例3

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

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

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

    enter image description here

答案 1 :(得分:0)

$ to-设备ID

$ title-通知标题

$ message-通知消息

$ img-完整图片链接

用法:

sendnotification($ to,$ title,$ message,$ img);

具有演示值:

sendnotification(“设备ID”,“测试通知”,“测试消息”,“ https://www.google.co.in/images/branding/googleg/1x/googleg_standard_color_128dp.png”);

function sendnotification($to, $title, $message, $img)
{
    $msg = $message;
    $content = array(
        "en" => $msg
    );
    $headings = array(
        "en" => $title
    );
    if ($img == '') {
        $fields = array(
            'app_id' => 'YOUR_APP_ID',
            "headings" => $headings,
            'include_player_ids' => array($to),
            'large_icon' => "https://www.google.co.in/images/branding/googleg/1x/googleg_standard_color_128dp.png",
            'content_available' => true,
            'contents' => $content
        );
    } else {
        $ios_img = array(
            "id1" => $img
        );
        $fields = array(
            'app_id' => 'YOUR_APP_ID',
            "headings" => $headings,
            'include_player_ids' => array($to),
            'contents' => $content,
            "big_picture" => $img,
            'large_icon' => "https://www.google.co.in/images/branding/googleg/1x/googleg_standard_color_128dp.png",
            'content_available' => true,
            "ios_attachments" => $ios_img
        );

    }
    $headers = array(
        'Authorization: key=**APP_KEY**',
        'Content-Type: application/json; charset=utf-8'
    );
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://onesignal.com/api/v1/notifications');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

答案 2 :(得分:-1)

  • 对于单个用户的商店多设备,您必须识别它们 某种方式。您可以打开Web挂钩,当新用户订阅时,您 可以发送他的身份信息(身份证,电子邮件等)。有了这些数据 你将获得他的新设备ID。然后你必须以你的方式存储它 喜欢。
  • 要跟踪是否是用户登录,您可以使用识别 信息:登录和注销时向API发送请求。 请注意,用户可以登录到一台设备并注销 其他
  • 这就是为什么我也会发送设备ID并将记录状态存储在一起,但你可以按自己喜欢的方式进行。

答案 3 :(得分:-1)

This tutorial将帮助您通过PHP发送通知。