我正在为一个正在为android和iphone开发的应用程序的网络服务工作。
我被困在必须发送推送通知的点上。我根据用户登录的设备保存设备令牌(IOS)或gcm注册id (android)。
现在我的问题是如何在推送通知时区分两者,因为GCM和APNS的推送通知过程是不同的。不要告诉我关于用户代理的事情,因为它在我的情况下不会工作,因为这些通知将使用cron job发送。
我是否需要将设备类型保存在数据库中,或者是否有其他选择。..?
希望我的问题说清楚了。
谢谢
发布于 2013-06-26 17:33:48
我会做什么和我已经做了什么。
如果您将ID存储在数据库中,则应该很容易区分这两个ID。如果您将它们保存在同一个表中,但字段不同,则只需对列使用不同的名称即可。根据设备类型保存ID。只是没有推送通知ID的通用列,请使用两个。我根据类型保存设备ID和用户的成员ID。因此,即使他们在多个设备上注册,它也会将其发送到他们的所有设备、android或ios。或者我可以选择全部并发送给每个注册用户。
这里有一些例子。一个示例使用多个id列,另一个示例使用单个id列和另一列作为类型。
gcm_id和apn_id作为DB中的列名,一个用于android,一个用于iOS。
然后,当您准备好发送通知时,您可以根据您想要的任何条件执行select查询。
例如,要发送给一大群用户,您可以执行以下操作。简单的例子而不是完整的代码。
$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保存类型,就像上面的示例之一。希望这篇文章能对你有所帮助,让你开始对它们进行分类。
https://stackoverflow.com/questions/17314095
复制相似问题