2017-05-02 10 views
0

サウンドファイルを変更しようとすると、自分のアプリのカスタムサウンドが最近使用できなくなりました。iOSのリモート通知でカスタムサウンドが再生されない

私の通知のペイロードは次のようになります。

{ 
"aps" : { 
     "alert" : "Your message here.", 
     "badge" : 0, 
     "sound" : "notification.caf", 
     "content-available" : 1 
    } 
} 

私はアプリケーションバンドルにnotification.cafを持っています。

私は他のインスタンスでサウンドファイルを再生するコードを持っています。そのため、サウンドファイルは良好です。それは29秒の長さであり、アップル社が要求する30未満です。

設定 - >通知の下で、すべてがアプリの下でオンになっています。私は、アプリがバナーとアラートに設定されているときに両方を試してみました。

しかし、アプリを終了してウェブサービスから通知を送信するたびに、携帯電話は振動して通知を表示します。デフォルトサウンドはなく、カスタムサウンドもありません。

私は2つの異なるデバイス(電話機とipad)でテストしましたが、どちらも機能しませんでした。どちらもiOS 10.3.1を実行します。

何が問題になっているのでしょうか?

答えて

0

以下の質問を行ってください。これはあなたに役立つことがあります。

UILocalNotification custom sound is not playing in iOS7

あなたが試すことができますもう一つは、ImageAssetにに.cafまたは.MP3ファイルを追加し、それを試してみることです。

私のアプリケーションの何らかの理由で、カスタムサウンドを再生できませんでした。しかし、私がアセットフォルダに.mp3ファイルを追加した後、私はリモート通知用のカスタムサウンドを再生することができました。

下記のコードを試してください。

import UIKit 
import Foundation 
import AudioToolbox 
import AVFoundation 

@UIApplicationMain 

class AppDelegate: UIResponder, UIApplicationDelegate, AVAudioPlayerDelegate, AlarmApplicationDelegate{ 

    var window: UIWindow? 
    var audioPlayer: AVAudioPlayer? 
    let alarmScheduler: AlarmSchedulerDelegate = Scheduler() 
    var alarmModel: Alarms = Alarms() 

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     var error: NSError? 
     do { 
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
     } catch let error1 as NSError{ 
      error = error1 
      print("could not set session. err:\(error!.localizedDescription)") 
     } 
     do { 
      try AVAudioSession.sharedInstance().setActive(true) 
     } catch let error1 as NSError{ 
      error = error1 
      print("could not active session. err:\(error!.localizedDescription)") 
     } 
     window?.tintColor = UIColor.red 

     return true 
    } 

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { 
     //show an alert window 
     let storageController = UIAlertController(title: "Alarm", message: nil, preferredStyle: .alert) 
     var isSnooze: Bool = false 
     var soundName: String = "" 
     var index: Int = -1 
     if let userInfo = notification.userInfo { 
      soundName = userInfo["sound"] as! String 
     } 

     playSound(soundName) 

    } 

    //print out all registed NSNotification for debug 
    func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) { 

     print(notificationSettings.types.rawValue) 
    } 

    func playSound(_ soundName: String) { 

     AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) 
     AudioServicesAddSystemSoundCompletion(SystemSoundID(kSystemSoundID_Vibrate),nil, 
               nil, 
               { (_:SystemSoundID, _:UnsafeMutableRawPointer?) -> Void in 
               AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) 
      }, 
               nil) 
     let url = URL(fileURLWithPath: Bundle.main.path(forResource: soundName, ofType: "mp3")!) 

     var error: NSError? 

     do { 
      audioPlayer = try AVAudioPlayer(contentsOf: url) 
     } catch let error1 as NSError { 
      error = error1 
      audioPlayer = nil 
     } 

     if let err = error { 
      print("audioPlayer error \(err.localizedDescription)") 
      return 
     } else { 
      audioPlayer!.delegate = self 
      audioPlayer!.prepareToPlay() 
     } 

     //negative number means loop infinity 
     audioPlayer!.numberOfLoops = -1 
     audioPlayer!.play() 
    } 

} 

上記の呼び出しを使用してローカル通知用のカスタムサウンドを再生することができました。

これはお役に立ちます。

+0

ローカル通知を作成せず、リモート通知を受信して​​います。しかし、「Do not disturb」モードはオフです。サウンドファイルはcaf形式で作成され、長さは29秒です。メインバンドルに追加されました。そして、音はオンです。 – Rubberduck

+0

だから問題は正しく解決されていますか?お楽しみください(y) –

+0

いいえ、問題は解決していない、私はまだ音が受信されません。 – Rubberduck