好的,我一直试图解决这个问题大约三个星期,我认为我不需要再次剃光了!我尽可能地解构了代码,所以我可以专注于将设备令牌放到我的数据库中。当我运行代码时,我在我的数据库中得到一个时间戳记录,就是这样,所以我知道它已连接但没有任何东西。
这是我的代码
- (void)application:(UIApplication*)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken {
NSString *tokenStr = [deviceToken description];
NSString *pushToken = [[[[tokenStr
stringByReplacingOccurrencesOfString:@"<" withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString:@" " withString:@""] retain];
// Save the token to server
NSString *urlStr = [NSString stringWithFormat:ServerApiURL];
NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
[req setHTTPMethod:@"POST"];
[req setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
NSMutableData *postBody = [NSMutableData data];
[postBody appendData:[[NSString stringWithFormat:@"&token=%@",
pushToken] dataUsingEncoding:NSUTF8StringEncoding]];
[req setHTTPBody:postBody];
[[NSURLConnection alloc] initWithRequest:req delegate:nil];
NSLog(@"%@", pushToken);
NSLog(@"%@", url);
}
这是非常简单的PHP
// initialize connection to database
$db = mysql_connect('localhost', 'xxxxxxxxx', 'xxxxxxxx');
$db_name = "xxxxxxxxxxxx";
mysql_select_db($db_name, $db);
// store incoming data as php variables
error_log(print_r($_POST, true));
$token = $_POST['token'];
// create mysql query
mysql_query("INSERT INTO iPhone (device_token)
VALUES ('$token')");
mysql_query($query);
mysql_close($db);
?>
我在我的数据库中得到的是时间戳,但在device_token下没有。我将不胜感激任何帮助。感谢。
答案 0 :(得分:0)
NSLog(@"%@", pushToken);
是否包含您要提交的有效令牌?
此外,您可以尝试在PHP页面上转储$ _POST以查看它正在接收的内容。
另一方面,请确保在使用mysqlrealescapestring();
将其插入数据库之前清理PHP页面上的输入,或者考虑使用PDO,因为现在不鼓励使用旧的mysql函数。 PDO还会自动清理输入。
以下是有关PDO的更多信息:
http://us2.php.net/manual/en/ref.pdo-mysql.php
http://us2.php.net/manual/en/pdo.query.php
修改强>
这可能是问题的原因。取代
NSMutableData *postBody = [NSMutableData data];
[postBody appendData:[[NSString stringWithFormat:@"&token=%@", pushToken] dataUsingEncoding:NSUTF8StringEncoding]];
与
NSData *postBody = [[NSString stringWithFormat:@"&token=%@", pushToken] dataUsingEncoding:NSUTF8StringEncoding];
唯一的区别是NSData而不是NSMutableData以及更直接的设置方式。我不确定这是否是导致问题的原因,但尝试不会有什么坏处。