2013-03-01 62 views
1

我已经设置了Urban Airship推送通知注册并在iOS上处理,并使用CURL终端命令对其进行了测试。然而,我不能用ASIFormDataRequest重现同样的事情。谁可以做到这一点向我展示了如何JSON序列化数据并使用ASIHTTPRequest发送它?发布到城市飞艇推送通知iOS ASIFormDataRequest

顺便说一句,城市飞艇不承认他们的网络接口(推的数量没有增加),对我的推动,但是我能够使用这个认证从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

我认为这不起作用,因为我没有通过电子邮件发送UA以允许从设备推送。我已经这样做了,如果能解决这个问题,我会回答我的问题。 – 2013-03-04 01:18:29

+0

不幸的是,我仍然无法让飞艇识别我的POST请求。 – 2013-03-12 18:46:04

回答

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]; 
} 
-3

城市飞艇在它的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); 
     } 
+0

感谢您的回答,但是如果您重读我的问题,“我已经设置了Urban Airship推送通知注册并在iOS上处理,并使用CURL终端命令进行了测试。” (即我的通知处理设置正确,但我想现在发送推送通知通过iOS)。 – 2013-03-17 18:33:51

+0

我给出的这些函数是iOS的AppDelegate文件。 – 2013-03-19 22:27:33