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.
Worin besteht das eigentliche Problem? – shallowThought
@shallowThought Ich möchte automatisch Benachrichtigungen im Hintergrund senden, wenn eine neue Nachricht in der Datenbank angekommen ist. –
Vielleicht hilfreich: http://StackOverflow.com/Questions/25078953/does-firebase-handle-push-notifications – shallowThought