0

iPadのデバイストークンを取得できますが、phpコードを介してサーバーのデータベースに送信する方法に問題があります。

私は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");
}

接続していると表示されますが、データベースには何も挿入されません

4

2 に答える 2

0

nilを確認します(dataWithContentsOfUrlは問題に対してnilを返すことができます)

NSURLConnection(connection:didFailWithError :)またはASIHttpRequest(requestFailed :)を使用して要求を送信すると、より適切なエラー情報と制御が得られます。

iPhoneの残りのWebサービス

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

また、iPhoneクライアントからのリクエスト時にサーバーコードは実行されますか?サーバーコードをデバッグまたはトレースして、何が起こっているのかをよりよく理解します。

また、 charlesプロキシのようなものをセットアップして、ネットワーク上で何が起こっているのか、何が戻ってくるのかを確認することもできます。

これは、charlesプロキシとの接続の問題をデバッグするブログ投稿です。 http://blog.mediarain.com/2009/08/iphone-http-connection-debugging/

最後に、名前解決、ローカルホスト解決の問題などの問題が発生した場合は、[machinename] .local:8888...を1回限りで試してください。

于 2012-07-10T00:01:36.320 に答える
0

最初に、サービス コードが何を行っているか、およびどのようにテストしているかについて、より多くの情報を提供します。あなたが書いたコードは、プットやポストではなく、HTTP GET リクエストを発行しています。ほとんどの場合、データベースにレコードを挿入する Web サービス (URL の「insertiphone.php」で示されます) は、GET ではなく HTTP POST を使用して実装されます。GET を使用して送信すると、期待どおりに動作しません。そのため、サーバーが動作していることをどのように確認しているか、およびサーバーをテストするために何を行ったかについて、より多くの情報を提供すると、問題の診断に役立ちます。

サービスをチェックし、それが HTTP GET を予期していることを確認したと仮定すると (データがサービスで更新されている場合、RESTful な設計は適切ではありませんが、確かに可能です)、@bryanmac によって提供された回答に同意します。彼のリンクを調べて、HTTP リクエストを作成するより良い方法、サーバー側をチェックしてリクエストが送信されているかどうかを確認する方法、CharlesProxy を使用してデバッグする方法などを学んでください。

サービスが GET を予期していて、Web ブラウザーでテストできる場合に提供するもう 1 つのデバッグのヒントは、開発者向け拡張機能を有効にして Safari から試し、それを使用してリソースの要求と応答を監視することです。これにより、成功したリクエストがどのように見えるかを確認できます。これは、CharlesProxy を使用して確認できる、送信している実際のリクエストと比較できます。

于 2012-07-10T00:30:16.413 に答える