Pusher Beams Swift Server SDK

Build Status Latest Release API Docs Supported Platforms Swift Versions Twitter LICENSE

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.

// swift-tools-version:4.0
import PackageDescription

let package = Package(
    name: "YourProjectName",
    dependencies: [
        ...
        .package(url: "git@github.com:pusher/push-notifications-server-swift.git", from: "1.0.3",
    ],
    targets: [
      .target(name: "YourProjectName", dependencies: ["PushNotifications", ... ])
    ]
)

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 1. 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): - `.value(let anObject):` becomes `.success(let anObject):` - `.error(let anObject):` becomes `.failure(let anObject):` 1. Errors returned by the SDK in a `Result` are now specifically instances of `PushNotificationsError` rather than just `Error`. 1. `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. 1. 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.

Reporting bugs and requesting features

  • Found a bug? Please open an issue.
  • Have a feature request. Please open an issue.
  • If you want to contribute, please submit a pull request (preferably with some tests).

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).