向Firebase中的其他用户发送预先编写的应用内用户通知

时间:2018-06-14 17:00:26

标签: ios swift uitableview firebase firebase-realtime-database

如何向Firebase中的其他用户发送预先编写的应用内用户通知?我只想要在我的tableview中点击哪个用户单元来接收相同的预写通知。

我还在AppDelegate中启用了通知。

我知道Firebase推送通知,这不一定是我想要的,我希望其他用户从桌面视图中触发通知。

到目前为止,这是我的代码:

import UIKit
import Firebase
import UserNotifications

class NewMessageController: UITableViewController, UNUserNotificationCenterDelegate {

let cellId = "cellId"

var users = [User]()

override func viewDidLoad() {


    super.viewDidLoad()
    UNUserNotificationCenter.current().delegate = self
    tableView.separatorInset = UIEdgeInsetsMake(0, 3, 0, 11);
    self.navigationController?.navigationBar.prefersLargeTitles = true
    self.navigationController?.navigationBar.topItem?.title = "People"
    self.navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    self.tableView.backgroundColor = UIColor(red:0.20, green:0.22, blue:0.29, alpha:1.0)

    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(handleCancel))

    tableView.register(UserCell.self, forCellReuseIdentifier: cellId)

    fetchUser()
}

func fetchUser() {
    Database.database().reference().child("users").observe(.childAdded, with: { (snapshot) in

        if let dictionary = snapshot.value as? [String: AnyObject] {
            let user = User()
            user.name = dictionary["name"] as? String
            user.email = dictionary["email"] as? String
            user.profileImageUrl = dictionary["profileImageUrl"]as? String
            self.users.append(user)

            //this will crash because of background thread, so lets use dispatch_async to fix
            DispatchQueue.main.async(execute: {
                self.tableView.reloadData()
            })

            //                user.name = dictionary["name"]
        }

    }, withCancel: nil)
}

@objc func handleCancel() {
    dismiss(animated: true, completion: nil)
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {


    return users.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! UserCell
    cell.textLabel?.textColor = UIColor.white
    let user = users[indexPath.row]
    cell.textLabel?.text = user.name
    cell.detailTextLabel?.text = user.email
    cell.detailTextLabel?.textColor = UIColor.white
    cell.textLabel?.font = UIFont.boldSystemFont(ofSize: 15.0)

    if let profileImageUrl = user.profileImageUrl {
        cell.profileImageView.loadImageUsingCacheWithUrlString(profileImageUrl)
    }

    return cell
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 72
}

//var messagesController: MessagesController?

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let messi = UNMutableNotificationContent()
    messi.title = "HelloApp"
    messi.body = "Hi There!"
    messi.badge = 1
    messi.categoryIdentifier = "messiCategory"


    let messiTrigger = UNTimeIntervalNotificationTrigger(timeInterval: 2, repeats: false)

    let messiRequestIdentifier = "messi"
    let request = UNNotificationRequest(identifier: messiRequestIdentifier, content: messi, trigger: messiTrigger)


    UNUserNotificationCenter.current().add(request) {(error) in

        print(error as Any)
    }

1 个答案:

答案 0 :(得分:0)

使用信号,它是免费的,可以在firebase中工作 您可以使用swift将设备发送到设备或设备或设备,以便在app中进行细分通知 它可以通过这个模型工作: 使用onesignal sdk获取用户特定的ID,在创建帐户时,将其保存在firebase中 你的数据库 -Users-      - 用户身份               -OnesignalId:“由信号函数创建的id” 然后,当想要从不同的用户向上述用户发送通知时 它可以像这样使用 这是一个由onesignal SDK提供的功能 OneSignal.postNotification([“heading”:[en:“你想要什么”],“内容”:“thecontenthere”],“include_player_ids”:OnsignalID) 这会从设备向具有此信号ID的设备发送通知