API: Etc

    API: Etc


    記事の要約

    mute

    現在再生中のビデオをミュートします。

    func mute()

    サンプルコード

    ShopLive.mute()


    unmute

    現在再生中の動画のミュートを解除します。

    func unmute()

    サンプルコード

    ShopLive.unmute()


    getCampaigns

    accessKey に属するキャンペーン(配信)の一覧と、各キャンペーンの現在の状態を取得します。呼び出す前に ShopLive.configure(with:) で accessKey を設定してください。iOS SDK 1.8.15 以降で利用できます。

    extension ShopLive.API {
    
        // completion
        @discardableResult
        static func getCampaigns(_ request: ShopLiveCampaignListRequest = ShopLiveCampaignListRequest(),
                                 completion: @escaping (Result<ShopLiveCampaignListResponse, ShopLiveCommonError>) -> Void) -> ShopLiveCancellable
    
        // async/await (iOS 13+)
        static func getCampaigns(_ request: ShopLiveCampaignListRequest = ShopLiveCampaignListRequest()) async throws -> ShopLiveCampaignListResponse
    }

    注意

    • completion はメインスレッドで呼び出されます。

    • 戻り値 ShopLiveCancellablecancel() で進行中のリクエストをキャンセルできます。async 版は Task がキャンセルされるとリクエストも一緒にキャンセルされます。

    • リクエスト・レスポンスの型は ShopliveSDKCommon モジュールに定義されています。コード内で型名を直接使う場合は import ShopliveSDKCommon が必要です。

    ShopLiveCampaignListRequest

    取得条件です。すべてのパラメーターは任意(オプション)で、引数なしの ShopLiveCampaignListRequest() を渡すとサーバーのデフォルト値で全状態を取得します。

    パラメーター

    説明

    page

    Int?

    ページ番号。1 から始まります。(デフォルト: 1)

    size

    Int?

    1 ページあたりのキャンペーン数。最大 20 です。(デフォルト: 10)

    statuses

    [ShopLiveCampaignListRequest.Status]

    取得する状態のフィルター。空の場合は全状態を取得します。.ready(READY) / .onair(ONAIR) / .closed(CLOSED) の 3 種類のみ指定できます。

    order

    ShopLiveCampaignListRequest.Order?

    scheduledAt 基準の並び順。.ascending / .descending (デフォルト: .descending、新しい順)

    ShopLiveCampaignListResponse

    取得結果です。

    プロパティ

    説明

    campaigns

    [ShopLiveCampaign]

    取得したキャンペーンの一覧

    hasMore

    Bool

    次のページがあるかどうか。true の場合は page を 1 増やして再度取得します。

    ShopLiveCampaign

    キャンペーン 1 件の情報です。

    プロパティ

    説明

    campaignId

    Int64

    キャンペーン ID

    campaignKey

    String

    キャンペーンキー。ShopLive.play(data:) / ShopLive.preview(data:completion:) の campaignKey として使用します。

    title

    String?

    キャンペーンのタイトル

    description

    String?

    キャンペーンの説明

    campaignUrl

    String?

    キャンペーン URL

    rerun

    Bool

    再配信かどうか

    archiveStream

    Bool

    アーカイブストリーム(見逃し配信)が提供されるかどうか

    privateLive

    Bool

    プライベート配信かどうか。一覧にはそのまま含まれるため、表示するかどうかはアプリ側で判断します。

    scheduledAt

    Date?

    配信予定開始時刻

    scheduledEndAt

    Date?

    配信予定終了時刻

    posterUrl

    String?

    ポスター画像 URL

    lifecycle

    ShopLiveCampaign.Lifecycle

    状態と状態遷移の時刻

    metrics

    ShopLiveCampaign.Metrics?

    視聴指標。.onair / .closed の状態でのみ返され、それ以外の状態では nil です。

    ShopLiveCampaign.Lifecycle

    キャンペーンの状態と、状態遷移の時刻です。

    プロパティ

    説明

    status

    ShopLiveCampaign.Status

    キャンペーンの状態。リハーサル中は .ready、終了処理中は .onair として表記されます。

    rehearsal

    Bool

    リハーサル中かどうか。リハーサル中も status は .ready のため、この値で区別します。

    startedAt

    Date?

    配信開始時刻

    closingAt

    Date?

    終了処理の開始時刻。status が .onair でこの値がある場合は終了処理中です。

    endedAt

    Date?

    配信終了時刻

    ShopLiveCampaign.Status

    キャンペーンの状態値です。サーバー値がそのままマッピングされ、未定義の値は .unknown として渡されます。

    Case

    サーバー値

    説明

    .reserved

    RESERVED

    予約済みの配信。リクエストのフィルター(statuses)では指定できず、全状態を取得した場合のみ含まれます。

    .ready

    READY

    配信準備(待機)中。lifecycle.rehearsal が true の場合はリハーサル中です。

    .onair

    ONAIR

    配信中。lifecycle.closingAt がある場合は終了処理中です。

    .closed

    CLOSED

    配信終了

    .unknown(String)

    その他

    未定義のサーバー状態値です。今後追加される状態に備えて元の文字列をそのまま保持します。

    ShopLiveCampaign.Metrics

    視聴指標です。.onair / .closed の状態でのみ提供されます。

    プロパティ

    説明

    userCount

    Int?

    視聴者数

    adoreCount

    Int?

    いいね(ハート)数

    showUserCount

    Bool

    false の場合、userCount / adoreCount を UI に表示してはいけません。

    エラー処理

    失敗時は ShopLiveCommonError が渡されます。codes にエラーコードが入り、message は常に固定文言 Failed to fetch campaign list. Refer to the error code. です。原因は codes で判別してください。サーバーが返したエラーコードはそのまま渡されます。コードの一覧は Error codes ドキュメントを参照してください。

    Code

    説明

    9000

    accessKey が設定されていません。先に ShopLive.configure(with:) を呼び出してください。

    -200

    存在しない accessKey です。(Customer Account Not Found)

    その他のサーバーエラーコード

    サーバーが返したエラーコードがそのまま渡されます。Error codes ドキュメントを参照してください。

    HTTP ステータスコード

    サーバーがエラー本文なしで応答した場合、HTTP ステータスコード(例: 404、500)がそのまま渡されます。

    9900

    ネットワーク接続に失敗しました。

    9901

    レスポンス JSON の解析に失敗しました。

    10000

    予期しないエラーです。

    サンプルコード

    import ShopLiveSDK
    import ShopliveSDKCommon
    
    // accessKey の設定 (アプリで最初に 1 回)
    ShopLive.configure(with: "{accessKey}")
    
    // 配信中・準備中のキャンペーンを新しい順に 20 件取得
    let request = ShopLiveCampaignListRequest(page: 1,
                                              size: 20,
                                              statuses: [.onair, .ready],
                                              order: .descending)
    
    let cancellable = ShopLive.API.getCampaigns(request) { result in
        switch result {
        case let .success(response):
            for campaign in response.campaigns {
                switch campaign.lifecycle.status {
                case .reserved:
                    print("予約", campaign.title ?? "")
                case .ready:
                    print(campaign.lifecycle.rehearsal ? "リハーサル中" : "準備中", campaign.title ?? "")
                case .onair:
                    print(campaign.lifecycle.closingAt == nil ? "配信中" : "終了処理中", campaign.title ?? "")
                case .closed:
                    print("終了", campaign.title ?? "")
                case let .unknown(raw):
                    print("不明な状態", raw)
                }
            }
            if response.hasMore {
                // page を 1 増やして次のページを取得します。
            }
        case let .failure(error):
            print("getCampaigns failed:", error.codes, error.message ?? "")
        }
    }
    
    // 結果が不要になった場合 (画面を離れるなど) はリクエストをキャンセルします。
    // cancellable.cancel()

    サンプルコード (async/await)

    // iOS 13+ — Task がキャンセルされると進行中のリクエストも一緒にキャンセルされます。
    Task {
        do {
            let response = try await ShopLive.API.getCampaigns(ShopLiveCampaignListRequest(statuses: [.onair]))
            let onair = response.campaigns.filter { $0.lifecycle.closingAt == nil }
            if let campaign = onair.first {
                ShopLive.play(data: ShopLivePlayerData(campaignKey: campaign.campaignKey))
            }
        } catch let error as ShopLiveCommonError {
            print("getCampaigns failed:", error.codes)
        } catch {
            // Task のキャンセル (CancellationError) など
        }
    }


    What's Next