Android 彈窗整合
1.整合 SDK
1.1. 整合神策分析 SDK
在使用彈窗SDK 前,請確保已經整合了神策分析 SDK,版本需要在[ v4.0.3|https://github.com/sensorsdata/sa-sdk-android/releases/tag/v4.0.3] 及以上,詳細整合步驟請參照[Android SDK 埋點整合使用説明文檔|https://manual.sensorsdata.cn/sa/1.13/tech_sdk_client_android_basic-17563956.html]。 如果使用多module,請確保神策分析 SDK 和神策彈窗 SDK 在同一 module 中引入,或者確保引用神策彈窗 SDK 的 module 能引用到神策分析 SDK。
1.2. 整合神策彈窗 SDK
在build.gradle 檔案中新增神策彈窗 SDK 依賴:
dependencies {+添加 SensorsFocus SDK 依賴implementation 'com.sensorsdata.analytics.android:SensorsFocusSDK:0.4.0'} |
彈窗 SDK 整合 Demo,可參考[ GitHub | https://github.com/sensorsdata/sf-sdk-android]。 |
2. 初始化 SDK
首先您需要初始化初始化神策分析SDK,具體可參考:初始化神策分析[ SDK|https://manual.sensorsdata.cn/sa/1.13/sdk-android-17563956.html#id-.SDK集成(Android)v1.13-初始化神策分析SDK]。 初始化神策分析 SDK 完成之後,再初始化神策分析彈窗 SDK。 彈窗SDK和神策分析 SDK 都需要在 Application 類的 onCreate() 方法主線程初始化。 在彈窗 SDK 初始化時需要傳入彈窗服務端位址,請聯繫運營人員獲取。
初始化神策分析 SDK... -初始化神策彈窗SDKSensorsFocusAPI.startWithConfigOptions(this, new SFConfigOptions(" 彈窗服務端位址")); |
3. 設定 Scheme
關於 Scheme 的設定方法,參考:取得[ Scheme|https://manual.sensorsdata.cn/sa/1.13/sdk-android-17563956.html#id-.SDK集成(Android)v1.13-配置Scheme]。
4. 實現彈窗回檔
4.1. 設定回調
在SensorsFocusAPI 初始化時,可以通過 SFConfigOptions 的 setPopupListener 方法設置彈窗的回調監聽。 setPopupListener 提供了四個監聽介面:
SensorsFocusAPI.startWithConfigOptions(this, new SFConfigOptions("彈窗服務端位址").setPopupListener (new PopupListener() { @Override public void onPopupLoadSuccess(String planId) {} @Override public void onPopupLoadFailed(String planId, int errorCode, String errorMessage) {} @Override public void onPopupClick(String planId, SensorsFocusActionModel actionModel) {} @Override public void onPopupClose( String planId) {}})); } |
4.2. 方法說明
4.2.1. 設定彈窗載入成功回調
彈窗載入成功時,會觸發onPopupLoadSuccess(String planId)方法,其中 planId 為計劃 ID。
4.2.2. 設定彈窗載入失敗回調
彈窗失敗時會觸發onPopupLoadFailed(String planId, int errorCode, String errorMessage)方法,其中 planId 為計劃 ID,errorCode 為錯誤碼,errorMessage 為錯誤資訊。 具體錯誤碼對應資訊如下:
錯誤碼 | 描述資訊 |
1000 | 圖片載入失敗 |
1001 | 預覽資訊解析失敗,請檢查計劃配置 |
4.2.3. 設定彈窗按鈕點擊回調
彈窗點擊時,會觸發onPopupClick(String planId, SensorsFocusActionModel actionModel)方法,其中 planId 為計劃 ID,actionModel 包含了後端配置彈窗的一些資訊,具體含義如下:
欄位 | 彈窗點擊後行為 |
SensorsFocusActionModel.CLOSE | 點擊彈窗時就關閉彈窗 |
SensorsFocusActionModel. OPEN_LINK | 點擊後開啟連結,可透過actionModel.getValue() 取得連結 |
SensorsFocusActionModel.COPY | 點擊後複製文字內容,可透過actionModel.getValue() 取得複製文字 |
SensorsFocusActionModel.CUSTOMIZE | 自訂行為,可透過actionModel.getExtra() 獲取自訂欄位 |
範例代碼如下:
public void onPopupClick(String planId, SensorsFocusActionModel actionModel) { switch (actionModel) { case OPEN_LINK: // 自定義處理打開連結操作String url = actionModel.getValue(); Log.d("PopupClick", "url = " + url); break; case COPY: - 自定義處理複製操作String copyText = actionModel.getValue(); Log.d("PopupClick", "copyText = " + copyText); break; case CLOSE: - 處理 close break; case CUSTOMIZE: - 處理自定義操作JSONObject customizeJson = actionModel.getExtra(); break; }} |
4.2.4. 設定彈窗被關閉回調
彈窗關閉時會觸發onPopupClose(String planId)方法,其中 planId 為計劃 ID。
5. 彈窗自定義觸達
5.1. 名詞解釋
名詞 | 解釋 / 定義 | 備註 |
自定義觸達 | 使用神策智慧運營,滿足運營條件后,客戶可以自定義的觸達方式,例如可以發券、彈窗、跳轉、紅包雨等等 |
5.2. API 使用
在初始化SDK 時,實現 SensorsFocusCampaignListener 介面,即可使用自定義觸達功能,示例代碼如下:
SensorsFocusAPI.startWithConfigOptions(this, new SFConfigOptions(apiBaseUrl).setCampaignListener(new SensorsFocusCampaignListener() { /** * 返回 bool 值決定觸達是否開始 */ @Override public boolean campaignShouldStart(SFCampaign sfCampaign) { =如果是自定義觸達 if(SFCampaign.Type.CUSTOMIZED == sfCampaign.getType()){ try {JSONObject jsonObject = new JSONObject(sfCampaign.getContent()); } catch (JSONException e) {e.printStackTrace(); }}else if(SFCampaign.Type.PRESET == sfCampaign.getType()){ } return true ; } /** * 觸達開始時調用 */ @Override public void onCampaignStart(SFCampaign sfCampaign) {} /** * 觸達結束時調用 */ @Override public void onCampaignEnd(SFCampaign sfCampaign) {} /** * 觸達失敗時調用 */ @Override public void onCampaignFailed(SF Campaign sfCampaign, int errorCode, String errorMessage) {}}).setPopupListener(new PopupListener () { /** * 彈窗載入成功 */ @Override public void onPopupLoadSuccess(String planId) {} /** * 彈窗載入失敗 */ @Override public void onPopupLoadFailed(String planId, int errorCode, String errorMessage) {} /** * 彈窗點擊 */ @Override public void onPopupClick( String planId, SensorsFocusActionModel actionModel) {} /** * 彈窗關閉 */ @Override public void onPopupClose(String planId) {}})); |
5.3. API 說明
5.3.1. 資料結構
SFCampaign 數據結構介紹:
名稱 | 類型 | 說明 |
planId | String | 計劃 ID,為下發欄位的 plan_id 取得 |
name | String | 計劃名稱,為下發欄位的 cname 取得 |
content | String | 計劃內容,為下發計劃欄位的 popup_window_content 中的 content 字段 |
type | SDK 內定義枚舉 Type | 觸達類型,為 SDK 內枚舉,PRESET 為預置彈窗,CUSTOMIZED 為自定義觸達 |
5.3.2. 狀態碼說明
失敗或成功狀態碼,失敗時會回調campaignFailed,並且觸發的 $PlanPopupDisplay 的 $sf_succeed 為 false,$sf_fail_reason 值為失敗原因。
觸達介面呼叫情況 | 發生情況 | 失敗原因(errorMessage) | 失敗狀態碼 (errorCode) | 備註 | |
1 | 失敗 | SensorsFocusCampaignListener 介面為空 | 自定義觸達計劃未實現彈窗生命周期回調 | 1006 | |
2 | is_trigger 為false | 計劃下發 is_trigger 為 false | 1005 | ||
3 | campaignShouldStart 返回 false | campaignShouldStart 介面返回 false | 1004 | ||
4 | 對照組,舊版邏輯 | 對照組 | 1003 | 舊版本相容處理 | |
5 | Activity 在後台,僅限彈窗,舊版邏輯 | 內部記錄失敗原因為空字串,不會傳遞給開發者 | 1002 | 舊版本仍然會觸發$PlanPopupDisplay 為成功的事件($sf_succeed 為 true,且沒有 $sf_fail_reason 屬性)iOS 不會有這種情況, 所以考慮的是 Android 保持現狀,和之前一樣的邏輯 | |
6 | 預覽 JSON 資訊解析失敗,舊版邏輯 | 預覽資訊解析失敗,請檢查計劃配置 | 1001 | ||
8 | 成功 | 展示彈窗 | - | - | |
9 | 自定義觸達 | - | - |
6. 彈窗測試
6.1. 建立運營計劃
首先在神策智慧運營中建立運營計畫,並且「觸發條件」中的「平台類型」選擇 Android,然後設定好「觸達配置」。 "就可以點擊右側的「測試彈窗」按鈕以打開二維碼。
6.2. 掃描二維碼
使用已安裝了測試 App 的設備,通過手機自帶的系統瀏覽器掃描二維碼,掃碼後會在瀏覽器中打開二維碼對應的網頁。
6.3. 喚起 App
點擊網頁中的「前往App 測試彈窗」按鈕,若 App 已經成功整合 SDK 則會直接喚起 App 或提示詢問是否喚起 App。 如果不能正常打開App,請強殺App後重試。
6.4. 測試彈窗效果
跳轉成功后,會在 App 內彈出彈窗。 彈窗后的關閉彈窗、點擊按鈕等效果與創建的運營計劃一致。