Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.
Gen1 DocsLegacy

Page updated Mar 26, 2026

リアルタイムイベントの購読

リアルタイムクライアント作成のためのミューテーションを購読します。

サブスクリプションの有効期間は単一関数の有効期間より長くなるため、クラスの上部にインスタンス変数を作成できます:

var subscription: AmplifyAsyncThrowingSequence<GraphQLSubscriptionEvent<Todo>>
var subscription: AnyCancellable?

作成の更新をリッスンするには、次のコードサンプルを使用できます:

func createSubscription() {
subscription = Amplify.API.subscribe(request: .subscription(of: Todo.self, type: .onCreate))
Task {
do {
for try await subscriptionEvent in subscription {
switch subscriptionEvent {
case .connection(let subscriptionConnectionState):
print("Subscription connect state is \(subscriptionConnectionState)")
case .data(let result):
switch result {
case .success(let createdTodo):
print("Successfully got todo from subscription: \(createdTodo)")
case .failure(let error):
print("Got failed result with \(error.errorDescription)")
}
}
}
} catch {
print("Subscription has terminated with \(error)")
}
}
}
func createSubscription() {
let sequence = Amplify.API.subscribe(request: .subscription(of: Todo.self, type: .onCreate))
subscription = Amplify.Publisher.create(sequence)
.sink {
if case let .failure(apiError) = $0 {
print("Subscription has terminated with \(apiError)")
} else {
print("Subscription has been closed successfully")
}
}
receiveValue: { result in
switch result {
case .connection(let subscriptionConnectionState):
print("Subscription connect state is \(subscriptionConnectionState)")
case .data(let result):
switch result {
case .success(let createdTodo):
print("Successfully got todo from subscription: \(createdTodo)")
case .failure(let error):
print("Got failed result with \(error.errorDescription)")
}
}
}
}

更新から購読を解除

Async/Await

更新から購読を解除するには、サブスクリプションでcancel()を呼び出すことができます。

func cancelSubscription() {
// 完了したら、サブスクリプションリスナーをキャンセルします
subscription?.cancel()
}

Combine

シーケンスでcancel()を呼び出すと、バックエンドからサブスクリプションが切断されます。すべてのダウンストリーム購読者もキャンセルされます。

let sequence = Amplify.API.subscribe(...)
let subscription = Amplify.Publisher.create(sequence)
let allUpdates = subscription.sink(...)
let filteredUpdates = subscription.filter{...}.sink(...)
sequence.cancel() // シーケンスは切断されました
// allUpdatesとfilteredUpdatesはデータを受け取りなくなります

同様に、Combineサブスクライバー(例えばsink()から返されたAnyCancellable)でcancel()を呼び出すと、基になるシーケンスがキャンセルされます。これにより、すべての接続されたサブスクライバーが更新受け取りを停止します。

allUpdates.cancel() // シーケンスは切断されました
// filteredUpdatesはデータを受け取りなくなります