Handler

    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)

    パラメータ

    説明

    url

    商品やバナーを選択したときに移動する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

    couponId

    選択したクーポンID

    callback

    クーポン処理が完了したら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

    id

    クーポンまたはバナーID

    type

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

    payload

    ユーザー定義の payload

    callback

    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

    data

    ShopLivePlayerShareData

    ShopLivePlayerShareData

    field

    type

    description

    campaign

    ShopLivePlayerShareCampaign?

    Campaignについて

    url

    String?

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

    ShopLivePlayerShareCampaign

    field

    type

    description

    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

    campaignStatus

    キャンペーン状態

    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

    キャンペーン情報


    怜) {'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

    現在のPIPかどうか

    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

    ユーザー情報


    예) {'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

    campaignKey

    キャンペーンキー

    サンプルコード

    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

    command

    渡された命令

    data

    渡されたデータ


    サンプルコード

    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.log

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

    ShopLiveLog.Data

    field

    type

    description

    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}")
        }
        ...
    }

    関連リンク
    EventLog - ユーザーの行動を追跡する


    ShopLiveHandler.onError

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

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

    パラメータ

    説明

    context

    Context

    code

    エラーコード

    message

    エラーメッセージ

    サンプルコード

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