APNS¶
Vapor's Apple Push Notification Service (APNS) API maakt het eenvoudig om te authenticeren en push-notificaties te verzenden naar Apple-apparaten. Het is gebouwd op de top van APNSwift.
Aan De Slag¶
Laten we eens kijken hoe u aan de slag kunt met APNS.
Package¶
De eerste stap om APNS te gebruiken is het toevoegen van het pakket aan uw dependencies.
// swift-tools-version:5.2
import PackageDescription
let package = Package(
name: "my-app",
dependencies: [
// Andere afhankelijkheden...
.package(url: "https://github.com/vapor/apns.git", from: "4.0.0"),
],
targets: [
.target(name: "App", dependencies: [
// Andere afhankelijkheden...
.product(name: "VaporAPNS", package: "apns")
]),
// Andere targets...
]
)
Als u het manifest direct in Xcode bewerkt, zal het automatisch de wijzigingen oppikken en de nieuwe dependency ophalen wanneer het bestand wordt opgeslagen. Anders, voer swift package resolve
uit vanuit Terminal om de nieuwe dependency op te halen.
Configuratie¶
De APNS module voegt een nieuwe eigenschap apns
toe aan Application
. Om push notificaties te versturen, moet je de configuration
eigenschap instellen met je credentials.
import APNS
import VaporAPNS
import APNSCore
// Configureer APNS met JWT-authenticatie.
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
)
Vul de plaatsaanduidingen in met uw referenties. Het bovenstaande voorbeeld toont JWT-gebaseerde auth met behulp van de .p8
sleutel die je krijgt van Apple's ontwikkelaarsportaal. Voor TLS-gebaseerde auth met een certificaat, gebruik de .tls
authenticatie methode:
authenticationMethod: .tls(
privateKeyPath: <#path to private key#>,
pemPath: <#path to pem file#>,
pemPassword: <#optional pem password#>
)
Verzenden¶
Zodra APNS is geconfigureerd, kunt u push notificaties versturen met apns.send
methode op Application
of Request
.
// Aangepaste codeerbare lading
struct Payload: Codable {
let acme1: String
let acme2: Int
}
// Maak een pushmeldingswaarschuwing
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
)
// Verzend de melding
try! await req.apns.client.sendAlertNotification(
alert,
deviceToken: dt,
deadline: .distantFuture
)
Gebruik req.apns
wanneer je in een route handler zit.
// Stuur een push notificatie.
app.get("test-push") { req async throws -> HTTPStatus in
try await req.apns.client.send(...)
return .ok
}
De eerste parameter accepteert de push notificatie melding en de tweede parameter is het doel apparaat token.
Alert¶
APNSAlertNotification
is de eigenlijke metadata van de te verzenden push notification alert. Meer details over de specifieke kenmerken van elke eigenschap worden hier gegeven. Ze volgen een één-op-één naamgeving schema zoals vermeld in Apple's documentatie
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
)
Dit type kan direct worden doorgegeven aan de send
methode en het zal automatisch worden verpakt in een APNSwiftPayload
.
Aangepaste Notification Data¶
Apple biedt ontwikkelaars de mogelijkheid om aangepaste payload data toe te voegen aan elke notificatie. Om dit te vergemakkelijken accepteren we Codable
-conformiteit met de payload-parameter op alle send
-apis.
// Aangepaste codeerbare lading
struct Payload: Codable {
let acme1: String
let acme2: Int
}
More Information¶
Voor meer informatie over beschikbare methodes, zie APNSwift's README.