POST到Urban Airship推送通知iOS ASIFormDataRequest

时间:2013-03-01 09:40:21

标签: http ios6 asihttprequest urbanairship.com

我在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];

2 个答案:

答案 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);
        }