App Messaging SDK負責消息的拉取和展示。當您在AGC后臺創(chuàng)建了消息、并且集成了App Messaging SDK,當達到消息展示的觸發(fā)條件后,App Messaging SDK會自動以默認的消息展示布局在應用中展示消息。您可以不需要編寫任何代碼,就可以擁有展示消息的能力。如果您需要對展示的消息或用戶對消息的操作進行一些別的特殊配置,您可以通過App Messaging SDK提供的API完成。
應用內消息的展示條件
App Messaging SDK展示消息的條件包括以下幾點:
1. App必須在前臺運行。
2. App觸發(fā)消息展示的事件:用戶在App的操作觸發(fā)消息預設的事件后,App Messaging SDK會去同步AGC服務端或本地緩存的消息數(shù)據(jù),獲取到消息后,判斷消息是否需要顯示。
App Messaging SDK 支持數(shù)據(jù)拉取開關的設置,方便您隨時開啟/停用從AGC服務端數(shù)據(jù)拉取功能(默認為開啟)。
a. 調用AGConnectAppMessaging.getInstance初始化AGConnectAppMessaging實例。
b. 調用AGConnectAppMessaging.setFetchMessageEnable設置是否同步AGC服務端數(shù)據(jù)的開關。
Java:
AGConnectAppMessaging.getInstance().setFetchMessageEnable(true);
Kotlin:
AGConnectAppMessaging.getInstance().setFetchMessageEnable(true);
說明:
App Messaging SDK并不是每次觸發(fā)事件都會去AGC服務端請求消息,而是在一定的時間內只請求一次(通常為App啟動時),然后把所有的消息緩存到本地,在過期時間之內事件觸發(fā)時只會從本地讀取消息。
在消息數(shù)據(jù)過期時間內,如果在AGC創(chuàng)建了新的消息,由于App Messaging SDK不會再次到AGC請求數(shù)據(jù),新創(chuàng)建的消息將不會被獲取。
3. AGC上創(chuàng)建了應用內消息,且消息處于發(fā)布狀態(tài),消息需要滿足以下條件:
消息的開始時間和結束時間滿足要求:當前時間(手機時間)需要大于消息的開始時間且小于結束時間。
消息的展示頻率滿足要求:消息沒有被展示過,展示的次數(shù)或者頻率沒有超過限制。
消息的觸發(fā)事件滿足要求:消息的觸發(fā)事件列表中需要包含此次App的觸發(fā)事件。
App Messaging SDK 支持消息展示開關的設置,方便您隨時開啟/停用消息展示功能(默認為開啟)。
a. 調用AGConnectAppMessaging.getInstance初始化AGConnectAppMessaging實例。
b. 調用AGConnectAppMessaging.setDisplayEnable設置是否允許展示消息的開關。
Java:
//消息展示設置成false后,App Messaging SDK將不再展示任何消息
AGConnectAppMessaging appMessaging = AGConnectAppMessaging.getInstance();
appMessaging.setDisplayEnable(false);
Kotlin:
//消息展示設置成false后,App Messaging SDK將不再展示任何消息
var appMessaging: AGConnectAppMessaging? = AGConnectAppMessaging.getInstance();
appMessaging?.setDisplayEnable(false);
當用戶與消息交互時進行響應
通過App Messaging SDK您可以進一步定制應用內消息的行為,在用戶與消息交互時進行響應,App Messaging SDK支持對消息的展示、點擊和消失事件的監(jiān)聽。實現(xiàn)的基本步驟如下:
1. 調用AGConnectAppMessaging.getInstance初始化AGConnectAppMessaging實例。
Java:
AGConnectAppMessaging appMessaging = AGConnectAppMessaging.getInstance();
Kotlin:
var appMessaging: AGConnectAppMessaging? = AGConnectAppMessaging.getInstance();
2. 創(chuàng)建監(jiān)聽器。
您可以通過繼承App Messaging SDK的AGConnectAppMessagingOnDisplayListener(消息展示監(jiān)聽器)、AGConnectAppMessagingOnClickListener(消息點擊監(jiān)聽器)、AGConnectAppMessagingOnDismissListener(消息消失監(jiān)聽器)來創(chuàng)建事件的監(jiān)聽器。
例如,創(chuàng)建一個點擊事件的監(jiān)聽器,示例代碼如下:
Java:
public class ClickListener implements AGConnectAppMessagingOnClickListener {
@Override
public void onMessageClick(AppMessage appMessage) {
// 獲取到點擊消息的內容
}
}
Kotlin:
class ClickListener : AGConnectAppMessagingOnClickListener {
override fun onMessageClick(appmessage: AppMessage?) {
// 獲取到點擊消息的內容
}
}
3. 注冊監(jiān)聽器。
您可以通過AGConnectAppMessaging的addOnClickListener、addOnDismissListener和addOnDisplayListener來注冊監(jiān)聽器。
Java:
ClickListener listener = new ClickListener();
appMessaging.addOnClickListener(listener);
Kotlin:
val clickListener = ClickListener();
appMessaging?.addOnClickListener(clickListener)
設置自定義的布局
App Messaging服務提供三種消息樣式:彈框消息、圖片消息和Banner消息,App Messaging SDK提供消息的默認展示布局。您可以自己實現(xiàn)消息的展示樣式,從而使得消息的展示樣式更加適合App的相關主題。
1. 通過繼承AGConnectAppMessagingDisplay的方式自定義一個消息顯示類。
Java:
public class CustomDisplayView implements AGConnectAppMessagingDisplay {
@Override
public void displayMessage(@NonNull AppMessage appMessage,
@NonNull AGConnectAppMessagingCallback callback) {
}
}
Kotlin:
class CustomDisplayView : AGConnectAppMessagingDisplay {
override fun displayMessage(p0: AppMessage, p1: AGConnectAppMessagingCallback) {
}
}
displayMessage方法有兩個對象:AppMessage和AGConnectAppMessagingCallback。
AppMessage是消息的內容。
AGConnectAppMessagingCallback是消息交互的回調對象,您應該在合適的時機回調該對象的方法。
- 在消息展示時回調onMessageDisplay,這一步很重要,如果該方法一直不回調,則App Messaging SDK無法獲取該條消息是否被顯示,導致消息會被重復下發(fā)。
- 在消息點擊時回調onMessageClick。
- 在消息消失時回調onMessageDismiss。
2. 調用AGConnectAppMessaging.addCustomView添加自定義顯示類。
Java:
CustomDisplayView view = new CustomDisplayView();
AGConnectAppMessaging.getInstance().addCustomView(view);
Kotlin:
var view = CustomDisplayView()
AGConnectAppMessaging.getInstance().addCustomView(view);
當然,如果您需要恢復消息的默認布局,可以調用AGConnectAppMessaging.removeCustomView移除自定義布局。
Java:
AGConnectAppMessaging.getInstance().removeCustomView();
Kotlin:
AGConnectAppMessaging.getInstance().removeCustomView();