0

我正在为正在为 android 和 iphone 开发的应用程序开发 web 服务。

我被困在必须发送推送通知的地方。我正在根据用户登录的设备保存设备令牌(IOS)或 gcm 注册 ID(android)。

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

我需要将设备类型保存在数据库中还是有其他选择。..?

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

谢谢

4

1 回答 1

0

我会做什么,我做了什么。

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

这里有些例子。一个示例使用多个 id 列,另一个示例使用单个 id 列和另一列作为类型​​。

gcm_idapn_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 的类型。希望这对一些人有所帮助,并让您开始对它们进行分类。

于 2013-06-26T09:33:48.050 回答