[PYTHON] Implementierte iOS-Push-Benachrichtigungen in Firebase

Am Anfang

Als ich versuchte, die Push-Benachrichtigungsfunktion in der iOS-App zu implementieren, hatte ich mehr Probleme als erwartet, daher werde ich zurückblicken.

Erstellen Sie ein Firebase-Projekt

Klicken Sie in der Firebase-Konsole (https://console.firebase.google.com/?hl=de "Firebase-Konsole") auf Projekt hinzufügen, wählen Sie Projektname aus und geben Sie einen neuen Projektnamen ein. Machen.

Registrieren Sie Ihre App bei Firebase

  1. Nachdem Sie Ihr Firebase-Projekt erstellt haben, können Sie Ihrem Projekt iOS-Apps hinzufügen. Gehen Sie in der Firebase-Konsole (https://console.firebase.google.com/?hl=ja "Firebase-Konsole") zur Projektseite und klicken Sie auf das iOS-Symbol in der Mitte, um den Konfigurationsworkflow zu starten. Machen.
  2. Geben Sie die Bundle-ID Ihrer App in das Feld iOS-Bundle-ID ein. Um diese Bundle-ID zu finden, öffnen Sie Ihre App in XCode und wechseln Sie zur Registerkarte Allgemein im Verzeichnis der obersten Ebene. Der Wert im Feld für die Bundle-ID ist die iOS-Bundle-ID (z. B. com.atsushi-uchida.NewsTwit).

Fügen Sie die Firebase-Konfigurationsdatei hinzu

  1. Klicken Sie auf GoogleService-Info.plist herunterladen, um die Firebase iOS-Konfigurationsdatei (GoogleService-Info.plist) abzurufen.
  2. Verschieben Sie die Konfigurationsdatei in das Stammverzeichnis Ihres Xcode-Projekts. Wenn Sie dazu aufgefordert werden, wählen Sie die Option zum Hinzufügen der Konfigurationsdatei zu allen Zielen.

Fügen Sie das Firebase SDK zu Ihrer App hinzu

Wir empfehlen die Verwendung von CocoaPods (https://guides.cocoapods.org/using/getting-started.html#getting-started "CocoaPods"), um die Firebase-Bibliothek zu installieren. -Wenn die Poddatei nicht vorhanden ist, erstellen Sie sie.

$ cd your-project-directory
$ pod init
$ pod 'Firebase/Analytics'

Dadurch werden die Bibliotheken hinzugefügt, die erforderlich sind, um Firebase in Ihrer iOS-App zusammen mit Google Analytics für Firebase zum Laufen zu bringen.

· Installieren Sie den Pod, öffnen Sie die .xcworkspace-Datei und überprüfen Sie das Projekt in Xcode.

$ pod install
$ open your-project.xcworkspace

· Hinweis! !! !! Wenn Sie jemals einen Pod mit CocoaPods installiert haben, aktualisieren Sie ihn in der Installation.

$ pod update

Wenn Sie die Installation ab dem zweiten Mal verwenden, wird aufgrund der Abhängigkeit häufig ein Fehler angezeigt.

Fahren Sie fort, um das Zertifikat auszustellen

Es gibt sieben Dinge zu erstellen und zu behalten, um Push-Benachrichtigungen zu senden.

  1. Erstellen einer CSR-Datei ** * Wenn Sie sie zum ersten Mal erstellen, wird danach dieselbe verwendet, sodass Sie sie nicht erneut erstellen müssen **
  2. Erstellen Sie ein Entwicklungszertifikat (.cer) ** * Wenn Sie es zum ersten Mal erstellen, wird danach dasselbe verwendet, sodass Sie es nicht erneut erstellen müssen **
  3. Erstellen Sie die AppID
  4. Terminalregistrierung
  5. Erstellen eines Bereitstellungsprofils
  6. Erstellen Sie ein Zertifikat (.cer) für APNs
  7. Erstellen eines Zertifikats (.p12) für APNs

1. Erstellen einer CSR-Datei

  1. Öffnen Sie den Schlüsselbundzugriff
  2. Klicken Sie auf Schlüsselbundzugriff> Zertifikatassistent> Zertifikat von Zertifizierungsstelle anfordern
  3. Geben Sie die "E-Mail-Adresse des Benutzers" ein.
  4. (Lassen Sie den "allgemeinen Namen" unverändert und die "CA-E-Mail-Adresse" leer.)
  5. Wählen Sie für "Anforderungsverarbeitung" "Auf Festplatte speichern" und aktivieren Sie "Schlüsselpaarinformationen festlegen".
  6. Klicken Sie auf Weiter
  7. Das Speicherziel wird ausgewählt. Wählen Sie einen beliebigen Ort aus und klicken Sie auf "Speichern".
  8. Überprüfen Sie den Bildschirm "Schlüsselpaarinformationen" und klicken Sie auf "Weiter".
  9. Der Bildschirm "Ergebnis einstellen" wird angezeigt. Klicken Sie auf "Fertig stellen".

2. Erstellen eines Entwicklungszertifikats (.cer)

  1. Melden Sie sich beim Apple Developer Program an (https://developer.apple.com/account/ "Apple Developer Program").
  2. Klicken Sie auf Zertifikate, Kennungen und Profile
  3. Klicken Sie auf "Zertifikate" und dann auf das "+" neben "Zertifikate".
  4. Der Bildschirm "Neues Zertifikat erstellen" wird angezeigt. Legen Sie ihn fest.
  5. Aktivieren Sie "iOS App Development" und klicken Sie oben rechts auf "Continue".
  6. Klicken Sie auf "Datei auswählen", wählen Sie "CSR-Datei erstellen", die in 1. erstellt wurde, und klicken Sie auf "Weiter".
  7. Ein Entwicklerzertifikat wird erstellt. Klicken Sie daher auf "Herunterladen", um es zu exportieren.
  8. Die Erstellung des Entwicklungszertifikats (.cer) ist abgeschlossen

3. Erstellen Sie eine App-ID

    1. Wenn die Arbeit "Erstellen eines Entwicklungszertifikats (.cer)" übersprungen wurde, melden Sie sich beim Apple Developer Program an und klicken Sie auf "Zertifikate, Kennungen und Profile" (* 2. Bild Referenz)
  1. Klicken Sie auf das "+" rechts neben "Bezeichner".
  2. "Neue Kennung registrieren" wird angezeigt. Aktivieren Sie "App-IDs" und klicken Sie oben rechts auf "Weiter".
  3. Geben Sie den Umriss der App unter "Beschreibung" ein. Beispiel) TestPushApp
  4. Wählen Sie unter "Bundle ID" die Option "Explizit" und geben Sie die "Bundle ID" ein. 6 Beachten Sie, dass Push-Benachrichtigungen nicht verfügbar sind, wenn Sie "Platzhalter" auswählen!
  5. Notieren Sie sich die "Bundle ID", wie sie auf der App-Seite festgelegt wird!
  6. Scrollen Sie nach unten und aktivieren Sie "Push-Benachrichtigungen" unter "Funktionen".
  7. Beachten Sie, dass Push-Benachrichtigungen nicht verfügbar sind, wenn Sie dies vergessen!
  8. Klicken Sie auf Weiter
  9. Ein Bestätigungsbildschirm wird angezeigt. Stellen Sie sicher, dass "Push-Benachrichtigungen" aktiviert ist, und klicken Sie auf "Registrieren".
  10. Damit ist die Erstellung der App-ID abgeschlossen

4. Terminalregistrierung

  1. Klicken Sie auf "Geräte" und dann auf das "+" neben "Geräte".
  2. Wählen Sie "Plattform" als "iOS, tvOS, WatchOS".
  3. Geben Sie den Gerätenamen und die Geräte-ID (UDID) des Terminals ein
  4. "Gerätename" kann frei eingestellt werden
  5. "Geräte-ID (UDID)" kann einfach mit Xcode überprüft werden
  6. Schließen Sie Ihr Gerät an Ihren Mac an und starten Sie Xcode
  7. Klicken Sie auf Fenster> Geräte und Simulatoren
  8. Sie können die UDID als "Kennung" überprüfen.
  9. Klicken Sie auf Weiter, wenn Sie fertig sind
  10. Überprüfen Sie die Terminalinformationen auf dem nächsten Bildschirm und klicken Sie auf "Registrieren".
  11. Damit ist die Terminalregistrierung abgeschlossen.

5. Erstellen eines Bereitstellungsprofils

  1. Klicken Sie auf Profile und dann auf das "+" neben Profile
  2. Wählen Sie unter "Entwicklung" die Option "iOS-App-Entwicklung" und klicken Sie auf "Weiter".
  3. Verknüpfen Sie die zu verwendende App-ID, das Entwicklungszertifikat und das Terminal.
    1. Wählen Sie die unter "App-ID erstellen" erstellte App-ID aus und klicken Sie auf "Weiter".
    1. Wählen Sie das unter "Erstellen eines Entwicklungszertifikats (.cer)" erstellte (oder vorhandene) Entwicklungszertifikat aus und klicken Sie auf "Weiter".
    1. Wählen Sie das registrierte (oder vorhandene) Terminal unter "Terminal registrieren" und klicken Sie auf "Weiter".
  4. Geben Sie abschließend den Dateinamen unter "Name des Bereitstellungsprofils" ein. Beispiel) TestPushApp-Bereitstellungsprofile
  5. Bestätigen Sie die Zuordnung und klicken Sie auf "Generieren".
  6. Es wird ein Bereitstellungsprofil erstellt. Klicken Sie daher auf "Herunterladen", um es zu exportieren.
  7. Die Erstellung des Bereitstellungsprofils ist abgeschlossen

6. Erstellen Sie ein Zertifikat (.cer) für APNs

  1. Klicken Sie auf "Zertifikate" und dann auf das "+" neben "Zertifikate".
  2. Scrollen Sie nach unten und aktivieren Sie "Apple Push Notification Service SSL (Sandbox)" unter "Service", anders als beim Erstellen eines Entwicklungszertifikats unter "Erstellen eines Entwicklungszertifikats (.cer)". Einstellen
  3. Klicken Sie auf Weiter
    1. Wählen Sie die unter "App-ID erstellen" erstellte App-ID aus und klicken Sie auf "Weiter".
    1. Wählen Sie unter "CSR-Datei erstellen" die erstellte (oder vorhandene) CSR-Datei aus und klicken Sie auf "Weiter".
  4. Ein Zertifikat (.cer) für APNs wird erstellt. Klicken Sie daher auf "Herunterladen", um es zu exportieren.
  5. Die Erstellung des Zertifikats (.cer) für APNs ist abgeschlossen.

7. Erstellen eines Zertifikats (.p12) für APNs

  1. Doppelklicken Sie auf das unter "Erstellen eines APNs-Zertifikats (.cer)" erstellte "APNs-Zertifikat (.cer)", um den Schlüsselbundzugriff zu öffnen.
  2. Klicken Sie auf die Dreiecksmarkierung links neben dem Zertifikat für APNs (.cer), um es zu öffnen.
  3. Der Schlüssel wird in der Zertifikatdatei (.cer) für APNs festgelegt
  4. Um das Zertifikat für APNs (.p12) zu exportieren, klicken Sie im geöffneten Zustand mit der rechten Maustaste auf das Zertifikat anstelle des Schlüssels und klicken Sie auf "Exportieren ...".
  5. Geben Sie den Dateinamen "Name" und das Speicherziel "Speicherort" an und klicken Sie auf "Speichern".
  6. Sie werden nach einem Passwort gefragt, geben Sie nichts ein und klicken Sie auf OK
  7. Danach kann das System nach einem Passwort fragen. Bitte korrespondieren.
  8. Das Zertifikat für APNs (.p12) wird exportiert
  9. Die Erstellung des Zertifikats für die APNs (.p12) ist abgeschlossen
  10. Sie haben jetzt alle erforderlichen Dateien erstellt

Registrieren Sie das APN-Zertifikat bei Cloud Messaging von Firebase

  1. Wechseln Sie als Nächstes zum Bildschirm mit den Firebase-Einstellungen.
  2. Wählen Sie das Zahnradsymbol oben links auf dem Bildschirm für das Zielprojekt in der Firebase-Konsole aus und wählen Sie die Projekteinstellungen aus.
  3. Wählen Sie im Menü Einstellungen die Option Cloud Messaging.
  4. Scrollen Sie durch den Bildschirm und wählen Sie in den IOS-App-Einstellungen die Option APN-Zertifikat für Entwicklungs-APN-Zertifikat hochladen.
  5. Klicken Sie auf Datei hochladen, wählen Sie das APN-Zertifikat aus, das Sie in 7. Erstellen eines Zertifikats für APNs (.p12) erstellt haben, und wählen Sie Hochladen.
  6. Wenn der Upload hier abgeschlossen ist, sind die Firebase-Einstellungen abgeschlossen.

Stellen Sie die Xcode-Signatur ein

  1. Stellen Sie als nächstes den Xcode ein. Öffnen Sie diesen Bildschirm von Xcode und wählen Sie Signing & Capability.
  2. Deaktivieren Sie zunächst die Option Signatur automatisch verwalten und setzen Sie das Bereitstellungsprofil auf das in 5. "Erstellen eines Bereitstellungsprofils" erstellte Bereitstellungsprofil.
  3. Klicken Sie anschließend auf + Capability, um Push Nortifications zu signieren, und ziehen Sie sie per Drag & Drop.
  4. Ziehen Sie auch den Hintergrundmodus per Drag & Drop.
  5. Überprüfen Sie Remote-Nortifizierungen im Hintergrundmodus. Damit sind die Xcode-Einstellungen abgeschlossen.

Implementierung implementiert, um Benachrichtigungen zuzulassen und Geräte in AppDelegate.swift zu registrieren

Schreiben Sie zum Schluss den Prozess in AppDelegate und beenden Sie den Vorgang. Es gibt 4 Montageorte.

  1. import
  2. didFinishLaunchingWithOptions
  3. In der AppDelegate-Klasse
  4. UNUserNotificationCenterDelegate-Erweiterung
import UIKit
import Firebase
import FirebaseMessaging
import UserNotifications

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
       // Override point for customization after application launch.
       FirebaseApp.configure()
       if #available(iOS 10.0, *) {
           // For iOS 10 display notification (sent via APNS)
           UNUserNotificationCenter.current().delegate = self

           let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
           UNUserNotificationCenter.current().requestAuthorization(
               options: authOptions,
               completionHandler: {_, _ in })
       } else {
           let settings: UIUserNotificationSettings =
               UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
           application.registerUserNotificationSettings(settings)
       }

       application.registerForRemoteNotifications()
       
       return true
   }

   // MARK: UISceneSession Lifecycle

   func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
       // Called when a new scene session is being created.
       // Use this method to select a configuration to create the new scene with.
       return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
   }

   func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
       // Called when the user discards a scene session.
       // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
       // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
   }
   
   func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
       // Print message ID.
       if let messageID = userInfo["gcm.message_id"] {
           print("Message ID: \(messageID)")
       }

       // Print full message.
       print(userInfo)
   }

   func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                    fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
       // Print message ID.
       if let messageID = userInfo["gcm.message_id"] {
           print("Message ID: \(messageID)")
       }

       // Print full message.
       print(userInfo)

       completionHandler(UIBackgroundFetchResult.newData)
   }


}

@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {
   func userNotificationCenter(_ center: UNUserNotificationCenter,
                               willPresent notification: UNNotification,
                               withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
       let userInfo = notification.request.content.userInfo

       if let messageID = userInfo["gcm.message_id"] {
           print("Message ID: \(messageID)")
       }

       print(userInfo)

       completionHandler([])
   }

   func userNotificationCenter(_ center: UNUserNotificationCenter,
                               didReceive response: UNNotificationResponse,
                               withCompletionHandler completionHandler: @escaping () -> Void) {
       let userInfo = response.notification.request.content.userInfo
       if let messageID = userInfo["gcm.message_id"] {
           print("Message ID: \(messageID)")
       }

       print(userInfo)

       completionHandler()
   }
}

Ich denke, Sie können es durch Kopieren tun, also implementieren Sie es bitte so. Die Codeeinstellung ist hier abgeschlossen. Verbinden Sie die App mit dem tatsächlichen Gerät, starten Sie die App, und es wird ein Dialogfeld zum Zulassen von Benachrichtigungen angezeigt. Lassen Sie sie daher im zulässigen Zustand. (Die Benachrichtigung wird nicht ohne Erlaubnis zur Benachrichtigung zugestellt. + Die Remote-Benachrichtigung wird nur zugestellt, wenn es sich um eine tatsächliche Maschine handelt.)

Senden Sie Benachrichtigungen von Cloud Messaging

  1. Sie müssen lediglich eine Benachrichtigung senden! Wählen Sie im linken Menü der Firebase-Konsole Cloud Messaging aus.
  2. Klicken Sie auf Ihre erste Nachricht senden und geben Sie ein, was Sie benachrichtigt werden möchten. (Geeignet und in Ordnung.) Klicken Sie auf Weiter.
  3. Wählen Sie Ihre App unter App auswählen aus und klicken Sie auf Weiter.
  4. Der Zeitplan kann detailliert festgelegt werden, ist aber jetzt in Ordnung. Weiter klicken.
  5. Klicken Sie auf Weiter, ohne etwas für das Konvertierungsereignis festzulegen.
  6. Am Ende können Sie detaillierte Einstellungen vornehmen, z. B. EIN / AUS für den Benachrichtigungston und die Menge des IOS-Stapels (roter Kreis oben rechts in der App). Ich überlasse die Einstellungen Ihnen. Wenn es kein Problem gibt, klicken Sie auf Bestätigen.
  7. Klicken Sie abschließend auf Veröffentlichen. Die Benachrichtigung wird gesendet und an den tatsächlichen Computer gesendet.
  8. Damit sind die Einstellungen und Benachrichtigungen abgeschlossen.

Wenn Push-Benachrichtigungen nicht korrekt übermittelt werden

  1. Die Reihenfolge der Dokumenterstellung ist falsch
  2. Bearbeiten Sie das unterwegs erstellte Dokument
  3. Es wurden mehrere Entwicklungszertifikate erstellt
  4. Es wurden mehrere CSR-Dateien erstellt
  5. Ich habe vergessen, beim Erstellen der App-ID "Push-Benachrichtigungen" zu aktivieren
  6. Überprüfen Sie, ob die App auf dem tatsächlichen Gerät geöffnet ist (sie kommt nicht an, wenn die App geöffnet ist).
  7. Möglicherweise können Sie Benachrichtigungen nicht ordnungsgemäß zulassen. Löschen Sie die App und installieren Sie sie erneut.
  8. Überprüfen Sie Info.plist auf seltsame Einstellungen. (Einige Artikel sagen, dass es in Info.plist eingestellt werden muss, aber es ist nicht notwendig.)

Push-Benachrichtigungen mit dem Firebase Admin SDK

Ich habe versucht, mithilfe von Firebase Cloud Messaging (FCM) eine Push-Benachrichtigung vom Server auf das Smartphone zu übertragen. Ich werde schreiben, wie Push-Benachrichtigungen vom Server über Firebase gesendet werden.

Installieren Sie das Firebase Admin SDK

$ pip install firebase-admin

Um das Dienstkonto zu authentifizieren und den Zugriff auf den Firebase-Dienst zu autorisieren, muss die private Schlüsseldatei im JSON-Format generiert werden.

Rufen Sie die Schlüsseldatei für die Firebase-Verbindung von der Firebase-Konsole ab

  1. Drücken Sie auf die Zahnradmarkierung oben links in der Firebase-Konsole (https://console.firebase.google.com/?hl=ja "Firebase-Konsole"), um den Projekteinstellungsbildschirm zu öffnen.
  2. Klicken Sie in diesem Bildschirm auf die Registerkarte "Dienstkonto".
  3. Klicken Sie auf die Schaltfläche "Neuen privaten Schlüssel generieren", um die private Schlüsseldatei herunterzuladen.
  4. Speichern Sie die JSON-Datei mit dem Schlüssel sicher.

Push-Benachrichtigung an ein bestimmtes Smartphone

Senden Sie eine Push-Benachrichtigung an ein bestimmtes Smartphone (YOUR_REGISTRATION_TOKEN). Der Code ist unten. path / to / serviceAccountKey.json gibt die heruntergeladene private Schlüsseldatei an.

import firebase_admin
from firebase_admin import credentials
from firebase_admin import messaging

cred = credentials.Certificate("path/to/serviceAccountKey.json")
firebase_admin.initialize_app(cred)

# This registration token comes from the client FCM SDKs.
registration_token = 'YOUR_REGISTRATION_TOKEN'

# See documentation on defining a message payload.
message = messaging.Message(
    notification=messaging.Notification(
        title='test server',
        body='test server message',
    ),
    token=registration_token,
)

# Send a message to the device corresponding to the provided
# registration token.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)

Push-Benachrichtigung an Smartphones, die am Thema teilnehmen

Dies ist eine Methode, um Benachrichtigungen an mehrere Smartphones zu senden, die an einem bestimmten Thema teilnehmen. Wenn Sie beispielsweise Benachrichtigungen an Smartphones senden, die am Thema "Wetter" teilnehmen, ändern Sie den Teil der Nachrichtenzusammensetzung wie folgt. Ändern Sie einfach den Token-Teil in Thema.

message = messaging.Message(
    notification=messaging.Notification(
        title='test server',
        body='test server message',
    ),
    topic='weather',
)

Das Beitreten zu einem Thema auf ios kann mit dem folgenden Code in AppDelegate.swift erreicht werden.

Messaging.messaging().subscribe(toTopic: "weather") { error in
    print("Subscribed to weather topic")
}

Erweiterte Version Fügen Sie die Nummer (Ausweisanzeige) oben rechts im Symbol hinzu

Bisher wurden nur der Titel und die Nachricht verwendet, aber ich möchte die Ausweisverarbeitung hinzufügen (die Nummer oben rechts im Symbol). Sie können dies mit Code wie folgt tun:

import firebase_admin
from firebase_admin import credentials
from firebase_admin import messaging

cred = credentials.Certificate("path/to/serviceAccountKey.json")
firebase_admin.initialize_app(cred)

notification = messaging.Notification(
    title='test server',
    body='test server message',
)
topic='weather'

apns = messaging.APNSConfig(
   payload = messaging.APNSPayload(
       aps = messaging.Aps(badge = 1) #Dies ist der Teil, der für die Hintergrundbenachrichtigung erforderlich ist
   )
)

message = messaging.Message(
    notification=notification,
    apns=apns,
    topic=topic,
)

response = messaging.send(message)
print('Successfully sent message:', response)

Am Ende

Rückblickend ist es eine beträchtliche Anzahl von Zeichen geworden. Ist das so schwer Vielen Dank für das Lesen des Langtextes. Das Folgende ist der Link, auf den ich verwiesen habe.

  1. Fügen Sie Firebase zu Ihrem iOS-Projekt hinzu (https://firebase.google.com/docs/ios/setup?hl=de "Firebase zu Ihrem iOS-Projekt hinzufügen")
  2. [Swift5] Implementieren einer Remote-Push-Benachrichtigung
  3. So erstellen Sie ein Zertifikat für die Push-Benachrichtigung 2020
  4. Push-Benachrichtigung mit Firebase Admin SDK

Recommended Posts

Implementierte iOS-Push-Benachrichtigungen in Firebase
Senden Sie Push-Benachrichtigungen mit Python an iOS-Apps
Senden Sie Push-Benachrichtigungen von iOS-Apps über Firebase Cloud Messaging
Shiritori in Python implementiert
Senden Sie Push-Benachrichtigungen mit Python2 an iOS-Apps (mit Beispielcode).
Spielen Sie mit Push-Benachrichtigungen mit imap4lib
Implementierte Supreme Solver in Python 3