3

我正在使用苹果通知服务,所以在这个功能中我必须注册下载我的应用程序的每个设备令牌,或者换句话说,当我想发送通知时,我必须发送它的地址。

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

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

3 回答 3

3

如果您不想使用 Urban Airship 等服务。您将创建一个数据库(可能是 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.
}
于 2012-07-08T16:27:05.577 回答
2

是的,你应该得到每个设备令牌,但是如果你想保持简单,我强烈建议你使用 Urban Airship 来推送通知。

于 2012-07-07T22:31:27.217 回答
0

可能有点晚了,但要小心,永远不要

$_POST['ivar'] 

在 SQL 查询字符串中,这是联系 SQL 注入的更好方法!请使用准备查询

于 2013-04-03T09:00:05.767 回答