Event handler

    Event handler


    記事の要約

    Shoplive Player で発生した通知をクライアントから Handler 関数を通じて渡され、必要な処理を行います。


    ShopLive.setHandler

    ShopLive event handler です。

    fun setHandler(handler: ShopLiveHandler)

    サンプルコード

    class MainActivity : AppCompatActivity() {
    
        private val handler = object : ShopLiveHandler() {
    
            override fun handleNavigation(context: Context, url: String) {
              	Log.d(TAG, "handleNavigation >> url=$url")
            }
    
            override fun onChangeCampaignStatus(context: Context, campaignStatus: String) {
              	Log.d(TAG, "onChangeCampaignStatus >> $campaignStatus")
            }
        }
    
        private fun init() {
          	ShopLive.setHandler(handler)
        }
    }


    ShopLiveHandler.handleNavigation

    Shopliveで商品、バナーなどを選択した場合、選択した商品やバナー情報を配信します。

    handleNavigationにurlが渡されるとプレイヤーがPIPに切り替わるため、ShopLive.startPictureInPicture()を呼び出す必要はありません。

    PIP 切り替えを望まない場合は、ShopLive.setNextActionOnHandleNavigationインターフェイスを参照してください。

    fun handleNavigation(context: Context, url: String)

    パラメータ

    型

    説明

    context

    Context

    Context

    url

    String

    商品やバナーを選択したときに移動するURL

    サンプルコード

    private val handler = object : ShopLiveHandler() {
        override fun handleNavigation(context: Context, url: String) {
            val type: ActionType = "your_action_type"
            when (type) {
                ActionType.PIP, ActionType.CLOSE -> {
                    val intent: Intent = Intent(this@SampleActivity, WebViewActivity::class.java)
                    intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP
                    intent.putExtra("url", url)
                    startActivity(intent)
                }
                ActionType.KEEP -> {
                    val webDialogFragment = WebViewDialogFragment(url)
                    ShopLive.showDialogFragment(webDialogFragment)
                }
            }
        }
    }


    Coupon

    クーポン処理が完了したときにクーポンが有効かどうかを設定するための状態です。

    public enum CouponPopupStatus {
        SHOW, // クーポンを再表示
        HIDE, // クーポンを削除
        KEEP // 状態を維持
    }

    クーポン処理が完了したときに通知メッセージが表示されたときに表示されるタイプを設定します。

    public enum CouponPopupResultAlertType {
        ALERT, // アラート
        TOAST // トースト
    }


    ShopLiveHandler.handleDownloadCoupon

    Shopliveでクーポンを選択(タップ)すると、クライアントにクーポン情報が送信されます。クライアントのクーポン処理結果は、callbackを通じて Shoplive Android SDK に戻されます。このコールバックは、Shoplive Player でクーポン ステータスを設定するために使用されます。

    fun handleDownloadCoupon(context: Context, couponId: String, callback: ShopLiveHandlerCallback)

    パラメータ

    型

    説明

    context

    Context

    Context

    couponId

    String

    選択したクーポンID

    callback

    ShopLiveHandlerCallback

    クーポン処理が完了したらShopLiveに知らせます callback

    callback ShopLiveHandlerCallback.couponResult

    クーポンのダウンロードが完了したら、結果が成功したか失敗したか、メッセージなどを渡すために呼び出します。

    /**
    * @param isDownloadSuccess - true: 成功、false: 失敗
    * @param message - 成功または失敗のメッセージ
    * @param couponStatus - SHOW: クーポンを再活性化、HIDE: クーポンを非表示、KEEP: 状態を維持
    * param alertType - ALERT: ポップアップ、TOAST: メッセージ
    * */
    fun couponResult(
        isDownloadSuccess: Boolean, 
        message: String?, 
        couponStatus: ShopLive.CouponPopupStatus, 
        alertType: ShopLive.CouponPopupResultAlertType) {}

    サンプルコード

    private val handler = object : ShopLiveHandler() {
        override fun handleDownloadCoupon(
          context: Context,
          couponId: String,
          callback: ShopLiveHandlerCallback
        ) {
            val builder: AlertDialog.Builder = Builder(context)
            builder.setTitle("クーポンダウンロード")
            builder.setMessage("couponId $couponId")
            builder.setPositiveButton("成功") { dialog, which ->
                // 成功した時callback設定
                callback.couponResult(
                  true、
                  "クーポンをダウンロードしました。"、
                  ShopLive.CouponPopupStatus.HIDE、
                  ShopLive.CouponPopupResultAlertType.TOAST.
                )
            }
    
            builder.setNegativeButton("失敗") { dialog, which -> // 失敗した時のコールバック設定
                // 失敗した時のcallback設定
                callback.couponResult(
                  false、
                  "クーポンのダウンロードに失敗しました。"、
                  ShopLive.CouponPopupStatus.SHOW、
                  ShopLive.CouponPopupResultAlertType.ALERT
                )
            }
            val dialog: Dialog = builder.create()
            dialog.show() 
        }
    }


    ShopLiveHandler.handleCustomAction

    ポップアップで選択したイベントを custom で指定し、ポップアップを選択した時、ポップアップ情報を渡します。ポップアップの id, type, payloadを渡します。

    fun handleCustomAction(context: Context, id: String, type: String, payload: JSONObject, callback: ShopLiveHandlerCallback)

    パラメータ

    型

    説明

    context

    Context

    Context

    id

    String

    クーポンまたはバナーID

    type

    String

    クーポンまたはバナータイプ

    payload

    JSONObject

    ユーザー定義の payload

    callback

    ShopLiveHandlerCallback

    custom 処理が完了したら、ShopLiveに通知するcallback

    callback ShopLiveHandlerCallback.customActionResult

    customAction 処理が完了すると、成功または失敗の結果、メッセージなどを転送するために呼び出されます。

    /**
    * @param isSuccess - true: 成功、false: 失敗
    * @param message - 成功または失敗のメッセージ。
    * @param couponStatus - SHOW: 再活性化、HIDE: 非表示、KEEP: ステータス維持
    * @param alertType - ALERT: ポップアップ、TOAST: メッセージ
    * */
    fun customActionResult(
        isSuccess: Boolean, 
        message: String?, 
        couponStatus: ShopLive.CouponPopupStatu, 
        alertType: ShopLive.CouponPopupResultAlertType?) {}

    サンプルコード

    private val handler = object : ShopLiveHandler() {
    
        override fun handleCustomAction(
          context: Context,
          id: String,
          type: String,
          payload: JSONObject,
          callback: ShopLiveHandlerCallback
        ) {
            val builder: AlertDialog.Builder = Builder(context)
            builder.setTitle("カスタムアクション(ポップアップ)")
            builder.setMessage("id: $id" + " type: " + R.attr.type + " payload: " + payload.toString())
            builder.setPositiveButton("success") { dialogue, which ->
                // 成功した時のコールバック設定
                callback.couponResult(
                  true、
                  "Custom action(Popup)処理が成功しました。"、
                  ShopLive.CouponPopupStatus.HIDE、
                  ShopLive.CouponPopupResultAlertType.TOAST.
                )
            }
    
            builder.setNegativeButton("失敗") { dialog, which -> // 失敗時のコールバック設定
                // 失敗した時のコールバック設定
                callback.couponResult(
                  false、
                  "Custom action(Popup)の処理が失敗しました。"、
                  ShopLive.CouponPopupStatus.SHOW,
                  ShopLive.CouponPopupResultAlertType.ALERT
                )
            }
    
            val dialog: Dialog = builder.create()
            dialog.show()
        }
    }


    ShopLiveHandler.handleShare

    放送中に共有することを選択したときのハンドラーです。Android Share Sheetを使用せずに直接実装するには、必ずoverrideしてください。 

    fun handleShare(context: Context, data: ShopLivePlayerShareData) {}

    パラメータ

    型

    説明

    context

    Context

    Context

    data

    ShopLivePlayerShareData

    クーポンまたはバナーID

    ShopLivePlayerShareData

    フィールド

    型

    説明

    campaign

    ShopLivePlayerShareCampaign?

    Campaignについて

    url

    String?

    SShopLive.setShareScheme()で適用された注釈

    ShopLivePlayerShareCampaign

    フィールド

    型

    説明

    campaignKey

    String?

    Campaign Key

    title

    String?

    Campaign タイトル

    description

    String?

    Campaign  説明

    thumbnail

    String?

    Campaign サムネイル

    サンプルコード

    private val handler = object : ShopLiveHandler() {
        override fun handleShare(context: Context?, data: ShopLivePlayerShareData) {
          	Toast.makeText(context, "url=${data.url}", Toast.LENGTH_SHORT).show()
        } 
    }


    ShopLiveHandler.onChangeCampaignStatus

    放送状態が変更されたときのHandlerです。

    /**
    * @param context - Context
    * @param campaignStatus - READY | ONAIR | CLOSED
    */
    fun onChangeCampaignStatus(context: Context, campaignStatus: String) {}

    パラメータ

    型

    説明

    context

    Context

    Context

    campaignStatus

    String

    キャンペーン状態: READY, ONAIR, CLOSED

    サンプルコード

    private val handler = object : ShopLiveHandler() {
        override fun onChangeCampaignStatus(context: Context, campaignStatus: String) {
          	Log.d(TAG, "onChangeCampaignStatus >> $campaignStatus")
        }
    }


    ShopLiveHandler.onCampaignInfo

    JSON Object 形式の放送情報です。

    fun onCampaignInfo(campaignInfo: JSONObject) {}

    パラメータ

    型

    説明

    campaignInfo

    JSONObject

    キャンペーン情報。怜) {'title':'放送タイトル'}

    サンプルコード

    private val handler = object : ShopLiveHandler() {
        override fun onCampaignInfo(campaignInfo: JSONObject) {
          	Log.d(TAG, "onCampaignInfo >> $campaignInfo") 
        }
    }


    ShopLiveHandler.onChangedPlayerStatus

    Shoplive Playerの状態を受け取ります。

    fun onChangedPlayerStatus(isPipMode: Boolean, playerLifecycle: ShopLive.PlayerLifecycle) { }

    パラメータ

    型

    説明

    isPipMode

    Boolean

    現在のPIPかどうか

    playerLifecycle

    ShopLive.PlayerLifecycle

    Shoplive Playerのステータス: CREATED, CLOSING, DESTROYED

    enum PlayerLifecycle

    タイプ

    説明

    CREATED

    プレーヤーが作成されました

    CLOSING

    プレイヤー終了前

    DESTROYED

    プレイヤーが終了しました

    サンプルコード

    private val handler = object : ShopLiveHandler() {
        override fun onChangedPlayerStatus(
          isPipMode: Boolean,
          playerLifecycle: ShopLive.PlayerLifecycle) {
            when(playerLifecycle) {
                ShopLive.PlayerLifecycle.CREATED -> {
    
                }
                ShopLive.PlayerLifecycle.CLOSING -> {
    
                }
                ShopLive.PlayerLifecycle.DESTROYED -> {
    
                }
            }
        }
    }


    ShopLiveHandler.onSetUserName

    ユーザー名が変更されたときに呼び出されます。

    fun onSetUserName(jsonObject: JSONObject) {}

    パラメータ

    型

    説明

    jsonObject

    JSONObject

    ユーザー情報。怜) {'userId':'123', 'userName':'test'}

    サンプルコード

    private val handler = object : ShopLiveHandler() {
        override fun onSetUserName(jsonObject: JSONObject?) {
         	 Log.d(TAG, "onSetUserName >> $jsonObject")
        }
    }


    ShopLiveHandler.handlePreview

    Shopliveプレビュー画面を選択したときのハンドラーです。

    プレビュー画面を選択すると、その放送に入ります。(デフォルト) 放送に入らず、直接実装するには必ず overrideしなければなりません。 ただし,他のアプリの上に表示として提供されるプレビュー画面でのみイベントが伝達されます。 OS PIPではプレビューイベントは配信されず、自動的に全画面放送に入ります。

    fun handlePreview(context: Context, campaignKey: String) {}

    パラメータ

    型

    説明

    context

    Context

    Context

    campaignKey

    String

    キャンペーンキー

    サンプルコード

    private val handler = object : ShopLiveHandler() {
        override fun handlePreview(context: Context, campaignKey: String) {
          	Log.d(TAG, "campaignKey=$campaignKey") 
        }
    }


    ShopLiveHandler.onReceivedCommand

    command 命令を受け取ったときに呼び出されます。

    fun onReceivedCommand(context: Context, command: String, data: JSONObject) {}

    パラメータ

    型

    説明

    context

    Context

    Context

    command

    String

    渡された命令

    data

    JSONObject

    渡されたデータ

    サンプルコード

    private val handler = object : ShopLiveHandler() {
        override fun onReceivedCommand(context: Context, command: String, data: JSONObject) {
            when(command) {
                "LOGIN_REQUIRED" -> {
    
                }
                "CLICK_PRODUCT_CART" -> {
    
                }
                "EVENT_LOG" -> {
                    // parsing example 1
                    val name = data.getString("name")
                    val feature = data.getString("feature")
                    val parameter = data.getString("parameter")
                    Toast.makeText(
                        context,
                        "name : $name, feature : $feature, parameter : $parameter",
                        Toast.LENGTH_SHORT
                    ).show()
                    // parsing example 2
                    val log = Gson().fromJson(data.toString(), ShopLiveLog.Data::class.java)
                    if (Options.isShowClickLog()) {
                    Toast.makeText(
                        context,
                        "name : ${log.name}, feature : ${log.feature}, campaignKey : ${log.campaignKey}, parameter : ${log.parameter}",
                        Toast.LENGTH_SHORT
                    ).show()
                }
            }
        }
    }

    ShopLiveHandler.onEvent

    ユーザーの行動を追跡できます。

    ShopLiveLog.Data

    フィールド

    型

    説明

    name

    String

    Event の名前

    feature

    String

    Eventの種類 click, show, action

    campaignKey

    String?

    放送の Unique Key

    parameter

    Map<String, Any>?

    関連する追加 parameter

    サンプルコード

    private val handler = object : ShopLiveHandler() {
        ...
        override fun log(data: ShopLiveLog.Data) {
            Log.d(TAG, "name=${data.name} feature=${data.feature} campaignKey=${data.campaignKey} parameter=${data.parameter}")
        }
        ...
    }


    ShopLiveHandler.onError

    放送前または放送中に発生したエラー状況に関するメッセージを配信します。

    fun onError(context: Context, code: String, message: String) {}

    パラメータ

    型

    説明

    context

    Context

    Context

    code

    String

    エラーコード

    message

    String

    エラーメッセージ

    サンプルコード

    private val handler = object : ShopLiveHandler() {
        override fun onError(context: Context, code: String, message: String) {
          	Log.d(TAG, "code=$code, message=$message")
        }
    }