【问题标题】:Local Notification Banner and sound not working in Foreground Objective-C本地通知横幅和声音在前台 Objective-C 中不起作用
【发布时间】:2015-08-06 13:39:58
【问题描述】:

我正在尝试对我的应用实施本地通知,并且我实施了本地通知,但问题是......我没有收到 通知横幅和声音 当我的应用位于前台时。但是,当我的应用处于后台时,它运行良好。 如何将通知横幅和声音带到前台。这可能吗?

这是我的一段代码...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Handle launching from a notification
    UILocalNotification *locationNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if (locationNotification) {
        // Set icon badge number to zero
            application.applicationIconBadgeNumber = 0;
    }
}

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{

    if (application.applicationState == UIApplicationStateActive ) {
        NSLog(@"it entered active push");

        UILocalNotification *localNotification = [[UILocalNotification alloc] init];
        localNotification.userInfo = userInfo;
        localNotification.soundName = UILocalNotificationDefaultSoundName;
        localNotification.alertBody = userInfo[@"aps"][@"alert"][@"body"];
        localNotification.alertLaunchImage= userInfo[@"acme1"];
        localNotification.fireDate = [NSDate date];
        localNotification.applicationIconBadgeNumber = 1;
        [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
    }
}


- (void)applicationWillEnterForeground:(UIApplication *)application
{
    // Remove the badge number
    application.applicationIconBadgeNumber = 0;
}

-(void)application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification *)notification{

    UIApplicationState state = [application applicationState];
    if (state == UIApplicationStateActive) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Reminder"
                                                        message:notification.alertBody
                                                       delegate:self cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
    }

    // Set icon badge number to zero
    application.applicationIconBadgeNumber = 0;

}

【问题讨论】:

    标签: ios objective-c uilocalnotification


    【解决方案1】:

    如果应用程序处于活动状态,您将通过 application:didReceiveLocalNotification: 仅在应用程序委托中收到通知。在那里,您可以在视图层次结构上呈现的顶部视图控制器上显示自定义横幅视图。只看应用打开时的whatsapp通知

    【讨论】:

      【解决方案2】:

      如果应用程序处于活动状态,那么您将不会收到任何声音、徽章或警报,但是会调用应用程序委托 application:didReceiveLocalNotification:

      来自苹果文档

      如果系统发送通知时应用程序处于最前面且可见,则不会显示警报,不会标记图标,也不会播放声音。但是,如果应用程序委托实现了 application:didReceiveLocalNotification: ,则会调用它。 UILocalNotification 实例被传递到此方法中,委托可以检查其属性或访问 userInfo 字典中的任何自定义数据。

      如果您的应用当前正在运行且处于活动状态(即可见),您将不会看到警报消息。相反,iOS 会通过以下方法直接将通知传递到您的应用程序

      - (void)application:(UIApplication *)application
          didReceiveLocalNotification:(UILocalNotification *)notification
      

      【讨论】:

        【解决方案3】:

        不,它不会播放声音或显示横幅。但是,在您的应用程序委托中,仍然会调用确实收到通知,如果您希望通知用户,您可以在其中显示警报视图。

        不过,您可以手动添加音频。

         - (void) application:(UIApplication *)application didReceiveLocalNotification:    (UILocalNotification *)notification
        {
        
        SystemSoundID systemSoundID;
        NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"blip"
                                                  withExtension:@"mp3"];
        AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &systemSoundID);
        AudioServicesPlaySystemSound(systemSoundID);
        }
        

        Local notification in Foreground

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-31
          • 2021-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-13
          • 2020-07-17
          相关资源
          最近更新 更多