Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 向Firebase中的其他用户发送预先编写的应用程序内用户通知_Ios_Swift_Uitableview_Firebase_Firebase Realtime Database - Fatal编程技术网

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

Ios 向Firebase中的其他用户发送预先编写的应用程序内用户通知,ios,swift,uitableview,firebase,firebase-realtime-database,Ios,Swift,Uitableview,Firebase,Firebase Realtime Database,我如何向Firebase中的其他用户发送预先编写的应用程序内用户通知?我只希望我在tableview中点击的任何用户单元都能收到相同的预写通知 我还在AppDelegate中启用了通知 我知道Firebase推送通知,这不一定是我想要的,我希望其他用户从tableview触发通知 以下是我目前的代码: import UIKit import Firebase import UserNotifications class NewMessageController: UITableViewCont

我如何向Firebase中的其他用户发送预先编写的应用程序内用户通知?我只希望我在tableview中点击的任何用户单元都能收到相同的预写通知

我还在AppDelegate中启用了通知

我知道Firebase推送通知,这不一定是我想要的,我希望其他用户从tableview触发通知

以下是我目前的代码:

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)
    }

使用onesignal,它是免费的,可以在firebase中工作 使用swift在应用程序中发送设备到设备或设备到分段通知 它可以通过以下模型工作: 使用onesignal sdk获取特定于用户的id,在创建帐户时,将其保存在firebase中,如下所示 你的数据库 -使用者- -用户ID -OnesignalId:“由onesignal函数创建的id” 然后,当您希望从其他用户向上述用户发送通知时 它可以这样使用 这是onesignal SDK提供的函数 OneSignal.postNotification([“heading”:[en:“what you want”],“contents”:“thecontenthere”],“include_player_id”:OnsignalID) 这将从一个设备向具有此onesignalID的设备发送通知