The 2.0 release contains several improvements, however there are a few breaking API changes if you are upgrading from a 1.x release:
Migration notes
The SDK replaces its own Result implementation the Result type included in Swift 5.0. The API changes subtly when inspecting the result value (e.g. when using a switch statement):
Errors returned by the SDK in a Result are now specifically instances of PushNotificationsError rather than just Error.
PushNotificationsError has some changes:
New error cases have been added covering the error conditions that were previously reported using the .error(String) (which has been removed). Testing against SDK errors in your own server app is now straightforward and more robust as no String equality checks are required.
It now conforms to LocalizedError. A human-readable description of an error can be accessed using the localizedDescription property on the error.
The publish(_:_:completion:) method has been removed (this was deprecated in a previous release). The publishToInterests(_:_:completion:) method can be used instead.
Code examples
// Pusher Beams Instance Id.
let instanceId = "c7c52433-8c65-43e6-9ef2-922d9ed9e196"
// Pusher Beams Secret Key.
let secretKey = "39817C9BCBF7F053CB151343D54EE75"
// PushNotifications instance.
let pushNotifications = PushNotifications(instanceId: instanceId, secretKey: secretKey)
// Interests array.
let interests = ["pizza", "donuts"]
// Publish request: APNs, FCM.
let publishRequest = [
"apns": [
"aps": [
"alert": "Hello"
]
],
"fcm": [
"notification": [
"title": "Hello",
"body": "Hello, world",
]
]
]
// Publish To Interests
pushNotifications.publishToInterests(interests, publishRequest, completion: { result in
switch result {
case .success(let publishId):
print("\(publishId)")
case .failure(let error):
print("\(error)")
}
})
// Publish To Users
pushNotifications.publishToUsers(["jonathan", "jordan", "luís", "luka", "mina"], publishRequest, completion: { result in
switch result {
case .success(let publishId):
print("\(publishId)")
case .failure(let error):
print("\(error)")
}
})
// Authenticate User
pushNotifications.generateToken("Elmo", completion: { result in
switch result {
case .success(let jwtToken):
// 'jwtToken' is a Dictionary<String, String>
// Example: ["token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhYWEiLCJleHAiOjE"]
print("\(jwtToken)")
case .failure(let error):
print("\(error)")
}
})
// Delete User
pushNotifications.deleteUser("Elmo", completion: { result in
switch result {
case .success:
print("User deleted 👌")
case .failure(let error):
print("\(error)")
}
})
Documentation
Full documentation of the library can be found in the API docs.
Pusher Beams Swift Server SDK
Building the project
swift build
Running the tests
swift test
Installation
To include PushNotifications in your package, add the following to your Package.swift file.
Use
import PushNotifications
to access the APIs.Usage
Migrating from 1.x to 2.x
The 2.0 release contains several improvements, however there are a few breaking API changes if you are upgrading from a 1.x release:
Migration notes
Result
implementation theResult
type included in Swift 5.0. The API changes subtly when inspecting the result value (e.g. when using aswitch
statement):.value(let anObject):
becomes.success(let anObject):
.error(let anObject):
becomes.failure(let anObject):
Result
are now specifically instances ofPushNotificationsError
rather than justError
.PushNotificationsError
has some changes:.error(String)
(which has been removed). Testing against SDK errors in your own server app is now straightforward and more robust as noString
equality checks are required.LocalizedError
. A human-readable description of an error can be accessed using thelocalizedDescription
property on the error.publish(_:_:completion:)
method has been removed (this was deprecated in a previous release). ThepublishToInterests(_:_:completion:)
method can be used instead.Code examples
Documentation
Full documentation of the library can be found in the API docs.
Reporting bugs and requesting features
Credits
Beams is owned and maintained by Pusher.
It uses code from the following third-party repositories:
License
This project is released under the MIT license. See LICENSE for details if you want to use it in your own project(s).