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 }
}