根据移动操作系统发送推送通知

时间:2013-06-26 07:32:32

标签: php web-services push-notification

我正在开发一个正在为Android和iphone开发的应用程序的webservices。

我遇到了必须发送推送通知的问题。我根据用户登录的设备保存设备令牌(IOS)或gcm注册ID(android)。

现在我的问题是如何在推送通知时区分两者,因为GCM和APNS的推送通知程序不同。 不要告诉我有关用户代理的事情,因为它在我的情况下不起作用,因为这些通知将使用cron作业发送。

我是否需要在数据库中保存设备类型,还是有其他替代方法。 ..?

希望我对我的问题很清楚。

由于

1 个答案:

答案 0 :(得分:0)

我会做什么以及我做了什么。

如果要将ID存储在数据库中,则应该很容易区分这两者。如果您将它们保存在同一个表中但不同的字段中,则只需为列使用不同的名称。 根据设备类型保存ID。只是没有推送通知ID的通用列使用两个。我根据类型和用户的成员ID保存设备ID。所以即使他们注册了多个设备,它也会将它发送到他们所有的设备android或ios。或者我可以选择所有并发送给每个注册用户。

以下是一些例子。一个示例使用多个id列,一个使用单个id列,另一个列使用type。

gcm_idapn_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保存类型,例如上面的示例之一。希望这有助于一些,并为您提供排序的开始。