0

我正在開發一個應用程序,並試圖解決在不同用戶執行特定操作時如何通知特定用戶。我試圖避免設置自己的後端服務器,因爲我相信我想要做的事情可以通過OneSignal/Firebase完成。使用OneSignal/Firebase從iOS設備發送推送通知

我還沒有嘗試過,但我與每個用戶都可以獲得他們自己的OneSignal player_id(基本上是OneSignal device_id),將其上傳到我的Firebase數據庫,然後當我想發送推送通知我只需將用戶的player_id從firebase中提取出來,然後使用它創建OneSignals send to specific device的通知,其中使用player_ids不需要API Auth密鑰。

儘管查看完文檔後我不確定用戶如何找到(因此他們可以上傳到firebase)他們的player_id,所以如果任何人都可以指出我在這個方向,它將不勝感激。

通過其他問題的閱讀,似乎這將工作。我只是想看看這種方法是否存在任何類似的潛在問題,或者是否有更安全或更簡單的方法去解決。

回答

6

是的,這是可能的,你需要做的是:

  • 的API密鑰創建OneSignal和火力地堡帳戶

  • 添加一個信號(只是一個例子)

    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]) 
    
  • 將推送令牌/ playerId保存到firebase(例如,在users.id.onesignal中)

    OneSignal.registerForPushNotifications() 
    OneSignal.idsAvailable({(_ userId, _ pushToken) in 
    print("UserId:\(userId!)") 
    if pushToken != nil { 
        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]]) 
         } 
        } 
    }) 
    

這不是全面實施,以及如何做到這一點,但它會給你我認爲正確的方式。

+0

你救了我一天,謝謝! – Burning

+0

@Burning歡迎您 – Retterdesdialogs

相關問題