2012-03-16 50 views
3

我试图将推送通知集成到我的iOS应用程序中。这是Phonegap/Cordova项目。一切都很好,没有APNS和城市飞艇。Phonegap应用程序与城市飞艇问题

我到现在为止做了什么?我得到它的工作,我可以从UA发送推送消息到我的手机,但是这是用来自不同论坛的示例代码而不是UA文档完成的。所以我开始像在UA文档中那样做。那个我很困惑,并且尝试了很多。

所以我做了以下内容:从UA接过推样品和复制的代码AppDelegate.m现在看起来是这样的:

// Create Airship singleton that's used to talk to Urban Airhship servers. 
    // Please populate AirshipConfig.plist with your info from http://go.urbanairship.com 
    [UAirship takeOff:takeOffOptions]; 

    [[UAPush shared] resetBadge];//zero badge on startup 

    [[UAPush shared] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | 
                 UIRemoteNotificationTypeSound | 
                 UIRemoteNotificationTypeAlert)]; 

    return YES; 
} 


- (void)applicationDidBecomeActive:(UIApplication *)application { 
    UALOG(@"Application did become active."); 
    [[UAPush shared] resetBadge]; //zero badge when resuming from background (iOS 4+) 
} 

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
    UALOG(@"APN device token: %@", deviceToken); 
    // Updates the device token and registers the token with UA 
    [[UAPush shared] registerDeviceToken:deviceToken]; 


    /* 
    * Some example cases where user notification may be warranted 
    * 
    * This code will alert users who try to enable notifications 
    * from the settings screen, but cannot do so because 
    * notications are disabled in some capacity through the settings 
    * app. 
    * 
    */ 

    /* 

    //Do something when notifications are disabled altogther 
    if ([application enabledRemoteNotificationTypes] == UIRemoteNotificationTypeNone) { 
    UALOG(@"iOS Registered a device token, but nothing is enabled!"); 

    //only alert if this is the first registration, or if push has just been 
    //re-enabled 
    if ([UAirship shared].deviceToken != nil) { //already been set this session 
    NSString* okStr = @"OK"; 
    NSString* errorMessage = 
    @"Unable to turn on notifications. Use the \"Settings\" app to enable notifications."; 
    NSString *errorTitle = @"Error"; 
    UIAlertView *someError = [[UIAlertView alloc] initWithTitle:errorTitle 
    message:errorMessage 
    delegate:nil 
    cancelButtonTitle:okStr 
    otherButtonTitles:nil]; 

    [someError show]; 
    [someError release]; 
    } 

    //Do something when some notification types are disabled 
    } else if ([application enabledRemoteNotificationTypes] != [UAPush shared].notificationTypes) { 

    UALOG(@"Failed to register a device token with the requested services. Your notifications may be turned off."); 

    //only alert if this is the first registration, or if push has just been 
    //re-enabled 
    if ([UAirship shared].deviceToken != nil) { //already been set this session 

    UIRemoteNotificationType disabledTypes = [application enabledRemoteNotificationTypes]^[UAPush shared].notificationTypes; 



    NSString* okStr = @"OK"; 
    NSString* errorMessage = [NSString stringWithFormat:@"Unable to turn on %@. Use the \"Settings\" app to enable these notifications.", [UAPush pushTypeString:disabledTypes]]; 
    NSString *errorTitle = @"Error"; 
    UIAlertView *someError = [[UIAlertView alloc] initWithTitle:errorTitle 
    message:errorMessage 
    delegate:nil 
    cancelButtonTitle:okStr 
    otherButtonTitles:nil]; 

    [someError show]; 
    [someError release]; 
    } 
    } 

    */ 
} 

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *) error { 
    UALOG(@"Failed To Register For Remote Notifications With Error: %@", error); 
} 

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
    UALOG(@"Received remote notification: %@", userInfo); 

    // Get application state for iOS4.x+ devices, otherwise assume active 
    UIApplicationState appState = UIApplicationStateActive; 
    if ([application respondsToSelector:@selector(applicationState)]) { 
     appState = application.applicationState; 
    } 

    [[UAPush shared] handleNotification:userInfo applicationState:appState]; 
    [[UAPush shared] resetBadge]; // zero badge after push received 
} 

- (void)applicationWillTerminate:(UIApplication *)application { 
    [UAirship land]; 
} 

它非常像之前一样,但是从UA给出。然后我将来自Push Sample的其他源文件夹中的文件复制到我的phonegap文件夹中,包括AirshipConfig.plist。此外,我将“构建设置”中的标题搜索路径设置为Airship文件夹,我之前将其复制到xCode项目文件夹中。

现在我在AppDeledate.m文件中出现错误(6)“使用未声明的标识符'UAPush'”。我现在能做什么?

感谢一些帮助......

+1

我也有很多PhoneGap和UrbanAirship的问题。当UrbanAirship告诉我他们不会支持PhoneGap时,我最终放弃了使用它们,即使我从他们的网站获得了代码。 – 2012-04-01 01:00:24

回答

6

你需要在AppDelegate.m中导入UAirship.h & UAPush.h

#import "MainViewController.h" 
#import "UAirship.h" 
#import "UAPush.h" 

这将消除您的未声明的标识符问题。傻城市飞艇忘了把它放在他们的文档

+0

可以验证这是真实的,我不知道他为什么没有接受你的答案...救了我主要的头痛,谢谢!注:截至4/12/13仍然没有在文档中 – roozbubu 2013-04-12 21:20:07