2012-07-07 33 views
3

我使用蘋果通知服務,所以在這個功能我是否需要登記時,我想發送的通知下載我的應用程序或其他字每個設備令牌,到我有什麼地址發送它。是否必須註冊下載我的應用的每個設備令牌?

-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{ 

NSString *str = [NSString stringWithFormat:@"Error: %@",[error localizedDescription]]; 
NSLog(@"%@",str);} 

回答

3

如果你不希望使用的服務,如城市飛艇。您可以創建一個數據庫(MySQL的可能),然後使用一個語言如PHP創建一個文件,將允許您發佈的設備令牌,然後將其寫入數據庫。

在PHP中,這看起來像

<?php 
$connection = mysql_connect("localhost","username","password"); 
if (!$connection){ 
    die('Error: ' . mysql_error()); 
} 

mysql_select_db("my_database", $connection); 

mysql_query("INSERT INTO tokens (token) 
VALUES ('$_POST[token]')"); 

mysql_close($connection); 
?> 

在iOS端,您可以使用下面的代碼:

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
    NSString *urlString; 
    NSURL *url; 
    NSMutableURLRequest *request; 
    NSString *postString; 

    urlString = @"http://yoururl.com/apns/registerDevice"; 
    url = [NSURL URLWithString:urlString]; 
    request = [NSMutableURLRequest requestWithURL:url]; 
    postString = [NSString stringWithFormat:@"token=%@", [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding];]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:[NSString stringWithFormat:@"%d", [postString length]] forHTTPHeaderField:@"Content-length"]; 
    [request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; 

    (void)[[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    //Casting this to void makes the warning of unused expression go away. 
} 
+1

請確保您在輸入數據之前清理輸入! – hypercrypt 2012-07-08 23:23:53

2

是的,你應該讓每一個設備的道理,但是如果你想保持它的簡單,我強烈建議你使用城市飛艇爲您推送通知。

+0

是免費的嗎? 以及如何保存每個設備令牌? – 2012-07-07 22:33:13

+1

有一個免費的基本計劃。他們將設備令牌保留在自己的數據庫中。就像我說的,如果你想保持簡單,那麼這很好,否則你可以實現你自己的數據庫併發送push notif。你的自我。 – Lefteris 2012-07-07 22:40:05

0

這可能有點晚了,但小心,NEVER

$_POST['ivar'] 
在SQL查詢字符串

,這是更好的方式到g聯繫SQL注入!請使用準備查詢

相關問題