Urban Airship – 使用NSURLConnection发送推送

我正在研究一个简单的原型,需要测试从一个设备向另一个设备发送推送通知。

我已通过电子邮件发送Urban Airship为我的应用程序启用“允许从设备推送” – 他们确实打开了它。

我正在尝试使用NSURLConnection从设备发送推送通知。

这是我的代码:

- (void) test { NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://go.urbanairship.com/api/push"]]; [request setHTTPMethod:@"POST"]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; NSDictionary * push = @{@"device_tokens":@[@""], @"aps":@{@"alert":@"TEST", @"sound":@"default"}}; NSData * pushdata = [NSJSONSerialization dataWithJSONObject:push options:0 error:NULL]; [request setHTTPBody:pushdata]; [NSURLConnection connectionWithRequest:request delegate:self]; } - (void) connection:(NSURLConnection *) connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *) challenge { if([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodHTTPBasic]) { NSURLCredential * credential = [[NSURLCredential alloc] initWithUser:@"" password:@"" persistence:NSURLCredentialPersistenceForSession]; [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; [credential release]; } } - (void) connection:(NSURLConnection *) connection didReceiveResponse:(NSURLResponse *) response { NSHTTPURLResponse * res = (NSHTTPURLResponse *) response; NSLog(@"response: %@",res); NSLog(@"res %i\n",res.statusCode); } 

其他人成功完成了吗?

看看Urban Airship的HTTP状态代码疑难解答指南 ,以及推送API的文档 ,我的猜测是你需要在URL中添加一个尾部斜杠:

 [NSURL URLWithString:@"https://go.urbanairship.com/api/push/"] 

示例使用V3 API …

 -(void)richPushNotification{ NSDictionary *push = @{ @"audience" : @{ @"device_token" : deviceToken }, @"device_types" : @[ @"ios" ], @"notification" : @{ @"ios" : @{ @"alert":Message, @"sound":@"default", @"badge":@"auto", } }, @"message": @{ @"title": Message, @"body": @"

blah blah

etc...", @"content_type": @"text/html", @"extra": @{ @"offer_id" : @"608f1f6c-8860-c617-a803-b187b491568e" } } }; NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://go.urbanairship.com/api/push/"]]; [request setHTTPMethod:@"POST"]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setValue:@"application/vnd.urbanairship+json; version=3;" forHTTPHeaderField:@"Accept"]; NSString *authStr = [NSString stringWithFormat:@"%@:%@", appKey, appMasterSecret]; NSData *authData = [authStr dataUsingEncoding:NSASCIIStringEncoding]; NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]]; [request setValue:authValue forHTTPHeaderField:@"Authorization"]; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:push options:0 // Pass 0 if you don't care about the readability of the generated string error:NULL]; request.HTTPBody = jsonData; [NSURLConnection connectionWithRequest:request delegate:self];

}

和响应:

 - (void) connection:(NSURLConnection *) connection didReceiveResponse:(NSURLResponse *) response { NSHTTPURLResponse * res = (NSHTTPURLResponse *) response; NSLog(@"response: %@",res); NSLog(@"res %li\n",(long)res.statusCode); if (res.statusCode == 202) { //Show Alert Message Sent }else{ //Handle Error } 

}