- 印刷する
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)
}
}
}
}
アプリケーションガイド: Handler を登録する
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
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 |
|
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 | キャンペーン状態: |
サンプルコード
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 | キャンペーン情報。怜) |
サンプルコード
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のステータス: |
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 | ユーザー情報。怜) |
サンプルコード
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()
}
}
}
}
アプリケーションガイド : MessageCallback
ShopLiveHandler.onEvent
ユーザーの行動を追跡できます。
ShopLiveLog.Data
フィールド | 型 | 説明 |
---|---|---|
name | String | Event の名前 |
feature | String | Eventの種類 |
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 | 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")
}
}