LoginSignup
2
3

More than 3 years have passed since last update.

PusherのChatKitを導入する

Posted at

はじめに

チャットアプリを作ろうとすると、
Firebase Realtime Databaseというサービスを使うと素早く実装できるという記事がたくさんあるんで、
僕はPusherのChatKitというサービスを使ってチャットアプリを作ってみようかなと思います。
いつも通り元のDocはこちら

なぜPusher?

・ある程度なら無料で運用出来る
・有名どころが使用している
・自社サーバーとの連携が可能
主に上記の理由からPusherを選びました。

SDKのインストール

cocoapod

gem install cocoapods
target '<Your Target Name>' do
  pod 'PusherChatkit'
end
pod install

Carthage

$ brew update
$ brew install carthage
github "pusher/chatkit-swift"

公式はこちら

アカウント作成

こちらでアカウント作成
https://dashboard.pusher.com/accounts/sign_up

インスタンスを作成

スクリーンショット 2020-02-25 14.28.36.png

CredentialsでInstace Locatorを取得
スクリーンショット 2020-02-25 14.31.47.png

test用エンドポイントを取得
スクリーンショット 2020-02-25 14.31.56.png

認証用の設定

let provider = PCTokenProvider(url: "test用エンドポイント")
// ChatManagerの生成
let manager = ChatManager(instanceLocator: ChatKitInfo.instaceLocation,
            tokenProvider: provider,
            userID: )

Pusherとのコネクションを作る

self.manager.connect(delegate: ChatManagerDelegateImpl(delegate: self)) { (currentUser, error) in
            if let error = error {
                print("Error sending message: \(error.localizedDescription)")
                onError(error)
                return
            }

            self.currentUser = currentUser
            onSuccess()
        }

チャット部屋の購読

guard let currentUser = self.currentUser else {
    return
}

currentUser.subscribeToRoomMultipart(id: id, roomDelegate: self, messageLimit: 0) { error in
    if let error = error {
        print("Error subscribing to room: \(error.localizedDescription)")
        return
     }
    print("Successfully subscribed to the room! 👋")
}

メッセージの送信

currentUser.sendSimpleMessage(roomID: room.id, text: message) { (messageId, error) in
            if let error = error {
                self.delegate?.onError(error: error)
                return
            }

            self.delegate?.onSuccessSendMessage(id: messageId)
        }

メッセージの受信

extension ChatKitManager: PCRoomDelegate {
    func onMultipartMessage(_ message: PCMultipartMessage) {}
}

これで基本的なチャットの機能が使えるようになります。

PCTokenProviderの生成

最後に認証用のプロバイダーですが、この記事ではテスト用のエンドポイントを使用しています。
しかし、実際に使用するときは自分でサーバーを構築して認証用のエンドポイントを作成する必要があります。
その場合の、PCTokenProviderの生成方法以下になります。

PCTokenProvider(url: endPoit,
                requestInjector: { request -> PCTokenProviderRequest in
                            // ヘッダー情報などを設定
                            request.addHeaders(headers)
                            return request
                }, retryStrategy: PCDefaultRetryStrategy(maxNumberOfAttempts: 6, maxTimeIntervalBetweenAttempts: 10))

Pusherではこれ以外にも既読を点けたり、過去のメッセージを取得したりも出来るのでチャットアプリを作ってみたい方は、Pusherというサービスもあるよとだけ覚えておいていただければと思います。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3