APNS¶
Il servizio di notifiche push di Apple (APNS) consente di inviare notifiche push a dispositivi iOS, macOS, tvOS e watchOS. Questo pacchetto fornisce un client per inviare notifiche push ad APNS da Vapor. È basato su APNSwift.
Inizio¶
Vediamo come iniziare ad usare APNS.
Pacchetto¶
Il primo passo per usare APNS è aggiungere il pacchetto alle dipendenze.
// swift-tools-version:5.8
import PackageDescription
let package = Package(
name: "my-app",
dependencies: [
// Altre dipendenze...
.package(url: "https://github.com/vapor/apns.git", from: "4.0.0"),
],
targets: [
.target(name: "App", dependencies: [
// Altre dipendenze...
.product(name: "VaporAPNS", package: "apns")
]),
// Altri target...
]
)
Se il manifesto viene modificato direttamente in Xcode, esso rileverà automaticamente le modifiche e scaricherà la nuova dipendenza quando il file viene salvato. Altrimenti, da Terminale, basta eseguire swift package resolve
per scaricare la nuova dipendenza.
Configurazione¶
Il modulo APNS aggiunge una nuova proprietà apns
ad Application
. Per inviare notifiche push, è necessario impostare le proprie credenziali sulla proprietà configuration
.
import APNS
import VaporAPNS
import APNSCore
// Configurazione di APNS utilizzando l'autenticazione tramite JWT.
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
)
I segnaposto dell'esempio devono essere sostituiti con le credenziali.
Questo esempio utilizza l'autenticazione JWT con la chiave .p8
, ottenibile dal portale per sviluppatori di Apple. Per l'autenticazione TLS, si può utilizzare il metodo di autenticazione .tls
:
authenticationMethod: .tls(
privateKeyPath: <#path to private key#>,
pemPath: <#path to pem file#>,
pemPassword: <#optional pem password#>
)
Invio¶
Una volta configurato APNS, è possibile inviare notifiche push tramite il metodo apns.send
presente su Application
e Request
.
// Payload Codable personalizzato
struct Payload: Codable {
let acme1: String
let acme2: String
}
// Creazione di un Alert per la notifica push
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
)
Dall'interno di un route handler si può utilizzare req.apns
.
// Invia una notifica push.
app.get("test-push") { req async throws -> HTTPStatus in
try await req.apns.client.send(...)
return .ok
}
Il primo parametro contiene la notifica push mentre il secondo parametro contiene il token del dispositivo a cui inviare la notifica push.
Alert¶
APNSAlertNotification
rappresenta i metadati della notifica push da inviare. Qui ci sono informazioni più specifiche su ogni proprietà; i nomi delle proprietà seguono lo schema di denominazione uno-a-uno elencato nella documentazione di 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
)
Questo tipo può essere passato come parametro al metodo send
.
Dati di notifica personalizzati¶
Apple consente di inviare dati personalizzati in ogni notifica. Per renderlo semplice in APNS basta che i dati da inviare conformino a Codable
:
struct Payload: Codable {
let acme1: String
let acme2: String
}
Altre informazioni¶
Per ulteriori informazioni su come utilizzare APNS, vedere il README di APNSwift.