2013-06-26 72 views
0

我正在开发针对android和iphone开发的应用程序的webservices。根据移动操作系统发送推送通知

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

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

是否需要将设备类型保存在数据库中或者是否存在其他替代方法。 ..?

希望我很清楚我的问题。

谢谢

回答

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 

当把它保存到数据库时,一定要指定设备类型。这可能是你想要的。​​可能是一个文本/字符变化,甚至是一个整数字段,您可以为每种类型指定一个数字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的类型。希望这对一些人有帮助,并给你一个排序的开始。