2016-12-17 53 views
3


我開發了一個應用程序到我的學校,其中一個功能是校長的更新。爲此,我使用Firebase實時數據庫。我需要該應用程序將添加新的孩子(消息)時自動發送通知(背景)。

這是我讀的代碼(SWIFT):自動後臺通知firebase數據庫

var messages = [Message]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    observeMessages() 
} 

func observeMessages() { 
    let dbRef = FIRDatabase.database().reference().child("messageS") 
    dbRef.observe(.childAdded, with: { (snapshot) in 

     if let dictionary = snapshot.value as? [String: AnyObject] { 
      let text = Message() 
      text.setValuesForKeys(dictionary) 
      self.messages.insert(text, at: 0) 


      DispatchQueue.main.async(execute: { 
       self.tableView.reloadData() 
      }) 
     } 

     }, withCancel: nil) 
} 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

// MARK: - Table view data source 

override func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return messages.count 
} 


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cellId") 

    let message = messages[indexPath.row] 
    cell.textLabel?.text = message.title 
    cell.textLabel?.textAlignment = .center 
    cell.detailTextLabel?.text = message.message 
    cell.detailTextLabel?.textAlignment = .right 

    // Configure the cell... 

    return cell 
} 

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 


    let message = messages[indexPath.row] 
    let title = message.title 
    let msg = message.message 
    let controller = UIAlertController(title: title, message: msg, preferredStyle: .alert) 
    let cancelAction = UIAlertAction(title: "סגור", style: .cancel) { (handler) in 
     // Any action when you cancel 
    } 
    controller.addAction(cancelAction) 
    self.present(controller, animated: true, completion: nil) 

} 

這是我寫的代碼(SWIFT):

@IBOutlet weak var MessageTitle: UITextField! 
@IBOutlet weak var MessageText: UITextField! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 
} 

func post() { 
    let title: String = MessageTitle.text! 
    let message: String = MessageText.text! 

    let post: [String: AnyObject] = ["title": title as AnyObject, 
            "message": message as AnyObject] 
    let dbRef = FIRDatabase.database().reference() 
    dbRef.child("messageS").childByAutoId().setValue(post) 



} 
@IBAction func Publish(_ sender: AnyObject) { 
    post() 



    let MessageSent = UIAlertController(title: "נשלח", message: "ההודעה נשלחה בהצלחה", preferredStyle: UIAlertControllerStyle.alert) 
    MessageSent.addAction(UIAlertAction(title: "תודה", style: UIAlertActionStyle.default, handler: nil)) 
    self.present(MessageSent, animated: true, completion: nil) 

} 

這是我讀的代碼(機器人):

private Firebase mRef; 
public ArrayList<String> messages = new ArrayList<>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_updates); 

    mRef = new Firebase("https://ksharet-d6a24.firebaseio.com"); 
    mRef.child("messageS"); 
    // Get ListView object from xml 
    final ListView listView = (ListView) findViewById(R.id.ListView); 

    // Create a new Adapter 
    final ArrayAdapter<String> adapter = new ArrayAdapter<>(this, 
      android.R.layout.simple_list_item_1, messages); 

    // Assign adapter to ListView 
    listView.setAdapter(adapter); 


    mRef.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { 
       Message message = postSnapshot.getValue(Message.class); 
       messages.add(0, message.getTitle() + '\n' + message.getMessage()); 
      } 
      adapter.notifyDataSetChanged(); 

     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 
     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 
     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 
     } 
    }); 
} 

這是我的寫代碼(android):

​​

我應該在代碼中創建或更改什麼(如果可以,則適用於iOS和Android)。
我最近購買了Apple Developer Program會員資格,它很快就會被激活。

感謝幫手。

+0

您遇到的實際問題是什麼? – shallowThought

+0

@shallowThought當新消息到達數據庫時,我想在後臺自動推送通知。 –

+0

也許有幫助:http://stackoverflow.com/questions/25078953/does-firebase-handle-push-notifications – shallowThought

回答

0

因此,經過很多時間我一直在尋找解決方案,我發現了一個非常簡單的方法來做到這一點,它是通過使用雲套件。這就是布萊恩到來的教程:

https://youtu.be/BXl5o5_2aEU
我建議你去他的第一部影片:https://youtu.be/XQ3nLV2778U,只是做一些這些東西。

編輯:2017年

現在我們可以以發送推送通知的數據庫更改時使用火力地堡雲功能。

+0

你是怎麼解決這個問題在Android? – user3467240

+0

我沒有......我唯一擁有的是進入活動時的通知 –