我第一次使用onesignal。我已经在R& D上花了太多时间。但产量几乎为零。所以我在这里遵循我的要求。
我已经成功开发了信号演示。但它与用户无关。如果我触发通知,则所有设备都会收到通知。所以这是我的问题。
如果有人能告诉我基本的例子,我们将不胜感激。我来自PHP方面。如果我从PHP开发人员的观点得到答案,对我来说会很好。我已经在stackoverflow上询问了this question。但答案来自Android视图。但我认为他不知道在服务器端,我们必须管理所有设备。所以我从这个答案中得不到更多。
答案 0 :(得分:5)
Onesignal是向不同类型的设备发送推送通知的好平台。我在我的项目中使用相同的东西。我正在做的是,每当用户登录时,我将从客户端获取设备令牌,并使用他们的API在信号中创建用户。 (我相信你知道如何使用谷歌项目编号和Android的谷歌API密钥,ios的p12文件等配置信号...)
Android Perspective :
因此,对于相同的Google API密钥,即使您再次删除并创建用户,onesignal也会始终返回相同的玩家ID。 在一个大项目中,开发人员应该期望用户可能登录到不同的设备(android,ios等)。因此,用户可以拥有多个令牌,玩家ID也是如此。还有一个要求是,如果用户没有登录,则用户不希望收到通知。
因此,请记住您的所有要求,我可以建议您使用一个MySQL表结构来存储用户详细信息。
一个用于存储设备类型的表(可选)
-id
-device_type
用于存储令牌和玩家ID
-token_id
-user_id
-device_id
-device_token
-onesignal_player_id
-subscription
这两个表是需要信号才能工作的。
案例1 :
每当用户尝试登录时,首先检查令牌表。查找是否有任何其他用户具有相同的给定令牌(这意味着另一个用户使用同一设备登录)。删除此标记(如果有)。然后在onesignal中创建一个新的播放器并将详细信息保存到令牌表中。将订阅标记为1,即订阅通知。每当用户注销时,将订阅标记为0,该订阅已取消订阅以进行通知。
案例2 :
每当用户登录时,检查令牌是否已存在于表中。如果是,并且令牌的所有者是相同的,那么只需将订阅标记为1.这样他就会收到进一步的通知。
案例3 :
当用户使用其他设备登录(一次多个设备)时,gcm令牌肯定会有所不同。因此,将其另存为同一用户的另一个令牌,并将订阅标记为1.因此,两个设备都将收到通知。
最后,在发送通知之前,获取订阅的特定用户的所有令牌,并一次性向所有用户发送通知。这将解决您的问题。
我知道这可能有点令人困惑。但不要担心,我们可以解决它。
答案 1 :(得分:0)
$ to-设备ID
$ title-通知标题
$ message-通知消息
$ img-完整图片链接
用法:
具有演示值:
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)
答案 3 :(得分:-1)
This tutorial将帮助您通过PHP发送通知。