Skip to content
Use GraphQL Subscriptions on iOS 👌
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Example
LiveGQL.xcodeproj Feature/migrate to socketrocket (#8) Jan 1, 2018
LiveGQL.xcworkspace Feature/migrate to socketrocket (#8) Jan 1, 2018
Source added init with UrlRequest param (#11) Mar 13, 2019
.gitignore
Cartfile Update readme Jan 2, 2018
Cartfile.resolved Update readme Jan 2, 2018
LICENSE
LiveGQL.podspec Update Podspec Jan 2, 2018
Podfile Feature/migrate to socketrocket (#8) Jan 1, 2018
Podfile.lock added init with UrlRequest param (#11) Mar 13, 2019
README.md
logo.png
makefile

README.md

LiveGQL: Use GraphQL Websocket subscription in Swift

Carthage compatible CocoaPod GraphQL

LiveGQL is a simple library to use GraphQL Subscribtion on WebSocket based on Apollo Protocol.

The Android version is here

Features

  • Connect to a GraphQL WebSocket server
  • Send messages
  • Subscribe / unsubscribe
  • Close connection
  • Data handling (delegate)
  • Error handling
  • Reconnect option
  • JSON raw response
  • Queue of unsent messages
  • Implement all Apollo protocol
  • Specify entry protocol

Requirements

  • iOS / tvOS >= 9.0
  • Xcode >= 8.1
  • Swift >= 3.0

We also use SocketRocket and JSONCodable, thanks to them

Communication

  • Use issue if you have any problem
  • Don't hesitate to contribute to the project with a pull request

Installation

CocoaPods

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!

target '<Your Target Name>' do
    pod 'LiveGQL', '~> 2.0.0'
end

Carthage

github "florianmari/LiveGQL"

See Carthage guide for more informations about integrating with Carthage.

Manually

Just copy files in the Source folder!

Usage

Initializing

Important: to not fall out the variable in the scope, please instantiate above your viewDidLoad() for example.

import LiveGQL

let gql = LiveGQL(socket: "ws://localhost:7003/feedback")

gql.delegate = self
gql.initServer(connectionParams: nil, reconnect: true)

You can set a Dictionnary[String:String] as connectionParams like for authentification by example. The default protocol is now: graphql-subscriptions, but you can specify yours this way

import LiveGQL
let gql = LiveGQL(socket: "ws://localhost:7003/feedback", protocol: "graphql-subscriptions")

Subscribe / Unsubscribe

Subscribe

Just call subscribe method, set an identifier and your subscription query as well.

gql.subscribe(graphql: "subscription {feedbackAdded {id, text}}", identifier: "feed")

These parameters are mandatory but you can specify exposed variables and operation names if you want, look at the signature:

public func subscribe(graphql query: String, variables: [String: String]?, operationName: String?, identifier: String) {}
Treat server response

You have to implement delegate method, in your main ViewController (for example) just att that

override func viewDidLoad() {
        super.viewDidLoad()
        gql.delegate = self
        // Do any additional setup after loading the view, typically from a nib.
    }

Below your class add the folowing extension and implement the method:

extension ViewController: LiveGQLDelegate {
    func receivedMessage(text: String) {
        print("Received Message: \(text)")
    }
}

Unsubscribe

Just call unsubscribe method and your identifier

gql.unsubscribe(identifier: "feed")

Close connection

gql.closeConnection()

What's new?

2.0.0

In this second version of LiveGQL, we give up Starscream for using SocketRocket from Facebook, as well, the protocol has been fixed and you can specify yours!

Contributors

I'd like to thanks these people for their contributions:

[@rhishikeshj] for cleaning the code and implement SocketRocket! [@duncsand] for adding exposed variables and operationName on subscription call [@josefdolezal] for giving us Carthage support!

You can’t perform that action at this time.