3


Ich entwickelte eine Anwendung für meine Schule und eines der Features ist Principals Updates. Dazu verwende ich die Firebase Echtzeitdatenbank. Ich brauche, dass die App automatisch Benachrichtigungen (Hintergrund) sendet, wenn ein neues Kind (Nachricht) hinzugefügt wird.

das ist mein Lese Code (SWIFT):automatisch Hintergrund Benachrichtigung Firebase-Datenbank

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) 

} 

dieser Code meine Schreib ist (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) 

} 

dies mein Lesecode (Android):

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

das ist mein schreiben code (android):

private Button sendData; 
private Firebase mRef; 
private EditText messageBox = (EditText) findViewById(R.id.MessageText); 

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

    Firebase.setAndroidContext(this); 

    mRef = new Firebase("https://ksharet-d6a24.firebaseio.com/"); 
    mRef.child("message"); 
    sendData = (Button) findViewById(R.id.sendMessage); 

    sendData.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      String message = messageBox.getText().toString(); 
      //Firebase mRefChild = mRef.child("message"); 
      //mRefChild.setValue(message); 
      mRef.push().setValue(message); 


     } 
    }); 
} 

Was soll ich im Code erstellen oder ändern (wenn Sie können, für iOS und Android).
Ich habe vor kurzem die Apple Developer Program-Mitgliedschaft erworben und wird wahrscheinlich bald aktiviert werden.

danke für die Helfer.

+0

Worin besteht das eigentliche Problem? – shallowThought

+0

@shallowThought Ich möchte automatisch Benachrichtigungen im Hintergrund senden, wenn eine neue Nachricht in der Datenbank angekommen ist. –

+0

Vielleicht hilfreich: http://StackOverflow.com/Questions/25078953/does-firebase-handle-push-notifications – shallowThought

Antwort

0

Also, nach einer langen Zeit, die ich nach Lösungen gesucht habe, fand ich einen wirklich einfachen Weg, es zu tun, und es ist mit Cloud-Kit. Das ist das Tutorial Brians Advent:

https://youtu.be/BXl5o5_2aEU
Ich schlage vor, Sie zu seinem ersten Video zu gehen: https://youtu.be/XQ3nLV2778U und nur das tun, einige dieser Dinge.

EDIT: 2017

Jetzt können wir Firebase Cloud-Funktionen, um eine Push-Benachrichtigung, wenn die Datenbank-Änderungen verwenden zu senden.

+0

Wie hast du dieses Problem in Android gelöst? – user3467240

+0

Ich habe nicht ... das einzige, was ich habe, ist eine Benachrichtigung, wenn Sie die Aktivität eingeben –

Verwandte Themen