2012-07-09 75 views
0

我可以为我的iPad获取设备令牌,但问题是如何通过php代码将其发送到服务器中的数据库。通过http请求发送设备令牌

我已经测试了PHP代码,它正在工作。

这是我的函数来发送设备令牌:

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ 

NSString *devToken = [[[[deviceToken description] 
         stringByReplacingOccurrencesOfString:@"<"withString:@""] 
         stringByReplacingOccurrencesOfString:@">" withString:@""] 
         stringByReplacingOccurrencesOfString: @" " withString: @""]; 
NSLog(@"%@",devToken); 
NSString *sli = [NSString stringWithFormat:@"http://localhost:8888/insertiphone.php?number=%@",devToken]; 
NSURL *url = [NSURL URLWithString:sli]; 

NSData *test = [NSData dataWithContentsOfURL:url]; 
if ([test length] == 0) { 
    NSLog(@"no done"); 
} 

} 

它不工作..

,这是PHP代码:

<?php 
function inserttodatabase(){ 
$con = mysql_connect("localhost","root","root"); 
mysql_select_db("my_db", $con); 
mysql_query("INSERT INTO iphoneid (idip) 
VALUES ($_GET[number])"); 
echo "done"; 
} 

inserttodatabase(); 
?> 

更新,我也试图与这些代码不起作用

NSString *devToken = [[[[deviceToken description] 
         stringByReplacingOccurrencesOfString:@"<"withString:@""] 
         stringByReplacingOccurrencesOfString:@">" withString:@""] 
         stringByReplacingOccurrencesOfString: @" " withString: @""]; 

NSString *sli = [NSString stringWithFormat:@"http://localhost:8888/insertiphone.php?  number=%@",devToken]; 
NSLog(@"%@",sli); 
NSURL *url = [NSURL URLWithString:sli]; 

NSURLRequest *urlr = [NSURLRequest requestWithURL:url  cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0]; 

NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:urlr  delegate:self]; 

if (connection){ 
    NSLog(@"connecting"); 
}else { 
    NSLog(@"error"); 
} 

它说的连接,但没有将被插入到数据库

回答

0

支票零(dataWithContentsOfUrl可以在某个问题上返回nil)

您将获得使用NSURLConnection(连接更好的错误信息和控制:didFailWithError :)或ASIHttpRequest(requestFailed :)发送请求。

rest web services in iphone

http://allseeing-i.com/ASIHTTPRequest/How-to-use

此外,没有使来自iPhone客户端的请求时,服务器代码执行?无论是调试还是跟踪服务器代码,以更好地了解发生了什么。

您还可以设置类似charles proxy的东西来查看电线上发生了什么,以及返回的内容。

这里是一个博客文章,用charles proxy调试连接问题。 http://blog.mediarain.com/2009/08/iphone-http-connection-debugging/

最后,作为一个尝试[machinename] .local:8888 ...如果你有名称解析,本地主机解决问题等问题。

+0

我不知道如何使用这些类!任何示例请 – 2012-07-10 00:03:18

+0

给我一分钟... – bryanmac 2012-07-10 00:09:49

+0

添加链接使用这些以及链接到使用charles代理来检查电线。希望那些帮助缩小你的问题... – bryanmac 2012-07-10 00:15:18

0

首先,提供更多关于服务代码在做什么以及如何测试它的信息。你写的代码是发出一个HTTP GET请求,而不是put或post。在大多数情况下,将记录插入数据库的Web服务(如URL中的“insertiphone.php”所证明)将使用HTTP POST而不是GET来实现。如果您使用GET发送它,就像您在做的那样,它不会按预期执行。因此,提供有关如何了解服务器的更多信息以及您如何测试它将有助于诊断您的问题。

假设您已经检查了服务并验证了它期待HTTP GET(如果数据正在服务上更新,但不是很好的RESTful设计,但肯定可行),那么我会同意@bryanmac提供的答案。看看他的链接,了解更好的方法来做HTTP请求,检查服务器端,看看请求是否通过,使用CharlesProxy调试等。

我会提供一个其他调试技巧,如果你的服务期待一个GET,您可以使用Web浏览器进行测试,可以在启用了开发人员扩展的Safari中尝试,并使用它来监视资源请求和响应。这可以让你看到一个成功的请求是什么样的,它可以与你使用CharlesProxy可以看到的实际请求进行比较。

+0

抱歉,但我认为我有另一个问题是GET没有接受超过4个字符! – 2012-07-10 00:59:53

+0

用php代码更新了我的问题 – 2012-07-10 01:02:12

+0

对不起,但我用新代码更新了这个问题..请任何帮助 – 2012-07-10 13:28:50