我正在为正在为 android 和 iphone 开发的应用程序开发 web 服务。
我被困在必须发送推送通知的地方。我正在根据用户登录的设备保存设备令牌(IOS)或 gcm 注册 ID(android)。
现在我的问题是如何在推送通知时区分两者,因为 GCM 和 APNS 的推送通知程序不同。不要告诉我有关用户代理的信息,因为它在我的情况下不起作用,因为这些通知将使用 cron 作业发送。
我需要将设备类型保存在数据库中还是有其他选择。..?
希望我对我的问题很清楚。
谢谢
我正在为正在为 android 和 iphone 开发的应用程序开发 web 服务。
我被困在必须发送推送通知的地方。我正在根据用户登录的设备保存设备令牌(IOS)或 gcm 注册 ID(android)。
现在我的问题是如何在推送通知时区分两者,因为 GCM 和 APNS 的推送通知程序不同。不要告诉我有关用户代理的信息,因为它在我的情况下不起作用,因为这些通知将使用 cron 作业发送。
我需要将设备类型保存在数据库中还是有其他选择。..?
希望我对我的问题很清楚。
谢谢
我会做什么,我做了什么。
如果您将 ID 存储在数据库中,则应该很容易区分这两者。如果您将它们保存在同一个表中但不同的字段中,那么只需为列使用不同的名称。根据设备类型保存 ID。只是没有用于推送通知 ID 的通用列使用两个。我根据类型和用户的成员ID保存设备ID。因此,即使他们在多个设备上注册,它也会将其发送到他们的所有设备 android 或 ios。或者我可以选择全部并发送给每个注册用户。
这里有些例子。一个示例使用多个 id 列,另一个示例使用单个 id 列和另一列作为类型。
gcm_id
并apn_id
作为存储密钥的数据库中的列名,一个用于 android,一个用于 iOS。
然后,当您准备好发送通知时,您可以根据您想要的任何条件进行选择查询。
例如,要发送给一大群用户,您可以执行以下操作。简单的例子不是完整的代码。
$result = "SELECT * FROM notification_table"
然后使用一些 PHP 遍历数组并发送通知。
foreach($result as $key=>$id){
if($key == "gcm_id"){
//do android push here using the $id or run a function passing $id to it
}elseif($key == "apn_id"){
//do apple push here using the $id or run a function passing $id to it
}
}
或者另一种选择是保存设备类型并使用一个 ID 字段。所以你的桌子可能有类似的东西
push_id | dev_type | member_id
将其保存到数据库时,请务必指定设备类型。这可能是你想要的。dev_type
可以是可变的文本/字符,甚至可以是整数字段,您可以为每种类型指定一个数字 ID。但是,您想跟上它。我可能会使用不同的字符并将其android / ios
用作值,以便我比代码更容易记住。
然后做同样的事情,除了按设备类型过滤。
$result = "SELECT * FROM notification_table"
然后使用一些 PHP 遍历数组并发送通知。
foreach($result as $res){
if($res["dev_type"] == "android"){
//do android push here using the $res["push_id"] or pass it to a function
}elseif($res["dev_type"] == "ios"){
//do apple push here using the $res["push_id"] or pass it to a function
}
}
或将其限制为特定用户以说出新的私人消息。示例不是完整的代码
$result = "SELECT * FROM notification_table WHERE mem_id='12345'";
然后调用一个函数或者你想处理它。
我个人会创建两个函数,一个用于 GCM,一个用于 APN。然后根据类型在通过 foreach 循环时调用函数。传递 ID 和要发送的消息的示例函数。
function push_gcm($id,$message){
//do stuff
}
function push_apn($id,$message){
//do stuff
}
我个人不会依赖 ID 长度之类的东西来确定类型。使用上面的示例之一保存带有 ID 的类型。希望这对一些人有所帮助,并让您开始对它们进行分类。