3

我正在尝试使用 UrbanAirship 开发一个 iOS 应用程序。我收到推送通知,但当应用程序在后台时无法调用任何委托。我(似乎错误地)假设来自 UAPushNotificationDelegate 类的 handleBackgroundNotification API 将为我提供在应用程序处于后台时接收通知时执行自定义操作的功能。

这就是他们的文档所说的:“handleBackgroundNotification:

当应用程序在后台收到推送通知时调用

- (void)handleBackgroundNotification:(NSDictionary *)notification

参数

通知

the push notification

" - 见https://docs.urbanairship.com/ios-lib/Classes/UAPushNotificationHandler.html#//api/name/handleBackgroundNotification

似乎不是那样工作 - 操作系统似乎正在为自己保留通知 - 这与 Apple 的文档是一致的。

如果操作系统不允许,我会质疑该功能的目的。我使用 didReceiveRemoteNotification 接收远程推送通知,效果很好!

但是,由于这是一个企业应用程序(即不是 App Store),如果有私有 APÏs 和框架允许我这样做,我将不胜感激。这个应用程序永远不可能进入应用程序商店!

例如,我尝试执行的自定义操作包括发送到服务器的通知回执,该回执将“证明”收件人应用程序确实收到了通知,以最大音量播放自定义声音(绕过静音和请勿打扰模式) . 这是客户的一些要求。

4

2 回答 2

1

这就是我使用的,它工作得很好:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if(!loggedIn) return;

    NSLog(@"WOW: got notification! %@", userInfo);

    // see this for fine tuning: http://fivelakesstudio.blogspot.com/2012/04/push-notifications-and-urban-airship.html
    [[UAPush shared] handleNotification:userInfo applicationState:application.applicationState];
    [[UAPush shared] resetBadge];

    sharedApplication.applicationIconBadgeNumber = 0;   // probably redundant

    [self handlePushNotification:userInfo isBooting:NO]; // my common handler
}
于 2012-11-14T17:56:53.810 回答
0
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
UA_LINFO(@"Application received remote notification: %@", userInfo);
[[UAPush shared] appReceivedRemoteNotification:userInfo applicationState:application.applicationState fetchCompletionHandler:completionHandler];

NSDictionary *values = [userInfo objectForKey:@"aps"];
NSString *title = [values objectForKey:@"alert"];

}

处理此块中所有状态的通知。注意。您可以监控 application.applicationState 值以记录收到通知时应用程序的状态。希望这可以帮助

于 2014-12-05T08:11:42.400 回答