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