我正在開發一個iOS應用程序,我正在實施推送通知。由於網絡原因,應用程序UI掛起,iOS
在AppDelegate
,更具體的didRegisterForRemoteNotificationsWithDeviceToken
功能,以後我的推送通知登記,我做一個HTTP POST請求發送到我的服務器的用戶憑據(cfuuid,OS等)和推送令牌。
當服務器應用程序一切順利。 但是,如果由於任何原因服務器無法訪問,應用程序的UI會掛起大約30秒(直到連接超時),我唯一看到的就是一個白色屏幕。
我怎麼會從UI中的「網絡」分開?我想通過使用另一個線程的答案。
到底我能做到這一點?我在didRegisterForRemoteNotificationsWithDeviceToken
中唯一做的是使用ASIHTTPRequest庫將憑據發送到服務器。
需要在不同的線程所要執行的代碼如下所示:
NSString *jsonString;
//jsonString = [[NSString alloc] initWithFormat:@"{\"deviceUUID\":\"%@\",\"os\":\"ios\", \"active\":\"%d\", \"pushToken\":\"%@\"}",deviceUUID,active,token];
jsonString = [[NSString alloc] initWithFormat:@"{\"deviceUUID\":\"%@\",\"os\":\"ios\", \"pushToken\":\"%@\"}",deviceUUID,token];
NSLog(@"%@",jsonString);
//NSString *urlStr= [[NSString alloc] initWithFormat:CITYINFO_SERVER_URL,@"push_notifications/register"];
NSString *urlStr= [[NSString alloc] initWithFormat:CITYINFO_SERVER_URL,@"register.php"];
//send json file , using ASIHttpClass
NSURL *url = [NSURL URLWithString:urlStr];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
request.timeOutSeconds = TIME_OUT_SECONDS;
[request setRequestMethod:@"PUT"];
//NSString *credentials= [self encodeCredentials];
//[request addRequestHeader:@"Authorization" value:[[NSString alloc] initWithFormat:@"Basic %@",credentials]];
[request addRequestHeader:@"Content-Type" value:@"application/json; charset=utf-8"];
[request appendPostData:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
[request startSynchronous];
if([request responseStatusCode]==200){
NSLog(@"Server reached. Response Status : 200");
return true;
} else {
NSLog(@"Server could not be reached");
return false;
try [request startAsynchronous];而不是[request startSynchronous]; – Bonnie 2013-05-10 09:16:00