Instance Method インスタンスメソッド

onBackgroundURLSessionEvents(matching:_:)

Adds an action to perform when events related to a URL session identified by a closure are waiting to be processed.

Declaration 宣言

func onBackgroundURLSessionEvents(matching matchingBlock: ((String) -> Bool)? = nil, _ urlSessionEvent: @escaping ((String, @escaping () -> Void) -> Void)) -> some WidgetConfiguration

Return Value 戻り値

A widget that triggers urlSessionEvent when events are generated for a URLSession with the specified identifier.

Parameters パラメータ

matchingBlock

A closure that takes a URLSession identifier and returns a Boolean value indicating whether to perform the action.

urlSessionEvent

A closure that takes a string parameter called identifier and a closure called completion.

Discussion 議論

When a widget initiates a background network request, the system delivers events related to the request directly to the widget extension instead of the containing app. To process the events, do the following:

  1. Use the identifier parameter to determine if a corresponding URLSession object exists. If the system has not terminated your widget extension, maintain a reference to the same URLSession object you used for the original background network request. If the system has terminated your widget extension, use the identifier to create a new URLSession object so it can receive the events. You might consider lazily initializing, and caching, the URLSession objects in a central location so that your code works regardless of whether your extension remains active, is suspended, or is terminated.

  2. Store a reference to the completion handler to invoke after all events have been delivered.

  3. After the system calls the URLSession delegate’s urlSessionDidFinishEvents(forBackgroundURLSession:) method, invoke the completion handler.