Je me demande s'il est possible de créer un mécanisme de type chat (histoire du serveur) avec une application que je développe personnellement et de fournir des notifications push aux utilisateurs et sujets spécifiques lorsque des données sont ajoutées à la base de données Firebase. Je l'ai essayé.
L'histoire originale est Envoyer des notifications push du client iOS dans Firebase.
Je l'ai fait en Python car Node.js ne peut pas (déployer l'implémentation).
--Python 3.5.2 (j'ai oublié de mettre 3.6)
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let settings = UIUserNotificationSettings(types: [.alert, .badge, .sound],
categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
//Enregistrement APNS
#if DEBUG
FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: .sandbox)
#else
FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: .prod)
#endif
}
func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) {
//Inscrivez-vous à un sujet
FIRMessaging.messaging().subscribe(toTopic: "/topics/news")
}
Faites une hoge pour les notifications push ultérieures!
Hoge.swift
class Hoge: NSObject {
class func create() {
let ref = FIRDatabase.database().reference()
let data: [String : String] = ["title": "Titre", "body": "Texte"]
ref("message").childByAutoId().setValue(data, withCompletionBlock: { (error, reference) in
if error != nil {
print("Success")
} else {
print("Failure")
}
}
}
}
LE divers, mais c'est comme ça
requirements.txt
docutils==0.13.1
gcloud==0.17.0
googleapis-common-protos==1.5.0
httplib2==0.9.2
jws==0.1.3
lockfile==0.12.2
oauth2client==3.0.0
protobuf==3.2.0rc1
pyasn1==0.1.9
pyasn1-modules==0.0.8
pycryptodome==3.4.3
Pyrebase==3.0.27
python-daemon==2.1.2
python-jwt==2.0.1
requests==2.11.1
requests-toolbelt==0.7.0
rsa==3.4.2
six==1.10.0
app.py
import daemon
import json
import pyrebase
import requests
config = {
# GoogleService-info.API plist_KEY
"apiKey": "API_KEY",
"authDomain": "PROJECT_NAME",
"databaseURL": "https://PROJECT_NAME.firebaseio.com/",
#Peut ne pas être nécessaire
"storageBucket": "gs://PROJECT_NAME.appspot.com"
}
fcm_header = {
'Content-type': 'application/json; charset=UTF-8',
#Voir l'image ci-dessous ce code!
'Authorization': 'key=API_KEY'
}
firebase = pyrebase.initialize_app(config)
def stream_handler(message):
if message['data'] == None:
return
if message['path'] == '/':
return
if 'title' in message['data']:
title = message['data']['title']
else:
title = 'Livraison'
if 'body' in message['data']:
body = message['data']['body']
else:
body = ''
payload = {'to': '/topics/news',
'priority': 'high',
'notification': {
'title': title,
'body': body,
'badge': 1,
'sound': 'default'
}
}
r = requests.post('https://fcm.googleapis.com/fcm/send', headers = fcm_header, data = json.dumps(payload))
print(r.json())
if __name__ == '__main__':
db = firebase.database()
dc = daemon.DaemonContext()
with dc:
stream = db.child("message").stream(stream_handler)
(Veuillez protéger votre vie privée !!)
J'ai utilisé «Pyrebase» et «python-daemon» pour le paquet Python.
$ pip install pyrebase python-daemon
Je vais regarder le répertoire / message
de la base de données Firebase.
if message['data'] == None:
return
if message['path'] == '/':
return
Il s'agit d'une gestion d'exception car une erreur s'est produite (?) Lorsqu'il n'y avait aucune donnée dans / message
. Même si une notification push est envoyée lorsque le code de surveillance est lancé, la notification arrive du côté iOS, mais l'alerte n'est pas affichée! Je l'ai mis parce qu'il y avait quelque chose comme ça.
Tout ce que vous avez à faire est d'exécuter le script côté serveur.
Au fait, utiliser python-daemon
fera du script un démon! Merci beaucoup!
$ python app.py
Recommended Posts