我在iOS上设置了Urban Airship推送通知注册和处理,并使用CURL终端命令对其进行了测试。但是,我无法使用ASIFormDataRequest重现相同的事情。完成此操作的任何人都可以向我展示如何使用ASIHTTPRequest或其他东西来JSON序列化数据并发送它吗?
顺便说一句,Urban Airship无法识别我对他们的网络界面的推动(推送次数没有增加),但是我能够从UA获得一个回复代码200,使用它进行身份验证:
[request setUsername:URBAN_AIRSHIP_APP_KEY];
[request setPassword:URBAN_AIRSHIP_APP_SECRET];
但我似乎无法将通知发送到设备。
编辑:这是我的代码看起来像
NSDictionary *paramDict =
@{
device_tokens: @[@"mytoken",@"mytoken2"],
aps: @{alert: @"alertText"},
extras: @"myExtraParam",
moreExtras: @"moreExtras"
};
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:paramDict];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL
URLWithString:@"https://go.urbanairship.com/api/push/"]];
[request setRequestMethod:@"POST"];
[request appendPostData:data];
[request setUsername:URBAN_AIRSHIP_APP_KEY];
[request setPassword:URBAN_AIRSHIP_APP_SECRET];
[request addRequestHeader:@"Content-Type" value:@"application/json"];
[request setDelegate:self];
[request setDidFinishSelector:@selector(pushSucceeded:)];
[request setDidFailSelector:@selector(pushFailed:)];
[request startAsynchronous];
答案 0 :(得分:0)
我终于有了这个工作。我想这是我的json序列化的一个问题。使用NSJSONSerialization工作。
这是我的代码,其他任何人都试图让它工作。
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:paramDict
options:0
error:&error];
if (!jsonData) {
NSLog(@"JSON error: %@", error);
} else {
//Do something with jsonData
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"https://go.urbanairship.com/api/push/"]];
[request appendPostData:jsonData];
[request setUsername:URBAN_AIRSHIP_APP_KEY];
[request setPassword:URBAN_AIRSHIP_APP_SECRET];
[request addRequestHeader:@"Content-Type" value:@"application/json"];
[request setDelegate:self];
[request setDidFinishSelector:@selector(pushSucceeded:)];
[request setDidFailSelector:@selector(pushFailed:)];
[request startAsynchronous];
}
答案 1 :(得分:-3)
Urban Airship有关于将SDK集成到代码中的文档。但是这里有一些提示可以帮助你。
您应该覆盖应用程序的AppDelegate文件中执行类似操作的以下函数。 UAirship是Urban Airship SDK的经理级别。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// push notification
//Init Airship launch options
NSMutableDictionary *takeOffOptions = [[[NSMutableDictionary alloc] init] autorelease];
[takeOffOptions setValue:launchOptions forKey:UAirshipTakeOffOptionsLaunchOptionsKey];
// Create Airship singleton that's used to talk to Urban Airship servers.
// Please populate AirshipConfig.plist with your info from http://go.urbanairship.com
[UAirship takeOff:takeOffOptions];
...
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// Updates the device token and registers the token with UA
NSLog(@"Registering for Devicetoken");
[[UAirship shared] registerDeviceToken:deviceToken];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSLog(@"Received remote notification: %@", userInfo);
// possibly throw alert box to show the payload data in the userInfo object.
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *) error {
NSLog(@"Failed To Register For Remote Notifications With Error: %@", error);
}