Robin
Robin is a universal notification interface for iOS that handles both UILocalNotification and UserNotifications behind the scenes.
Requirements
- iOS 8.0+
- Xcode 8.0+
- Swift 3.0+
Communication
- If you need help or have a question, use 'robin' tag on Stack Overflow.
- If you found a bug or have a feature request, please open an issue.
- If you want to contribute, please submit a pull request.
Installation
Robin is available through CocoaPods. To install it, simply add the following line to your Podfile.
pod 'Robin', '~> 0.1'
Usage
import Robin
Before using Robin
, you need to request permission to send notifications to users. The following requests badge
, sound
, and alert
permissions.
Robin.shared.requestAuthorization(forOptions: [.badge, .sound, .alert])
This is equivalent to:
Robin.shared.requestAuthorization()
Notifications
Scheduling iOS notifications via Robin
is carried over by manipulating RobinNotification
objects. To create a RobinNotification
object, simply call its initializer.
init(identifier: String = default, body: String, date: Date = default)
Example notification, with a unique identifier, to be fired an hour from now.
let notification = RobinNotification(body: "A notification", date: Date().next(hours: 1))
next(minutes:)
,next(hours:)
, andnext(days:)
are part of aDate
extension.
The following table summarizes all RobinNotification
properties.
Property | Type | Description |
---|---|---|
badge | NSNumber? |
The number the notification should display on the app icon. |
body | String! |
The body string of the notification. |
date | Date! |
The date in which the notification is set to fire on. |
identifier[1] | String! |
A string assigned to the notification for later access. |
repeats | Repeats |
The repeat interval of the notification. One of none (default), hour , day , week , or month . |
scheduled | Bool |
The status of the notification. read-only |
sound | RobinNotificationSound |
The sound name of the notification. |
title | String? |
The title string of the notification. |
userInfo[2] | [AnyHashable : Any]! |
A dictionary that holds additional information. |
[1] identifier
is read-only after RobinNotification
is initialized.
[2] To add and remove keys in userInfo
, use setUserInfo(value: Any, forKey: AnyHashable)
and removeUserInfoValue(forKey: AnyHashable)
respectively.
Schedule a notification
After creating a RobinNotification
object, it can be scheduled using schedule(notification:)
.
let scheduledNotification = Robin.shared.schedule(notification: notification)
Now scheduledNotification
is a valid RobinNotification
object if it is successfully scheduled or nil
otherwise.
Retrieve a notification
Simply retrieve a scheduled notification by calling notification(withIdentifier: String) -> RobinNotification?
.
let scheduledNotification = Robin.shared.notification(withIdentifier: "identifier")
Cancel a notification
To cancel a notification, either call cancel(notification: RobinNotification)
or cancel(withIdentifier: String)
Robin.shared.cancel(notification: scheduledNotification)
Robin.shared.cancel(notification: scheduledNotification.identifier)
Robin
allows you to cancel all scheduled notifications by calling cancelAll()
Robin.shared.cancelAll()
Notes
Robin
is preset to allow 60 notifications to be scheduled by iOS. The remaining four slots are kept for the app-defined notifications. These free slots are currently not handled by Robin
; if you use Robin
to utilize these slots, the notifications will be discarded. To change the maximum allowed, just update Robin.maximumAllowedNotifications
.
Robin
can handle multiple notifications, having the same identifier, scheduled on iOS versions prior to iOS 10 only. Scheduling multiple notifications with the same identifier on iOS 10+ is not allowed.
Author
Ahmed Abdelbadie, badie.ahmed@icloud.com
License
Robin is available under the MIT license. See the LICENSE file for more info.