CocoaPods trunk is moving to be read-only. Read more on the blog, there are 18 months to go.

Pyrobase 1.1

Pyrobase 1.1

TestsTested
LangLanguage SwiftSwift
License MIT
ReleasedLast Release Nov 2017
SwiftSwift Version 4.0
SPMSupports SPM

Maintained by Mounir Ybanez.



  • By
  • Mounir Ybanez

Pyrobase

An iOS lightweight wrapper for Firebase REST API. For more Firebase’s details, see it here. It is written in Swift and has 100% code coverage.

Usage

Authentication

Make sure to copy PyroAuthInfo.plist. And keep in mind the bundle identifier where the said file is added.

Initialization

let apiKey = "yourFirebaseAPIKey"
let bundleIdentifier = "com.my.app"
let auth = PyroAuth.create(key: apiKey, bundleIdentifier: bundleIdentifier)
// The variable 'auth' is nil if you provide an invalid bundle identifier.
// Otherwise, you are good to go.
// NOTE: If you build this project as framework, you can opt out
//       providing the bundle identifier. The default value
//       is the project's bundle identifier

Sign In

auth.signIn(email: email, password: password) { result in
    switch result {
    case .failed(let error):
        print(error)
        // Do some stuff
            
    case .succeeded(let data):
        print(data)
        // Do some stuff
        // 'data' is PyroAuthContent
    }
}

Register

auth.register(email: email, password: password) { result in
    switch result {
    case .failed(let error):
        print(error)
        // Do some stuff
            
    case .succeeded(let data):
        print(data)
        // Do some stuff
        // 'data' is PyroAuthContent
    }
}

Refresh Token

auth.refresh(token: "refreshToken") { result in
    switch result {
    case .failed(let error):
        print(error)
        // Do some stuff
            
    case .succeeded(let data):
        print(data)
        // Do some stuff
        // 'data' is PyroAuthTokenContent
    }
}

Send Password Reset

auth.sendPasswordReset(email: "[email protected]") { result in
    switch result {
    case .failed(let error):
        print(error)
        // Do some stuff
            
    case .succeeded(let data):
        print(data)
        // Do some stuff
        // 'data' is Bool
    }
}

REST

Initialization

let baseURL = "https://foo.firebaseio.com"
let accessToken = "accessToken"
let pyrobase = Pyrobase.create(baseURL: baseURL, accessToken: accessToken)

GET Request

pyrobase.get(path: "users/abcde12345wert", query: [:]) { result in
    switch result {
    case .failed(let error):
        print(error)
        // Do some stuff
            
    case .succeeded(let data):
        print(data)
        // Do some stuff
    }
}

POST Request

pyrobase.post(path: "messages", value: ["message": "hello world", "user_id": "abcde12345qwert"]) { result in
    switch result {
    case .failed(let error):
        print(error)
        // Do some stuff
            
    case .succeeded(let data):
        print(data)
        // Do some stuff
    }
}

PUT Request

pyrobase.put(path: "users/abcde12345wert", value: ["first_name": "Juan", "last_name": "Dela Cruz"]) { result in
    switch result {
    case .failed(let error):
        print(error)
        // Do some stuff
            
    case .succeeded(let data):
        print(data)
        // Do some stuff
    }
}

PATCH Request

pyrobase.patch(path: "users/abcde12345wert", value: ["first_name": "Jose"]) { result in
    switch result {
    case .failed(let error):
        print(error)
        // Do some stuff
            
    case .succeeded(let data):
        print(data)
        // Do some stuff
    }
}

Transaction

Initialization

let baseURL = "https://foo.firebaseio.com"
let accessToken = "accessToken"
let transaction = PyroTransaction.create(baseURL: baseURL, accessToken: accessToken)

Run

transaction.run(
    parentPath: "posts/yuiop98765nbcwe",
    childKey: "likes_count", 
    mutator: { data in
        let likesCount = data as! Int
        return likesCount + 1
}) { result in
    switch result {
    case .failed(let error):
        print(error)
        // Do some stuff
            
    case .succeeded(let data):
        print(data)
        // Do some stuff
    }
}

Event Source

Callback

class StreamCallback: PyroEventSourceCallback {

    func pyroEventSource(_ eventSource: PyroEventSource, didReceiveError error: Error) {
        // Do some stuff
    }
    
     func pyroEventSource(_ eventSource: PyroEventSource, didReceiveMessage message: PyroEventSourceMessage) {
        // Do some stuff
    }

    func pyroEventSourceOnOpen(_ eventSource: PyroEventSource) {
        // Do some stuff
    }
    
    func pyroEventSourceOnClosed(_ eventSource: PyroEventSource) {
        // Do some stuff
    }
    
    func pyroEventSourceOnConnecting(_ eventSource: PyroEventSource) {
        // Do some stuff
    }
}

Initialization

let callback = StreamCallback()
let baseURL = "https://foo.firebaseio.com"
let accessToken = "accessToken"
let eventSource = PyroEventSource.create(baseURL: baseURL, accessToken: accessToken)
eventSource.callback = callback

Stream

eventSource.stream("chat/rooms/hdjye53910kwdop")

Close

eventSource.close()

Query Parameters

Always keep in mind of adding .indexOn in your rules for the path you want to query. You may receive a badRequest error if you don’t set it.

let query = ["orderBy": "\"$key\"", "limitToFirst": 1]
pyrobase.get("posts", query: query) { result in
   switch result {
    case .failed(let error):
        print(error)
        // Do some stuff
            
    case .succeeded(let data):
        print(data)
        // Do some stuff
    }
}

License

MIT License