我正在开发一个正在为Android和iphone开发的应用程序的webservices。
我遇到了必须发送推送通知的问题。我根据用户登录的设备保存设备令牌(IOS)或gcm注册ID(android)。
现在我的问题是如何在推送通知时区分两者,因为GCM和APNS的推送通知程序不同。 不要告诉我有关用户代理的事情,因为它在我的情况下不起作用,因为这些通知将使用cron作业发送。
我是否需要在数据库中保存设备类型,还是有其他替代方法。 ..?
希望我对我的问题很清楚。
由于
答案 0 :(得分:0)
我会做什么以及我做了什么。
如果要将ID存储在数据库中,则应该很容易区分这两者。如果您将它们保存在同一个表中但不同的字段中,则只需为列使用不同的名称。 根据设备类型保存ID。只是没有推送通知ID的通用列使用两个。我根据类型和用户的成员ID保存设备ID。所以即使他们注册了多个设备,它也会将它发送到他们所有的设备android或ios。或者我可以选择所有并发送给每个注册用户。
以下是一些例子。一个示例使用多个id列,一个使用单个id列,另一个列使用type。
gcm_id
和apn_id
作为DB中的列名,其中密钥存储一个用于android,一个用于iOS。
然后,当您准备好发送通知时,您可以根据您想要的任何条件执行选择查询。
e.g。要发送给大量用户,您可以执行以下操作。简单示例不是完整代码。
$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保存类型,例如上面的示例之一。希望这有助于一些,并为您提供排序的开始。