2012-07-09 72 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