Увеличьте время пользовательского локального звука уведомления в Objective C IOS

Я хочу увеличить время воспроизведения пользовательского рингтона для local notification, но

Apple говорит:

Звуковые файлы должны быть короче 30 секунд. Если звуковой файл длиннее 30 секунд, система вместо этого воспроизводит звук по умолчанию.

Вот документация

Но мой звуковой файл 5 минут

Я пробовал таким образом:

content.sound = [soundName:@"mycustomtone.aiff"];
content.time = [timeDuration: 300];

Я знаю, что 300 секунд — это больше, чем 30 секунд, и это неправильный способ определения времени, поскольку нет определения времени для времени звука уведомления.

Помогите мне увеличить продолжительность пользовательского звука более чем на 30 секунд, если это возможно!

Я знаю, что нет ничего невозможного Если разработчик хочет!

Вот что я делаю:

 #import "ViewController.h"

 @interface ViewController () {

 NSUserDefaults *defaults;
 }

 @end

 bool isGrantedNotificationAccess;

 @implementation ViewController

 - (void)viewDidLoad {
 [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

isGrantedNotificationAccess = false;
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert+UNAuthorizationOptionSound;

[center requestAuthorizationWithOptions:options completionHandler:^(BOOL granted, NSError * _Nullable error) {
    isGrantedNotificationAccess = granted;
}];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
 }


 - (IBAction)notifyButton:(id)sender {


 if (isGrantedNotificationAccess) {
    NSLog(@"clicked");

    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];

    content.title = @"Notification Title";
    content.subtitle = @"Notification Subtitle";
    content.body = @"Notification body";
    content.sound = [UNNotificationSound soundNamed:@"alarm_clock_2015.aiff"];
    content.timeDuration = 300;


UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:60 repeats:YES];

UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"UYLocalNotification" content:content trigger:trigger];

[center addNotificationRequest:request withCompletionHandler:nil];
}
}
@end

person iOS Developer    schedule 28.03.2018    source источник
comment
Откуда вызывается локальное уведомление? Разве вы не можете отключить звук уведомления по умолчанию и создать другую функцию, воспроизводящую звук?   -  person Egghead    schedule 28.03.2018
comment
@Egghead Я обновил вопрос с кодом, как я могу определить функцию, ответьте, пожалуйста?   -  person iOS Developer    schedule 28.03.2018


Ответы (2)


Как ты сказал :

Звуковые файлы должны быть не короче 30 секунд. Если звуковой файл длиннее 30 секунд, система вместо этого воспроизводит звук по умолчанию.

Я бы посоветовал вам принять это во внимание, поскольку, даже если вам удастся обмануть и решить проблему, Apple отклонит ваше приложение.

кроме того, 5 минут — это не звук, это музыка, поэтому для воспроизведения приложения, пока приложение находится в фоновом режиме, вы должны зарегистрироваться как аудиоприложение и, получив уведомление, использовать AVAudioPlayer для воспроизведения вашего файла.

http://www.sagorin.org/ios-playing-audio-in-background-audio/

person Florian Burel    schedule 30.03.2018

Я попробую, но я не могу протестировать этот код, но я дам вам приблизительное объяснение того, как я это сделаю.. (Не знаю, сработает ли это)

Я бы создал такую ​​функцию:

-(void)playsound {
    [[NSSound soundNamed:@"alarm_clock_2015"] play];
}

и вызовите эту функцию из вашего notifyButton IBAction

- (IBAction)notifyButton:(id)sender {


 if (isGrantedNotificationAccess) {
    NSLog(@"clicked");

    [self playsound];

    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
//Mute the sound of this notification
    content.title = @"Notification Title";
    content.subtitle = @"Notification Subtitle";
    content.body = @"Notification body";
    content.sound = [UNNotificationSound soundNamed:@"alarm_clock_2015.aiff"];
    //content.timeDuration = 300;


UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:60 repeats:YES];

UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"UYLocalNotification" content:content trigger:trigger];

[center addNotificationRequest:request withCompletionHandler:nil];
}
}
person Egghead    schedule 28.03.2018
comment
нет функции с именем timeDuration в content.timeDuration - person iOS Developer; 30.03.2018