Регистрация UrbanAirship / Push-уведомлений: NSURLErrorDomain: неверный URL - PullRequest
0 голосов
/ 04 марта 2012

У меня действительно странный ответ на MSMutableURLRequest:

Error Domain=NSURLErrorDomain Code=-1000 "bad URL"

URL составлен таким образом. Да, я знаю, что выкладываю токен моего тестового устройства онлайн. Я изменил цифру для конфиденциальности.

self.pushTokenData = deviceToken;

NSURL *correctURL = [NSURL URLWithString:@"https://go.urbanairship.com/api/device_tokens/2d1535dfcbfd859b4f55e6b74db24c71cf6082b503d38583b0b20f2816c24ca8"];

NSString *password = [@"redacted" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:correctURL];

NSLog(@"httpClient url: %@", [httpClient baseURL]);
[httpClient setAuthorizationHeaderWithUsername:@"redacted" password:password];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"PUT" path:nil parameters:nil];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){
    NSLog(@"Success: %@", responseObject);
}failure:^(AFHTTPRequestOperation *operation, NSError *error){
    NSLog(@"Failure: %@", error);
}];
[operation start];

Этот URL отлично работает в сафари. Есть идеи?

1 Ответ

2 голосов
/ 05 марта 2012
NSMutableDictionary *payload = [NSMutableDictionary dictionary];
[payload setValue:[NSArray arrayWithObjects:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"], [[UIDevice currentDevice] model], [[NSLocale currentLocale] localeIdentifier], nil] forKey:@"tags"];
[payload setValue:[[NSTimeZone localTimeZone] name] forKey:@"tz"];

NSString *deviceTokenString = [[[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] stringByReplacingOccurrencesOfString:@" " withString:@""];

AFHTTPClient *urbanAirshipClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"https://go.urbanairship.com/api/device_tokens/]];
urbanAirshipClient.parameterEncoding = AFJSONParameterEncoding;
[urbanAirshipClient setAuthorizationHeaderWithUsername:<# UA Application Key #> password:<# UA Application Secret #>];
[urbanAirshipClient putPath:[NSString stringWithFormat:@"device_tokens/%@", deviceTokenString] parameters:payload success:<# Success Block #> failure:<# Failure Block #>];

Попробуйте это.

...