Show Menu
主題×

Android - 設定行動應用程式

Adobe Target 行動應用程式可視化體驗撰寫器 (VEC) 可讓開發人員在其 Android 行動應用程式上執行一次性設定,並能讓行銷人員使用行動應用程式 VEC 的功能。
如需有關啟用 Adobe Target VEC 擴充功能的詳細資訊,請參閱 Adobe Experience Platform Mobile SDK 中的 Adobe Target - 可視化體驗撰寫器

包含 Mobile SDK 和 Target 資料庫

  1. 如需 SDK V5 初始化的相關資訊,請參閱 初始化 SDK 和設定追蹤
  2. 將下列行新增至「相依性」區段:
    implementation 'com.adobe.marketing.mobile:target:1.+'
    implementation 'com.adobe.marketing.mobile:target-vec:1.+'
    
    
  3. 行動應用程式 VEC 需要在 build.gradle 中包含下列成品以做為相依性。
     implementation 'android.arch.lifecycle:extensions:1.1.1'
     implementation 'io.github.sac:SocketclusterClientJava:1.7.5'
     implementation 'com.android.support:support-compat:28.0.0'
     implementation 'com.android.support:support-fragment:28.0.0'
    
    
  4. AndroidManifest.XML 檔案中加入 Intent Filter,選擇唯一的深層連結配置以進行行動應用程式 VEC 編寫 (例如, [sdkbetabus://com.adobe.sdkbetabus] (sdkbetabus://com.adobe.sdkbetabus) ):
    <activity 
        android:name=".listing.MoviesListingActivity" 
        android:launchMode="singleTask"> 
        <intent-filter> 
            <action android:name="android.intent.action.VIEW" /> 
    
            <category android:name="android.intent.category.DEFAULT" /> 
            <category android:name="android.intent.category.BROWSABLE" /> 
    
            <data 
                android:host="com.adobe.sdkbetabus" 
                android:scheme="sdkbetabus" /> 
        </intent-filter> 
    </activity>
    
    
  5. 前往您的行動專案,並在 Application::onCreate override 結尾處插入下列行:
    public class SDKTest extends MultiDexApplication { 
    
        @Override 
        public void onCreate() { 
            /* Put Your App's implementation */ 
            MobileCore.setApplication(this); 
            MobileCore.setLogLevel(LoggingMode.DEBUG); 
            MobileCore.configureWithAppID("YOUR_ADOBE_LAUNCH_APP_ID"); 
    
            ... 
            try { 
                TargetVEC.registerExtension(); //Single line code to initialize TargetVEC
                Target.registerExtension();
                Identity.registerExtension();
                Lifecycle.registerExtension();
                Signal.registerExtension();
                MobileCore.start(null);
            } catch (InvalidInitException e) { 
              .. 
            }
        }
    
    /* Rest of Application test goes here ... */
    
    
  6. 如果您的建置無法正常運作,請檢閱以下提供的專案範例是否為立即可用,並檢閱以下位置的變更:
    1. Application::OnCreate override
    2. AndroidManifest.XML
    3. Android 應用程式的 build.gradle

在您的行動應用程式中設定目標檢視

Adobe Mobile SDK 公開一種新方法,供開發人員在每次呈現新檢視時觸發。作為開發人員,您必須確保檢視已命名唯一名稱,而且 targetView 呼叫位於 UI 主要執行緒上。在本節中,我們會先示範如何使用兩個不同的示範應用程式插入這些呼叫,並討論如何為任何 Android 應用程式正確插入目標檢視 API 呼叫的一般準則。
如果未觸發 targetView function ,VEC 擴充功能會嘗試從 Android 活動中識別檢視。若為沒有動態檢視的應用程式,此步驟可為選用。
可透過函數呼叫觸發目標檢視。任何鎖定目標的參數均可選擇在此檢視中提供。
public class TargetVEC { 
   
   /** 
    * Marks a view hierarchy for editing in Mobile App VEC.  Call must insert when the view hierarchy 
    * is memory and committed to being shown, but not yet shown on the screen. 
    * 
    * @param viewName the unique Target View Name 
    */ 
   public static void targetView(String viewName); 
  
  /** 
   * Trigger Target view 
   * Triggering a Target view may cause Target offers to be applied on the current container component. 
   * Note that Target offers are applied from local Target cache, so flicker should be negligible. 
   * 
   * @param viewName Mandatory Target View name, which must be unique at app level 
   * @param parameters Parameters to be included in the next Target call 
   */ 
  
    public static void targetView(String viewName, TargetParameters parameters); 
}

我們第一個專案範例是簡單的匯流排排程應用程式的模型。若要設定此應用程式以用於行動應用程式 VEC:
  1. 在 Android Studio 中開啟專案,該專案包含封裝子目錄 build.gradle 中的 BusBooking 檔案。
  2. DemoApplication::OnCreate 方法中,新增 TargetVEC.registerExtension() 以註冊 Target VEC 擴充功能以及其他擴充功能。
  3. 建立並執行應用程式
  4. 若要進入行動應用程式 VEC 編寫模式,請使用 sdkbetabus://com.adobe.sdkbetabus 做為其 URL 配置,然後在裝置上開啟一般的深層連結 (請參閱以下指示)。
透過這個簡單的匯流排預訂應用程式,我們使用與活動生命週期相關聯之所有自動產生的「目標檢視」。此外,我們藉由在點擊隱藏按鈕 (螢幕上的商品影像) 時,在動態新增的自訂檢視元素上,呼叫「目標檢視 API」來示範 API 的靈活性。這個新「目標檢視」的實作方法是透過在 OfferDetailsActivity.java:40 的程式碼中插入 API 呼叫。點擊隱藏按鈕時,會觸發名為 "SURPRISE_VIEW" 的新「目標檢視」事件,讓行銷人員可以更精確地鎖定應用程式體驗的變更作為目標。
鎖定動態檢視插入作為目標:
package com.adobe.target.examples.bus; 
   
import android.app.DialogFragment; 
import android.os.Bundle; 
import android.os.Handler; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.LinearLayout; 
import android.widget.Toast; 
   
import com.adobe.target.mobile.TargetVEC; 
   
/** 
 * This activity class is responsible to show offer details 
 */ 
public class OfferDetailsActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_offer_details); 
        setUpToolBar(); 
        final Handler mainHandler = new Handler(getApplicationContext().getMainLooper()); 
   
        final View surpriseView = getLayoutInflater().inflate(R.layout.suprise_layout, 
                (ViewGroup) findViewById(android.R.id.content), false); 
   
        final View imagePresentView = this.findViewById(R.id.image_present); 
        final LinearLayout currentLayout = this.findViewById(R.id.offer_layout); 
   
        imagePresentView.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                Toast.makeText(getApplicationContext(),"Surprise!", Toast.LENGTH_SHORT).show(); 
                mainHandler.post(new Runnable() { 
                    @Override 
                    public void run() { 
                        currentLayout.addView(surpriseView); 
                        TargetVEC.targetView("SURPRISE_VIEW"); 
                        currentLayout.invalidate(); 
                    } 
                }); 
                // One-shot.  Remove clicker afterwards. 
                imagePresentView.setOnClickListener(null); 
            } 
        }); 
    } 
   
    private void setUpToolBar() { 
        Toolbar toolbar = findViewById(R.id.toolbar); 
        toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_material); 
        toolbar.setTitle("Buy 1 Get 1"); 
        toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                onBackPressed(); 
            } 
        }); 
    } 
   
    @Override 
    protected void onPause() { 
        super.onPause();
        MobileCore.lifecyclePause();
    } 
   
    @Override 
    protected void onResume() { 
        super.onResume();
        MobileCore.lifecycleStart(null);
    } 
}

設定設定檔參數和其他全域參數

現在,我們支援設定會在每個和所有 API 呼叫中傳遞的全域參數,並支援將 mbox/檢視參數傳遞至相應的檢視。
參數包括:
  • mbox/檢視參數
  • 設定檔參數
  • 產品參數
  • 訂單參數
全域參數支援:
Map<String, String> mboxParams = new HashMap<>();  //Mbox or view params 
mboxParams.put("mboxparam1", "mboxvalue1"); 
Map<String, String> profileParams = new HashMap<>();  //Profile params 
profileParams.put("profilekey1", "profilevalue1"); 
  
TargetVEC.setGlobalRequestParameters(new TargetParameters.Builder() 
        .parameters(mboxParams) 
        .profileParameters(profileParams) 
        .product(new TargetProduct("1234", "furniture")) 
        .order(new TargetOrder("12343", 123.45, Arrays.asList("100", "200"))) 
        .build());

傳遞下一個檢視觸發的參數:
我們提供了一些根據預設建立的自動檢視,例如應用程式中存在之每個活動和片段的「 AUTO_<activity|fragment name> 」若要傳遞這些參數,您可以呼叫下列 API:
Map<String, String> mboxParams = new HashMap<>();  //Mbox or view params 
mboxParams.put("viewKey1", "viewparam1"); 
Map<String, String> profileParams = new HashMap<>();  //Profile params 
profileParams.put("profilekeyforview1", "profilevalueforview1"); 
  
TargetVEC.setRequestParameters(new TargetParameters.Builder() 
        .parameters(mboxParams) 
        .profileParameters(profileParams) 
        .product(new TargetProduct("1234", "furniture")) 
        .order(new TargetOrder("12343", 123.45, Arrays.asList("100", "200"))) 
        .build());

將參數傳遞至特定檢視:
我們已經看過 API 透過 TargetVEC.targetView("view_name") 傳遞至觸發檢視。您也可以傳遞專屬於特定檢視的參數,如下所示:
Map<String, String> profileParams = new HashMap<>(); 
profileParams.put("surprisekey1", "surprisevalue1");  //ProfileParams 
TargetVEC.targetView("SURPRISE_VIEW", 
        new TargetParameters.Builder() 
                .profileParameters(profileParams) 
                .product(new TargetProduct("3354", "kitchen")) 
                .build());

明確地呼叫預先擷取 API

在某些情況下,您可能會想再次呼叫預先擷取 API,以重新整理快取中儲存的選件。下列已公開的 API 為:
  • prefetchOffers
    /** 
     * Prefetch Target offers. 
     * Note that calling this will pre-hide the current layout, until Target offers are prefetched 
     * and applied to currently visible Target views, possibly causing flicker, thus it's recommended 
     * to call this method inside the containing component's onCreate() lifecycle method 
     */ 
    public static void prefetchOffers();
    
    
  • prefetchOffersBackground
    /** 
     * Prefetch Target offers in the background. 
     * Note, that in contrast to prefetchOffers(), calling this method will NOT pre-hide 
     * the current layout, instead prefetched Target offers will be only be cached and will subsequently 
     * be applied as Target Views are being triggered. 
     */ 
    public static void prefetchOffersBackground();
    
    

教學課程: 在行動 Android 應用程式中實作 Experience Cloud

完成此教學課程之後,您將能:
  • 建立行動 Launch 屬性
  • 在 Android 應用程式中安裝 Launch 屬性
  • 實作下列 Adobe Experience Cloud 解決方案:
    • Experience Cloud ID 服務
    • Adobe Target
    • Adobe Analytics
    • Adobe Audience Manager
  • 透過開發、測試和生產環境在 Launch 中發佈變更