如何发送设备令牌和应用程序版本到服务器



我已经实现了发送设备令牌和应用程序版本到服务器。它在模拟器(硬编码数据)中工作良好,但在设备中不起作用。任何形式的帮助都会很感激。提前谢谢你

代码

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

    // Get Bundle Info for Remote Registration (handy if you have more than one app)
    NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    // Prepare the Device Token for Registration (remove spaces and < >)
    NSString *deviceToken = [[[[devToken description]
                               stringByReplacingOccurrencesOfString:@"<"withString:@""]
                              stringByReplacingOccurrencesOfString:@">" withString:@""]
                             stringByReplacingOccurrencesOfString: @" " withString: @""];
    NSMutableString *urlString = [[BASE_URL mutableCopy] autorelease];
    [urlString appendFormat:@"traceDeviceTokenId?tokenid=%@&version=%@",deviceToken, appVersion];
    NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    NSString *postLength = [NSString stringWithFormat:@"%d", [urlString length]];       
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
    [request setURL:url];
    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"text/xml; charset=utf-16" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:[urlString dataUsingEncoding:NSUTF16StringEncoding]];
    NSLog(@"Request xml>>>>>> %@", urlString);
    NSError *error; 
    NSURLResponse *response;
    NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSString *responseXml = [[NSString alloc] initWithData:urlData encoding:NSUTF16StringEncoding];
    NSLog(@"Response xml>>>>>> = %@", responseXml);
}
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{ 
    NSString *strWithoutSpaces  = [NSString stringWithFormat:@"%@",deviceToken];
    strWithoutSpaces = [strWithoutSpaces stringByReplacingOccurrencesOfString:@" " withString:@""];    
    strWithoutSpaces = [strWithoutSpaces stringByReplacingOccurrencesOfString:@"<" withString:@""];
    strDeviceToken = [strWithoutSpaces stringByReplacingOccurrencesOfString:@">" withString:@""];
    [self createRequestWithDeviceToken:strDeviceToken];     
}
- (void) createRequestWithDeviceToken:(NSString*)deviceToken
{    
        [[UIApplication sharedApplication]setNetworkActivityIndicatorVisible:YES];
        NSString *strURL = [[NSString alloc] initWithFormat:@"%@%@",APNS_DEVICE_REGISTRATION_URL, deviceToken];
        [self prepareConnectionForWebService:strURL delegateHandler:self];
        [strURL release];
}
- (void) prepareConnectionForWebService:(NSString*)webServiceURL delegateHandler:(id)object
{
    //Create HTTP request
    objRequest = [[RequestCreation alloc] init];
    [self.objRequest initRequestWithURL:webServiceURL withMethodType:@"GET" withContentType:@"text/html" andBodyData:nil];
    //Placing URLConnection with request.
    objConnection = [[[ConnectionCreation alloc]init] autorelease];
    self.objConnection.delegate = object;
    [self.objConnection initWithRequest:self.objRequest.objURLRequest];
    [objRequest release];
}
- (void) initWithRequest:(NSMutableURLRequest *)requestedURL
{
    self.urlConnection = [NSURLConnection connectionWithRequest:requestedURL delegate:self];
    if(self.urlConnection)
    {
        receivedData=[[NSMutableData alloc] init];
    }
    else 
    {
        //infiorm the user that the connection is failed
        UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"Connection Failure" message:@"Unable to connect" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [alert show];
        [alert release];
    }
}

我刚刚粘贴了当前正在运行的应用程序的代码。只要浏览一下代码,就能明白你哪里出错了。将didRegisterForRemoteNotificationsWithDeviceToken中编写的代码分解为小方法以获得正确的理解。

最新更新