Przejdź do treści

APNS#

API Vapor dla Apple Push Notification Service (APNS) ułatwia uwierzytelnianie i wysyłanie powiadomień push do urządzeń Apple. Jest zbudowane na bazie APNSwift.

Pierwsze kroki#

Zobaczmy, jak zacząć korzystać z APNS.

Pakiet#

Pierwszym krokiem do korzystania z APNS jest dodanie pakietu do zależności.

// swift-tools-version:5.8
import PackageDescription

let package = Package(
    name: "my-app",
    dependencies: [
         // Other dependencies...
        .package(url: "https://github.com/vapor/apns.git", from: "4.0.0"),
    ],
    targets: [
        .target(name: "App", dependencies: [
            // Other dependencies...
            .product(name: "VaporAPNS", package: "apns")
        ]),
        // Other targets...
    ]
)

Jeśli edytujesz manifest bezpośrednio w Xcode, automatycznie wykryje on zmiany i pobierze nową zależność po zapisaniu pliku. W przeciwnym razie, z poziomu terminala, uruchom swift package resolve, aby pobrać nową zależność.

Konfiguracja#

Moduł APNS dodaje nową właściwość apns do Application. Aby wysyłać powiadomienia push, musisz ustawić właściwość configuration z Twoimi danymi uwierzytelniającymi.

import APNS
import VaporAPNS
import APNSCore

// Configure APNS using JWT authentication.
let apnsConfig = APNSClientConfiguration(
    authenticationMethod: .jwt(
        privateKey: try .loadFrom(string: "<#key.p8 content#>"),
        keyIdentifier: "<#key identifier#>",
        teamIdentifier: "<#team identifier#>"
    ),
    environment: .development
)
app.apns.containers.use(
    apnsConfig,
    eventLoopGroupProvider: .shared(app.eventLoopGroup),
    responseDecoder: JSONDecoder(),
    requestEncoder: JSONEncoder(),
    as: .default
)

Uzupełnij pola zastępcze swoimi danymi uwierzytelniającymi. Powyższy przykład pokazuje uwierzytelnianie oparte na JWT przy użyciu klucza .p8 uzyskanego z portalu deweloperskiego Apple. Do uwierzytelniania opartego na TLS za pomocą certyfikatu, użyj metody uwierzytelniania .tls:

authenticationMethod: .tls(
    privateKeyPath: <#path to private key#>,
    pemPath: <#path to pem file#>,
    pemPassword: <#optional pem password#>
)

Wysyłanie#

Gdy APNS jest już skonfigurowany, możesz wysyłać powiadomienia push za pomocą metody apns.send na Application lub Request.

// Custom Codable Payload
struct Payload: Codable {
    let acme1: String
    let acme2: Int
}
// Create push notification Alert
let dt = "70075697aa918ebddd64efb165f5b9cb92ce095f1c4c76d995b384c623a258bb"
let payload = Payload(acme1: "hey", acme2: 2)
let alert = APNSAlertNotification(
    alert: .init(
        title: .raw("Hello"),
        subtitle: .raw("This is a test from vapor/apns")
    ),
    expiration: .immediately,
    priority: .immediately,
    topic: "<#my topic#>",
    payload: payload
)
// Send the notification
try! await req.apns.client.sendAlertNotification(
    alert, 
    deviceToken: dt, 
    deadline: .distantFuture
)

Używaj req.apns zawsze, gdy znajdujesz się wewnątrz handlera trasy.

// Sends a push notification.
app.get("test-push") { req async throws -> HTTPStatus in
    try await req.apns.client.send(...)
    return .ok
}

Pierwszy parametr przyjmuje powiadomienie push (alert), a drugi parametr to token docelowego urządzenia.

Alert#

APNSAlertNotification to właściwe metadane powiadomienia push, które ma zostać wysłane. Więcej szczegółów na temat poszczególnych właściwości znajduje się tutaj. Stosują one schemat nazewnictwa jeden do jednego wymieniony w dokumentacji Apple.

let alert = APNSAlertNotification(
    alert: .init(
        title: .raw("Hello"),
        subtitle: .raw("This is a test from vapor/apns")
    ),
    expiration: .immediately,
    priority: .immediately,
    topic: "<#my topic#>",
    payload: payload
)

Ten typ można przekazać bezpośrednio do metody send.

Niestandardowe dane powiadomienia#

Apple umożliwia programistom dodawanie niestandardowych danych ładunku (payload) do każdego powiadomienia. Aby to ułatwić, akceptujemy zgodność z Codable dla parametru payload we wszystkich API send.

// Custom Codable Payload
struct Payload: Codable {
    let acme1: String
    let acme2: Int
}

Więcej informacji#

Aby uzyskać więcej informacji na temat dostępnych metod, zobacz README APNSwift.

Edytuj tę stronę