RingCentral Swift Client
RingCentral Developers is a cloud communications platform which can be accessed via more than 70 APIs. The platform's main capabilities include technologies that enable: Voice, SMS/MMS, Fax, Glip Team Messaging, Data and Configurations.
API Reference and APIs Explorer.
Latest update
Master branch is not up to date and it doesn't work with latest Swift language.
For a working version please check the dev branch of this project.
Requirements
- iOS 9.0+ / macOS 10.11+ / tvOS 9.0+ / watchOS 2.0+
- Xcode 8.0+
- Swift 3.0+
Version requirements
For Swift 3.1 or earlier, use version 0.5.0.
For Swift 4 or later, use the latest version.
Installation
The recommended way to install this framework is via Carthage.
Add the following to your Cartfile:
github "ringcentral/ringcentral-swift"
Denpending on your target platform, run one of the following:
carthage update --platform macOS
carthage update --platform iOS
carthage update --platform tvOS
carthage update --platform watchOS
Built libraries will be available in ./Carthage/Build/
.
URL Builder
Given any API endpoint, taking /restapi/v1.0/account/~/extension/~/call-log
for example.
You can build its url with code easily:
let restapiVersion = "v1.0"
let accountID = "~"
let extensionId = "~"
URL Builder helps you to build your URL with ease
rc.restapi(restapiVersion).account(accountID).extension(extensionId).callLog()
Please NEVER do string concatenation like below
"/restapi" + restapiVersion + "/account/" + accountID + "/extension/" + extensionId + "/call-log"
Default Value
Default value for restapi
is "v1.0"; default value for account
and extension
are both "~".
If you don't specify an explicit value, default value is used.
So the following two lines are equivalent:
rc.restapi().account().extension()
rc.restapi("v1.0").account("~").extension("~")
Authorization
let rc = RestClient(appKey: "", appSecret: "", production: false)
rc.authorize("username", ext: "", password: "password") { token, error in
if error == nil {
print("Authorized!")
}
}
Token Refresh
By default, there is a background timer calling rc.refresh()
periodically, so the authorization never expires.
But if you would like to call refresh manually: rc.autoRefreshToken = false
Token Revoke
When you no longer need the token, don't forget to revoke it: rc.revoke()
.
Sample for list, get, post, put and delete
list
// /restapi/v1.0/account/~/extension/~/address-book
let addressBook = rc.restapi("v1.0").account("~").extension("~").addressBook()
addressBook.contact().list() { list, error in
print(list!.paging!.page) // 1
}
post
addressBook.contact().post(parameters: [ "firstName": "Tyler", "lastName": "Long", "homePhone": phoneNumber ]) { contact, error in
print(contact!.lastName) // Long
}
get
addressBook.contact("\(contact.id!)").get(){ contact, error in
print(contact.lastName) // Long
}
put
contact.lastName = "Liu"
addressBook.contact("\(contact.id!)").put(parameters: contact.toParameters()) { contact2, error in
print(contact2.lastName) // Liu
}
delete
addressBook.contact("\(item.id!)").delete() { error in
print(error == nil) // true
}
Send SMS
let parameters = SmsPath.PostParameters(
from: CallerInfo(phoneNumber: "123456789"),
to: [CallerInfo(phoneNumber: "123456789")],
text: "hello world"
)
rc.restapi().account().extension().sms().post(parameters: parameters) { messageInfo, error in
if error == nil {
print("SMS sent!")
}
}
PubNub Subscription
let subscription = rc.restapi().subscription().new()
subscription.eventFilters.append("/restapi/v1.0/account/~/extension/~/message-store")
subscription.listeners.append { notification in
print(notification.json!)
let messageEvent = MessageEvent(JSONString: notification.json!)!
print(messageEvent.body!.extensionId!)
}
Remove Subscription
When you no longer need a subscription, don't forget to remove it:
subscription.remove()
Send fax
let parameters = FaxPath.PostParameters(to: [CallerInfo(phoneNumber: "1234567890")])
var attachments: [Attachment] = []
attachments.append(Attachment(fileName: "test.pdf", contentType: "application/pdf", data: pdfData))
rc.restapi().account().extension().fax().post(parameters: parameters, attachments: attachments) { messageInfo, error in
if error == nil {
print("fax sent")
}
}
Upload binary file
rc.restapi().account().extension().profileImage().put(imageData: imageData, imageFileName: "test.png") { error in
if error == nil {
print("Profile image updated")
}
}
More sample code
The test cases contain lots of sample code.
License
This project is released under the MIT license.