メインコンテンツまでスキップ

SwiftでMomento Topicsを始める

SwiftとMomentoトピックをすぐに使い始める必要がある場合、このページには必要な基本的なAPIコールが含まれています。完全で動作するコードサンプルについては、Swift SDK のサンプルを確認するをご覧ください。

Momento SDKをインストールする

Momento Swift SDKの最新バージョンはGitHubで入手可能です: momentohq/client-sdk-swift

Momento APIキーを取得する

Momento APIキーが必要です。Momento Web Consoleから取得できます。 トークンを取得したら、Momentoクライアントが利用できるように環境変数に保存します:

export MOMENTO_API_KEY=<your api key here>

Note: セキュリティ強化のためには、APIキーを環境変数ではなく、AWS Secret ManagerやGCP Secret Managerのようなものに入れるのがベストプラクティスだが、ここではデモのためにAPIキーを使っています。

TopicClientのセットアップ

このコードでは、パブ/サブ・トピックとの対話に使用する TopicClient を作成します。

do {
let credentialProvider = try CredentialProvider.fromEnvironmentVariable(envVariableName: "MOMENTO_API_KEY")
let topicClient = TopicClient(
configuration: TopicClientConfigurations.iOS.latest(),
credentialProvider: credentialProvider
)
} catch {
print("Unable to create topic client: \(error)")
exit(1)
}

トピックにメッセージを公開する

これは、"topic "というトピックにメッセージを発行し、その返り値をキャッチして発行が成功したかどうかをチェックする例です。

let result = await topicClient.publish(
cacheName: cacheName,
topicName: "topic",
value: "value"
)
switch result {
case .success(_):
print("Successfully published message!")
case .error(let err):
print("Unable to publish message: \(err)")
exit(1)
}

トピックを購読する

これは、"topic "というトピックを購読する例である。このトピックにメッセージがパブリッシュされると、ここのコードはそれを非同期に受信して表示します。

let subscribeResponse = await topicClient.subscribe(cacheName: cacheName, topicName: "topic")

#if swift(>=5.9)
let subscription = switch subscribeResponse {
case .error(let err): fatalError("Error subscribing to topic: \(err)")
case .subscription(let sub): sub
}
#else
let subscription: TopicSubscription
switch subscribeResponse {
case .error(let err):
fatalError("Error subscribing to topic: \(err)")
case .subscription(let sub):
subscription = sub
}
#endif

// unsubscribe in 5 seconds
Task {
try await Task.sleep(nanoseconds: 5_000_000_000)
subscription.unsubscribe()
}

// loop over messages as they are received
for try await item in subscription.stream {
var value: String = ""
switch item {
case .itemText(let textItem):
value = textItem.value
print("Subscriber recieved text message: \(value)")
case .itemBinary(let binaryItem):
value = String(decoding: binaryItem.value, as: UTF8.self)
print("Subscriber recieved binary message: \(value)")
case .error(let err):
print("Subscriber received error: \(err)")
}
}

コードの実行

Swift SDK GitHub repo examples directoryで、完全な、動作するサンプルを見つけることができます。

備考

これらの基本的なAPIコール以外にも、MomentoのAPIコールの詳細については、APIリファレンスページを参照してください。