Отправка 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]])
            }
        }
    })
    

Это не полная реализация и как это сделать, но я думаю, что это даст вам правильный путь.

Другие вопросы по тегам