Local notification plays only default sound after app update
| Originator: | Josh.Lieberman92 | ||
| Number: | rdar://30758362 | Date Originated: | 28-Feb-2017 |
| Status: | Closed | Resolved: | |
| Product: | iOS + SDK | Product Version: | iOS 10 |
| Classification: | Other Bug | Reproducible: | Always |
Area:
Notifications
Summary:
The first load of an app with local notification custom sounds works correctly. When the app is updated (by Xcode, TestFlight or App Store) the app plays only the default sound. Behavior is the same with either new UNUserNotifications or deprecated UILocalNotifications. Behavior only occurs on iOS 10. The custom sound is a 2 second caf file in the application bundle (and it plays correctly multiple times until the app is updated). Notification permissions including Sounds are properly granted. Deleting the app and reloading causes the custom sound to play correctly again.
Steps to Reproduce:
1. Install original app
2. Update app via Xcode, TestFlight, or App Store
3. Send notification
Expected Results:
Custom notification sound is played
Actual Results:
Default notification sound is played
Version:
iOS 10
Notes:
Configuration:
All iOS devices
Attachments:
'AppDelegate.m' was successfully uploaded.
@interface AppDelegate ()
@end
@implementation AppDelegate
BOOL soundsAllowed;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"application didFinishLaunchingWithOptions");
[self requestAuthorizationForNotifications];
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"applicationWillResignActive");
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"applicationDidEnterBackground");
[self scheduleLocalNotification];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"applicationWillEnterForeground");
// check if we are still authorized
[self requestAuthorizationForNotifications];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSLog(@"applicationDidBecomeActive");
}
- (void)applicationWillTerminate:(UIApplication *)application {
NSLog(@"applicationWillTerminate");
}
- (void)requestAuthorizationForNotifications {
NSLog(@"requestAuthorizationForNotifications");
soundsAllowed = NO;
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert + UNAuthorizationOptionSound | UNAuthorizationOptionAlert)
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (error) {
NSLog(@"request authorization error: %@", error);
} else {
NSLog(@"request authorization no error");
[self checkSoundsAllowed];
}
}];}
// examine notification settings to determine if sounds are allowed, save result
- (void)checkSoundsAllowed {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
soundsAllowed = (settings.soundSetting == UNNotificationSettingEnabled);
NSLog(@"soundsAllowed: %@", (soundsAllowed ? @"true" : @"false"));
if (soundsAllowed) {
// clear any existing notifications
[center removeAllPendingNotificationRequests];
}
}];
}
- (void)scheduleLocalNotification {
if (!soundsAllowed) {
NSLog(@"scheduleLocalNotification soundsAllowed: false. return without scheduling");
return;
}
// Set up the request content
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = @"Title";
content.body = @"Body";
content.sound = [UNNotificationSound soundNamed:@"Test.caf"];
// Deliver the notification in five seconds.
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger
triggerWithTimeInterval:5.f repeats:NO];
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"FiveSecond"
content:content trigger:trigger];
// Schedule the notification.
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (!error) {
NSLog(@"addNotificationRequest succeeded! content.sound: %@ default sound: %@", content.sound, [UNNotificationSound defaultSound]);
}
}];
}
@end
Comments
Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!
Apple Developer Relations01-Mar-2017 12:06 PM
Engineering has the following feedback for you:
This was fixed in iOS 10.2.
Please verify this issue with the iOS 10.2.1 GM:
iOS 10.2.1 GM (14D27) https://developer.apple.com/download/ Posted Date: Jan 23rd, 2017
We are now closing this bug report.
If you have questions or comments about the resolution, please update your bug report with that information so we can respond.