Как создать пользовательский звук в FCM для iOS? (Пользовательский звук FCM возвращен к звуку по умолчанию в iOS)

#swift #typescript #google-cloud-functions #firebase-cloud-messaging

#swift #typescript #google-cloud-функции #firebase-облако-обмен сообщениями

Вопрос:

Мои пользовательские звуки для удаленных уведомлений внезапно перестали работать сегодня. Вчера они работали и играли нормально. Затем сегодня, как гром среди ясного неба, они перестали работать. Я не обновлял никакого кода или не вносил никаких изменений в базу данных. Пользовательские звуки просто внезапно прекратились. Все мои уведомления теперь воспроизводят звук iOS по умолчанию. Очень раздражает.

Вот мой Swift код в app delegate:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    
    if #available(iOS 10.0, *) {
        // For iOS 10 display notification (sent via APNS)
        UNUserNotificationCenter.current().delegate = self
        
        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(
            options: authOptions,
            completionHandler: {_, _ in })
    } else {
        let settings: UIUserNotificationSettings =
            UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
        application.registerUserNotificationSettings(settings)
    }
    
    application.registerForRemoteNotifications()
    
    FirebaseApp.configure()
    
    Messaging.messaging().delegate = self
            
    return true
}
  

И вот мой машинописный код из VS Code:

 function sendNewUserAlertToDevices() {

const db = admin.database()
const statsRef = db.ref('stats')

// get current new user count
return statsRef.child('newUserCount').once('value').then((statsSnap: any) => {

    const oldUserCount = statsSnap.val()

    // update new user count by  1
    const newUserCount = oldUserCount   1

    // console.log('new user count:', newUserCount)

    return statsRef.update({
        'newUserCount': newUserCount

    }).then(function (_response: any) {

        // 1. get list of FCM tokens from database
        return statsRef.child('fcmTokens').once('value').then((tokenSnap: any) => {
            // console.log('hello 1')

            const fcmTokens = tokenSnap.val()
            // console.log(fcmTokens)

            // 2. iterate over array of tokens to get individual FCM token
            for (const key in fcmTokens) {
                if (fcmTokens.hasOwnProperty(key)) {
                    // console.log(key   ' -> '   fcmTokens[key])

                    const fcmToken = fcmTokens[key]

                    // 3. send message to each devices that has MP Admin installed on it
                    const payload = {
                        notification: {
                            title: 'New User',
                            body: 'Moneypants has a new download, yo!',
                            sound: '27-96_Xylophone_Sneaky_Short.mp3',
                            badge: String(newUserCount)
                        }
                    }

                    admin.messaging().sendToDevice(fcmToken, payload)
                }
            }

        }).catch(function (error: any) {
            console.log('Error getting fcmTokens:', error)
        })
    })
})
}
  

Не уверен, в чем заключается ошибка. Насколько я могу судить, весь мой код обновлен. Как я уже сказал, вчера все работало просто отлично. Я предполагаю, что есть какой-то новый протокол, который я должен обновить, но я не знаю, где это может быть.

Комментарии:

1. То же самое здесь. Вчера пользовательские звуки внезапно перестали работать на устройствах iOS. После некоторого изучения единственное, что я могу придумать, это попробовать перейти на более новый http v1 api firebase для отправки push-уведомлений. По-видимому, новая версия позволяет настраивать вещи для разных платформ. firebase.google.com/docs/cloud-messaging/migrate-v1

2. Хорошо, так что это не только у меня. Это заставляет меня чувствовать себя лучше. Я думал, что каким-то образом повредил свой код. Я потратил часы, пытаясь отследить код-нарушитель. Я еще немного покопаюсь и попытаюсь выяснить, что делать дальше. Спасибо за ваш ответ.

3. Мы перешли на более новый http v1 firebase api, и пользовательские звуки теперь работают.

4. @SKim как вы обновились до более нового http v1 firebase api? Ссылка на сайте Firebase недоступна. У меня возникли проблемы с отслеживанием информации.

5. Итак, после четырех дней исследований и биения головой о стену пользовательские звуки вернулись! Я вернулся к тому же самому коду, что и четыре дня назад, поэтому я знаю, что изменился не мой код. Это просто волшебным образом исправилось. Ого! На это уходит четыре дня работы. :-/