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: "3.0.0"),
],
targets: [
.target(name: "App", dependencies: [
// Andere afhankelijkheden...
.product(name: "APNS", 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
// Configureer APNS met JWT-authenticatie.
app.apns.configuration = try .init(
authenticationMethod: .jwt(
key: .private(filePath: <#path to .p8#>),
keyIdentifier: "<#key identifier#>",
teamIdentifier: "<#team identifier#>"
),
topic: "<#topic#>",
environment: .sandbox
)
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
.
// Stuur een push notificatie.
try app.apns.send(
.init(title: "Hello", subtitle: "This is a test from vapor/apns"),
to: "98AAD4A2398DDC58595F02FA307DF9A15C18B6111D1B806949549085A8E6A55D"
).wait()
// Of
try await app.apns.send(
.init(title: "Hello", subtitle: "This is a test from vapor/apns"),
to: "98AAD4A2398DDC58595F02FA307DF9A15C18B6111D1B806949549085A8E6A55D"
)
Gebruik req.apns
wanneer je in een route handler zit.
// Stuur een push notificatie.
app.get("test-push") { req -> EventLoopFuture<HTTPStatus> in
req.apns.send(..., to: ...)
.map { .ok }
}
// Of
app.get("test-push") { req async throws -> HTTPStatus in
try await req.apns.send(..., to: ...)
return .ok
}
De eerste parameter accepteert de push notificatie melding en de tweede parameter is het doel apparaat token.
Alert¶
APNSwiftAlert
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 = APNSwiftAlert(
title: "Hey There",
subtitle: "Full moon sighting",
body: "There was a full moon last night did you see it"
)
Dit type kan direct worden doorgegeven aan de send
methode en het zal automatisch worden verpakt in een APNSwiftPayload
.
Payload¶
APNSwiftPayload
is de metadata van de push notificatie. Dingen zoals de waarschuwing, badge count. 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 = ...
let aps = APNSwiftPayload(alert: alert, badge: 1, sound: .normal("cow.wav"))
Dit kan worden doorgegeven aan de send
methode.
Aangepaste Notification Data¶
Apple biedt ontwikkelaars de mogelijkheid om aangepaste payload data toe te voegen aan elke notificatie. Om dit mogelijk te maken hebben we de APNSwiftNotification
.
struct AcmeNotification: APNSwiftNotification {
let acme2: [String]
let aps: APNSwiftPayload
init(acme2: [String], aps: APNSwiftPayload) {
self.acme2 = acme2
self.aps = aps
}
}
let aps: APNSwiftPayload = ...
let notification = AcmeNotification(acme2: ["bang", "whiz"], aps: aps)
Dit aangepaste notificatie type kan worden doorgegeven aan de send
methode.
More Information¶
Voor meer informatie over beschikbare methodes, zie APNSwift's README.