Отправка push-уведомлений с устройства iOS с помощью OneSignal/Firebase
Я занимаюсь разработкой приложения и пытаюсь выяснить, как я могу уведомить определенного пользователя, когда другой пользователь выполняет определенное действие. Я пытаюсь избежать настройки своего собственного внутреннего сервера, так как считаю, что то, что я хочу сделать, может быть выполнено OneSignal/Firebase.
Я еще не пробовал, но я думаю, что с каждым пользователем я могу получить свой собственный идентификатор_плеера OneSignal (который в основном является идентификатором устройства OneSignal), загрузить его в свою базу данных firebase, а затем, когда я хочу отправить push-уведомление, я просто извлекаю user_id пользователя из firebase, а затем использовать его для создания уведомления с OneSignals, отправляемого на определенное устройство, где использование player_ids не требует API-ключа авторизации.
Хотя, просмотрев документацию, я не уверен, как пользователь может найти (чтобы он мог загрузить его в firebase) свой player_id, поэтому, если кто-нибудь сможет указать мне в этом направлении, это будет оценено.
Читая другие вопросы, кажется, это будет работать. Я просто хотел посмотреть, есть ли какие-либо подобные потенциальные проблемы с этим методом или есть ли более безопасные или более простые способы решить эту проблему.
1 ответ
Да, это возможно, что вам нужно сделать, это:
Создать учетную запись OneSignal и Firebase для API-ключей
Добавить один сигнал (просто пример)
OneSignal.initWithLaunchOptions(launchOptions, appId: "your app id", handleNotificationReceived: { (notification) in }, handleNotificationAction: { (result) in let payload: OSNotificationPayload? = result?.notification.payload print(payload ?? "") }, settings: [kOSSettingsKeyAutoPrompt : false, kOSSettingsKeyInFocusDisplayOption: OSNotificationDisplayType.notification.rawValue])
сохранить push-токен /playerId в firebase (например, в users.id.onesignal)
OneSignal.promptForPushNotifications(userResponse: nil) OneSignal.idsAvailable({(_ userId, _ pushToken) in print("UserId:\(userId!)") if let pushToken = pushToken { print("pushToken:\(pushToken)") FIRDatabase.database().reference().child("users").child(User.sharedInstance.uid).child("onesignal").setValue([userId!: pushToken]) } })
Когда у вас есть для каждого пользователя pushToken, вы можете отправить уведомление этому playerId
FIRDatabase.database().reference().child("users").child(friendId).child("onesignal").observeSingleEvent(of: .value, with: {snapshot in if snapshot.exists() { for (playerId, _) in snapshot.value as! Dictionary<String, String> { OneSignal.postNotification(["headings": ["en": title], "contents": ["en": message], "include_player_ids": [playerId]]) } } })
Это не полная реализация и как это сделать, но я думаю, что это даст вам правильный путь.