All Products
Search
Document Center

SuperApp:[Pengembangan Plug-in] Pengembangan Plug-in Analisis Data MiniApp

Last Updated:Jun 28, 2025

Artikel ini memperkenalkan plug-in analisis data serta metode penyesuaian untuk program mini.

I. Gambaran Umum Kerangka Kerja Plug-in dan Plug-in Analisis QuickTracking

image.jpeg

1. Frontend

Program mini perlu mengintegrasikan "MiniApp PageEvent Report JS-library" untuk mendapatkan "MiniApp Page Lifecycle Events" dan mengirimkannya ke LifeCycleService melalui jsapi.Catatan: Fitur ini hanya mendukung kontainer miniapp WindVane.

1.1. Cara Mengintegrasikan Seperti yang ditunjukkan di bawah ini, dalam file HTML miniapp, sertakan tag skrip berikut https://g.alicdn.com/code/npm/@alife/windvane-page-lifecycle-hooks/0.1.0/index.js

Catatan: Urutan penyertaan penting; skrip ini harus disertakan setelah windvane.js.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, maximum-scale=1.0,viewport-fit=cover" />
    <title>EMAS-WindVane JSBridge Demo</title>
    
    <link rel="stylesheet" href="static/css/main.css" />
    
  </head>
  <body>
    <div id="app"></div>
    <!-- <script src="//g.alicdn.com/code/lib/react/18.2.0/umd/react.development.js"></script> -->
    <!-- <script src="//g.alicdn.com/code/lib/react-dom/18.2.0/umd/react-dom.development.js"></script> -->
    <!-- <script src="https://as.alipayobjects.com/g/component/fastclick/1.0.6/fastclick.js"></script> -->
    <script src="https://g.alicdn.com/mtb/lib-windvane/3.0.0/windvane.js"></script>
    <script src="https://g.alicdn.com/code/npm/@alife/windvane-page-lifecycle-hooks/0.1.0/index.js"></script>
    
    <script src="static/js/bundle.js"></script>
    
  </body>
</html>

1.2. Sinkronisasi Siklus Hidup MiniApp

Siklus hidup miniapp adalah sebagai berikut:

  • onPageStart: Dipicu ketika inisialisasi miniapp selesai (dipicu hanya sekali secara global).

  • onPageShow: Dipicu ketika miniapp membuka halaman atau kembali ke latar depan dari latar belakang.

  • onPageHide: Dipicu ketika miniapp meninggalkan halaman atau pindah ke latar belakang dari latar depan.

  • onPageEnd: Dipicu ketika miniapp ditutup.

Parameter halaman yang dilaporkan untuk miniapp adalah sebagai berikut:

  • url: URL halaman saat ini, contohnya ,https://g.alicdn.com/superapp-fe-templates/JSAPITest/1.0.1/index.html#/.

  • fullUrl: URL halaman saat ini, contohnya ,https://g.alicdn.com/superapp-fe-templates/JSAPITest/1.0.1/index.html?spm=defwork.home.0.0.3f085c4bPdhs2c#/.

  • title: Judul halaman saat ini.

  • userAgent: navigator.userAgent dari perangkat saat ini, contohnya "Mozilla/5.0 (Linux; Android 11; IN2010 Build/RP1A.201005.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/132.0.6834.163 Mobile Safari/537.36 TTID/600000@DemoApp_Android_1.0.0 WindVane/8.5.0".

  • viewportHeight: Tinggi viewport saat ini, contohnya 744.

  • viewportWidth: Lebar viewport saat ini, contohnya 384.

  • referrer: Alamat sumber halaman yang diminta saat ini, contohnya ,https://1511899753493821546496.app.mini.windvane.suite.emas.alibaba.com/.

  • user_id: userId, parameter userId dalam EMASUserInfoService(iOS),IUserInfoService(Android ) yang didaftarkan oleh inisialisasi kontainer.

  • mini_app_id: appId dari miniapp yang dibuka.

  • mini_app_version: Versi dari miniapp yang dibuka.

  • mini_app_type: Jenis dari miniapp yang dibuka, seperti windvane atau uniapp.

  • app_code: Kode aplikasi yang diteruskan saat inisialisasi kontainer.

  • timestamp: Cap waktu saat ini ketika halaman dipicu.

1.2.1. Membuka MiniApp

image.png

Seperti yang ditunjukkan pada diagram, JSAPI akan dipanggil, dan WVMiniPageEvent akan melaporkan onPageStart dan onPageShow, bersama dengan parameter halaman yang ditunjukkan pada diagram.

1.2.2. Navigasi Halaman

image.png

Seperti yang ditunjukkan pada diagram, JSAPI akan dipanggil, dan WVMiniPageEvent akan melaporkan onPageHide untuk halaman saat ini dan onPageShow untuk halaman target, bersama dengan parameter halaman yang ditunjukkan pada diagram.

1.2.3. Latar Depan ke Latar Belakang

image.png

Seperti yang ditunjukkan pada diagram, JSAPI akan dipanggil, dan WVMiniPageEvent akan melaporkan onPageHide untuk halaman saat ini, bersama dengan parameter halaman yang ditunjukkan pada diagram.

1.2.4. Latar Belakang ke Latar Depan

image.png

Seperti yang ditunjukkan pada diagram, JSAPI akan dipanggil, dan WVMiniPageEvent akan melaporkan onPageShow untuk halaman saat ini, bersama dengan parameter halaman yang ditunjukkan pada diagram.

1.2.5. Menutup MiniApp

image.png

Seperti yang ditunjukkan pada diagram, JSAPI akan dipanggil, dan WVMiniPageEvent akan melaporkan onPageHide dan onPageEnd, bersama dengan parameter halaman yang ditunjukkan pada diagram.

2. Klien: Android & iOS

2.1 Event MiniApp: Mendengarkan event siklus hidup program mini, termasuk:

Event Siklus Hidup MiniApp

Android Activity

iOS ViewController

start

onCreate

viewDidLoad

show

onResume

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];

hide

onPause

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];

close

onDestory

viewWillDisappear

(if (self.isMovingFromParentViewController|| self.navigationController.isBeingDismissed))

2.2 Mendengarkan event siklus hidup halaman program mini (hanya mendukung WindVane).

2.3 Kerangka kerja plugin yang digunakan untuk manajemen plugin:

  • Digunakan untuk mendaftarkan plugin.

  • Digunakan untuk mengambil plugin tertentu.

2.4 LifeCycleService

  • Digunakan untuk menerima event siklus hidup halaman miniapp yang dikirim oleh 'MiniApp PageEvent Report JS-library' melalui jsapi (MiniAppPageEvent jsapi).

  • Digunakan untuk mendengarkan event siklus hidup miniapp (MiniApp Event).

  • Mengirimkan event siklus hidup halaman miniapp dan event siklus hidup miniapp ke plugin pelaporan melalui objek observer (Observer/Callback).

Saat ini, event siklus hidup yang dipantau oleh LifeCycleService adalah sebagai berikut.

Jenis Event

Event Halaman Mini App

Event Mini App

start

YA

YA

show

YA

YA

hide

YA

YA

end/close

YA (hanya untuk Android)

YA

II. Pengembangan Plugin Kustom

1. Impor paket dependensi.

implementation com.aliyun.emas.suite.foundation:mini-app-plugin-base:1.0.0
pod 'MiniAppPluginBase'

2. Pengembangan plugin.

import com.alibaba.emas.android.windvane.mini.app.pluginsdk.plugin.BasePlugin;

public class CustomPlugin extends BasePlugin {

    public CustomPlugin(Context context, ...) {
        super(context);

        ...
    }

    @Override
    public void start() {
        ...
    }

    ...
}
#import <EMASMiniAppService/EMASBasePlugin.h>

@interface EMASCustomPlugin : EMASBasePlugin
@property(nonatomic, strong) EMASPluginContext *plugContext;

@implementation EMASCustomPlugin

- (void)setPluginContext:(EMASPluginContext *)pluginContext {
    self.plugContext = pluginContext;
}

- (void)start {
    [super start];
    // daftarkan Objek Observer
}
import UIKit
import EMASMiniAppService

@objc class EMASCustomPlugin: EMASBasePlugin, EMASIMiniAppEventObserver, EMASIMiniAppPageEventObserver {

    var plugContext:EMASPluginContext?
    
    //Catatan: perlu memanggil metode Swift setPluginContext, ingat untuk menambahkan @objc
    @objc func setPluginContext(_ pluginContext: EMASPluginContext) {
        self.plugContext = pluginContext
    }
    
    override func start() {
        super.start()
        ///daftarkan Objek Observer
    }
}

3. Pendaftaran Plugin.

CustomPlugin customPlugin = new CustomPlugin(context, ...);


miniAppService.registerPlugin("NamaPlugin", customPlugin);
EMASCustomPlugin *plugin = [[EMASCustomPlugin alloc] init];
[miniAppService registerPlugin:@"NamaPlugin" plugin:plugin];
let plugin = EMASCustomPlugin()
miniAppService.registerPlugin("NamaPlugin", plugin: plugin)

4. Pengambilan Plugin.

import com.alibaba.module.android.mini.app.service.plugin.PluginService;

BasePlugin plugin = PluginService.getInstance().getPlugin("NamaPlugin");
EMASBasePlugin *plugin = [miniAppService getPlugin:@"NamaPlugin"];
let plugin = miniAppService.getPlugin("NamaPlugin")

5. Startup Plugin.

import com.alibaba.module.android.mini.app.service.plugin.PluginService;

// Metode 1
CustomPlugin customPlugin = new CustomPlugin(context, ...);
customPlugin.start();

// Metode 2
BasePlugin plugin = PluginService.getInstance().getPlugin("NamaPlugin");
plugin.start();
// Metode 1
EMASCustomPlugin *plugin = [[EMASCustomPlugin alloc] init];
[miniAppService registerPlugin:@"NamaPlugin" plugin:plugin];
[plugin start];

// Metode 2
EMASBasePlugin *plugin = [miniAppService getPlugin:@"NamaPlugin"];
[plugin start];
/// Metode 1
let plugin = EMASCustomPlugin()
miniAppService.registerPlugin("NamaPlugin", plugin: plugin)
plugin.start()

/// Metode 2
let plugin = miniAppService.getPlugin("NamaPlugin")
plugin.start()

6. Ambil LifeCycleService di dalam plugin.

import com.alibaba.emas.android.windvane.mini.app.pluginsdk.environment.PluginEnv;
import com.alibaba.emas.android.windvane.mini.app.pluginsdk.ILifeCycleService;


ILifeCycleService lifeCycleService = PluginEnv.getInstance().getContainerContext().getLifeCycleService()
#import <EMASMiniAppService/EMASLifeCycleService.h>
#import <EMASMiniAppService/EMASIMiniAppEventObserver.h>
#import <EMASMiniAppService/EMASIMiniAppPageEventObserver.h>
@interface EMASCustomPlugin()<EMASIMiniAppEventObserver, EMASIMiniAppPageEventObserver>
@property(nonatomic, strong) EMASPluginContext *plugContext;
@end
@implementation EMASCustomPlugin
- (void)getlifeCycleService {
    EMASLifeCycleService *lifeCycleService = self.plugContext.context.getLifeCycleService;
}
@objc class EMASCustomPlugin: EMASBasePlugin, EMASIMiniAppEventObserver, EMASIMiniAppPageEventObserver {

    var plugContext:EMASPluginContext?
    func getlifeCycleService() {
       let lifeCycleService = self.plugContext?.context.getLifeCycleService()
    }
}

III. Pengembangan Plugin Pelaporan Kustom

image.jpeg

1. Implementasikan objek observer untuk event siklus hidup MiniApp dan event siklus hidup halaman MiniApp

Parameter miniApp adalah sebagai berikut:

  • user_id: userId, parameter userId dalam EMASUserInfoService(iOS),IUserInfoService(Android ) yang didaftarkan oleh inisialisasi kontainer.

  • mini_app_id: appId dari miniapp yang dibuka.

  • mini_app_version: Versi dari miniapp yang dibuka.

  • mini_app_type: Jenis dari miniapp yang dibuka, seperti windvane atau uniapp.

  • app_code: Kode aplikasi yang diteruskan saat inisialisasi kontainer.

  • timestamp: Cap waktu saat ini ketika halaman dipicu.

import com.alibaba.emas.android.windvane.mini.app.pluginsdk.observer.IMiniAppEventObserver;
import com.alibaba.emas.android.windvane.mini.app.pluginsdk.observer.IMiniAppPageEventObserver;
import com.alibaba.emas.android.windvane.mini.app.pluginsdk.plugin.BasePlugin;

public class CustomReportPlugin extends BasePlugin implements IMiniAppEventObserver, IMiniAppPageEventObserver {

    // Implementasi callback event siklus hidup MiniApp
    @Override
    void onMiniAppStart(Map<String, Object> params) {
        String userId = (String) params.get("user_id");
        String appId = (String) params.get("mini_app_id");
        String version = (String) params.get("mini_app_version");
        String appType = (String) params.get("mini_app_type");
        String appCode = (String) params.get("app_code");
        String timestamp = (String) params.get("timestamp");
        ...
    }

    @Override
    void onMiniAppClose(Map<String, Object> params) {
        String userId = (String) params.get("user_id");
        String appId = (String) params.get("mini_app_id");
        String version = (String) params.get("mini_app_version");
        String appType = (String) params.get("mini_app_type");
        String appCode = (String) params.get("app_code");
        String timestamp = (String) params.get("timestamp");
        ...
    }

    @Override
    void onMiniAppShow(Map<String, Object> params) {
        String userId = (String) params.get("user_id");
        String appId = (String) params.get("mini_app_id");
        String version = (String) params.get("mini_app_version");
        String appType = (String) params.get("mini_app_type");
        String appCode = (String) params.get("app_code");
        String timestamp = (String) params.get("timestamp");
        ...
    }

    @Override
    void onMiniAppHide(Map<String, Object> params) {
        String userId = (String) params.get("user_id");
        String appId = (String) params.get("mini_app_id");
        String version = (String) params.get("mini_app_version");
        String appType = (String) params.get("mini_app_type");
        String appCode = (String) params.get("app_code");
        String timestamp = (String) params.get("timestamp");
        ...
    }


    // Implementasi callback event siklus hidup halaman MiniApp
    void onPageStart(Map<String, Object> params) {
        String url = (String) params.get("url");
        String fullUrl = (String) params.get("fullUrl");
        String title = (String) params.get("title");
        String referrer = (String) params.get("referrer");
        String userAgent = (String) params.get("userAgent");
        double viewportWidth = (double) params.get("viewportWidth");
        double viewportHeight = (double) params.get("viewportHeight");
        String userId = (String) params.get("user_id");
        String appId = (String) params.get("mini_app_id");
        String version = (String) params.get("mini_app_version");
        String appType = (String) params.get("mini_app_type");
        String appCode = (String) params.get("app_code");
        String timestamp = (String) params.get("timestamp");
        ...
    }
    
    void onPageHide(Map<String, Object> params) {
        String url = (String) params.get("url");
        String fullUrl = (String) params.get("fullUrl");
        String title = (String) params.get("title");
        String referrer = (String) params.get("referrer");
        String userAgent = (String) params.get("userAgent");
        double viewportWidth = (double) params.get("viewportWidth");
        double viewportHeight = (double) params.get("viewportHeight");
        String userId = (String) params.get("user_id");
        String appId = (String) params.get("mini_app_id");
        String version = (String) params.get("mini_app_version");
        String appType = (String) params.get("mini_app_type");
        String appCode = (String) params.get("app_code");
        String timestamp = (String) params.get("timestamp");
        ...
    }

    void onPageShow(Map<String, Object> params) {
        String url = (String) params.get("url");
        String fullUrl = (String) params.get("fullUrl");
        String title = (String) params.get("title");
        String referrer = (String) params.get("referrer");
        String userAgent = (String) params.get("userAgent");
        double viewportWidth = (double) params.get("viewportWidth");
        double viewportHeight = (double) params.get("viewportHeight");
        String userId = (String) params.get("user_id");
        String appId = (String) params.get("mini_app_id");
        String version = (String) params.get("mini_app_version");
        String appType = (String) params.get("mini_app_type");
        String appCode = (String) params.get("app_code");
        String timestamp = (String) params.get("timestamp");
        ...
    }

    void onPageEnd(Map<String, Object> params) {
        String url = (String) params.get("url");
        String fullUrl = (String) params.get("fullUrl");
        String title = (String) params.get("title");
        String referrer = (String) params.get("referrer");
        String userAgent = (String) params.get("userAgent");
        double viewportWidth = (double) params.get("viewportWidth");
        double viewportHeight = (double) params.get("viewportHeight");
        String userId = (String) params.get("user_id");
        String appId = (String) params.get("mini_app_id");
        String version = (String) params.get("mini_app_version");
        String appType = (String) params.get("mini_app_type");
        String appCode = (String) params.get("app_code");
        String timestamp = (String) params.get("timestamp");
        ...
    }
}
@interface EMASCustomPlugin()<EMASIMiniAppEventObserver, EMASIMiniAppPageEventObserver>
@property(nonatomic, strong) EMASPluginContext *plugContext;
@end
@implementation EMASCustomPlugin
#pragma mark -EMASIMiniAppEventObserver
- (void)onMiniAppStart:(NSDictionary *)params {
    NSString *appId = [params objectForKey:@"mini_app_id"];
    NSString *appType = [params objectForKey:@"mini_app_type"];
    NSString *userId = [params objectForKey:@"user_id"];
    NSString *version = [params objectForKey:@"mini_app_version"];
    NSString *appCode = [params objectForKey:@"app_code"];
    NSString *timestamp = [params objectForKey:@"timestamp"];
    ...
}
-(void)onMiniAppShow:(NSDictionary *)params {
    NSString *appId = [params objectForKey:@"mini_app_id"];
    NSString *appType = [params objectForKey:@"mini_app_type"];
    NSString *userId = [params objectForKey:@"user_id"];
    NSString *version = [params objectForKey:@"mini_app_version"];
    NSString *appCode = [params objectForKey:@"app_code"];
    NSString *timestamp = [params objectForKey:@"timestamp"];
    ...
}
- (void)onMiniAppHide:(NSDictionary *)params {
    NSString *appId = [params objectForKey:@"mini_app_id"];
    NSString *appType = [params objectForKey:@"mini_app_type"];
    NSString *userId = [params objectForKey:@"user_id"];
    NSString *version = [params objectForKey:@"mini_app_version"];
    NSString *appCode = [params objectForKey:@"app_code"];
    NSString *timestamp = [params objectForKey:@"timestamp"];
    ...
}
- (void)onMiniAppClose:(NSDictionary *)params {
    NSString *appId = [params objectForKey:@"mini_app_id"];
    NSString *appType = [params objectForKey:@"mini_app_type"];
    NSString *userId = [params objectForKey:@"user_id"];
    NSString *version = [params objectForKey:@"mini_app_version"];
    NSString *appCode = [params objectForKey:@"app_code"];
    NSString *timestamp = [params objectForKey:@"timestamp"];
    ...
}

#pragma mark -EMASIMiniAppPageEventObserver
- (void)onPageStart:(NSDictionary *)params {
    NSString *url = [params objectForKey:@"url"];
    NSString *fullUrl = [params objectForKey:@"fullUrl"];
    NSString *title = [params objectForKey:@"title"];
    NSString *referrer = [params objectForKey:@"referrer"];
    NSString *userAgent = [params objectForKey:@"userAgent"];
    double viewportWidth = [params objectForKey:@"viewportWidth"];
    double viewportHeight = [params objectForKey:@"viewportHeight"];
    NSString *appId = [params objectForKey:@"mini_app_id"];
    NSString *appType = [params objectForKey:@"mini_app_type"];
    NSString *userId = [params objectForKey:@"user_id"];
    NSString *version = [params objectForKey:@"mini_app_version"];
    NSString *appCode = [params objectForKey:@"app_code"];
    NSString *timestamp = [params objectForKey:@"timestamp"];
    ...
}
- (void)onPageShow:(NSDictionary *)params {
    NSString *url = [params objectForKey:@"url"];
    NSString *fullUrl = [params objectForKey:@"fullUrl"];
    NSString *title = [params objectForKey:@"title"];
    NSString *referrer = [params objectForKey:@"referrer"];
    NSString *userAgent = [params objectForKey:@"userAgent"];
    double viewportWidth = [params objectForKey:@"viewportWidth"];
    double viewportHeight = [params objectForKey:@"viewportHeight"];
    NSString *appId = [params objectForKey:@"mini_app_id"];
    NSString *appType = [params objectForKey:@"mini_app_type"];
    NSString *userId = [params objectForKey:@"user_id"];
    NSString *version = [params objectForKey:@"mini_app_version"];
    NSString *appCode = [params objectForKey:@"app_code"];
    NSString *timestamp = [params objectForKey:@"timestamp"];
    ...
}
- (void)onPageHide:(NSDictionary *)params {
    NSString *url = [params objectForKey:@"url"];
    NSString *fullUrl = [params objectForKey:@"fullUrl"];
    NSString *title = [params objectForKey:@"title"];
    NSString *referrer = [params objectForKey:@"referrer"];
    NSString *userAgent = [params objectForKey:@"userAgent"];
    double viewportWidth = [params objectForKey:@"viewportWidth"];
    double viewportHeight = [params objectForKey:@"viewportHeight"];
    NSString *appId = [params objectForKey:@"mini_app_id"];
    NSString *appType = [params objectForKey:@"mini_app_type"];
    NSString *userId = [params objectForKey:@"user_id"];
    NSString *version = [params objectForKey:@"mini_app_version"];
    NSString *appCode = [params objectForKey:@"app_code"];
    NSString *timestamp = [params objectForKey:@"timestamp"];
    ...
}
- (void)onPageEnd:(NSDictionary *)params {
    // Metode ini tidak dipanggil di iOS
}
import UIKit
import EMASMiniAppService

@objc class EMASCustomPlugin: EMASBasePlugin, EMASIMiniAppEventObserver, EMASIMiniAppPageEventObserver {

    var plugContext:EMASPluginContext?
    
    ///EMASIMiniAppEventObserver
    func onMiniAppStart(_ params: [AnyHashable : Any]) {
        let appId = params["mini_app_id"] as? String
        let appType = params["mini_app_type"] as? String
        let userId = params["user_id"] as? String
        let version = params["mini_app_version"] as? String
        let appCode = params["app_code"] as? String
        let timestamp = params["timestamp"] as? String
        
    }
    
    func onMiniAppShow(_ params: [AnyHashable : Any]) {
        let appId = params["mini_app_id"] as? String
        let appType = params["mini_app_type"] as? String
        let userId = params["user_id"] as? String
        let version = params["mini_app_version"] as? String
        let appCode = params["app_code"] as? String
        let timestamp = params["timestamp"] as? String
    }
    
    func onMiniAppHide(_ params: [AnyHashable : Any]) {
        let appId = params["mini_app_id"] as? String
        let appType = params["mini_app_type"] as? String
        let userId = params["user_id"] as? String
        let version = params["mini_app_version"] as? String
        let appCode = params["app_code"] as? String
        let timestamp = params["timestamp"] as? String
    }
    
    func onMiniAppClose(_ params: [AnyHashable : Any]) {
        let appId = params["mini_app_id"] as? String
        let appType = params["mini_app_type"] as? String
        let userId = params["user_id"] as? String
        let version = params["mini_app_version"] as? String
        let appCode = params["app_code"] as? String
        let timestamp = params["timestamp"] as? String
    }
    
    ///EMASIMiniAppPageEventObserver
    func onPageStart(_ params: [AnyHashable : Any]) {
        let url = params["url"] as? String
        let fullUrl = params["fullUrl"] as? String
        let title = params["title"] as? String
        let referrer = params["referrer"] as? String
        let userAgent = params["userAgent"] as? String
        let viewportWidth = params["viewportWidth"] as? Double
        let viewportHeight = params["viewportHeight"] as? Double
        let appId = params["mini_app_id"] as? String
        let appType = params["mini_app_type"] as? String
        let userId = params["user_id"] as? String
        let version = params["mini_app_version"] as? String
        let appCode = params["app_code"] as? String
        let timestamp = params["timestamp"] as? String
        
    }
    
    func onPageShow(_ params: [AnyHashable : Any]) {
        let url = params["url"] as? String
        let fullUrl = params["fullUrl"] as? String
        let title = params["title"] as? String
        let referrer = params["referrer"] as? String
        let userAgent = params["userAgent"] as? String
        let viewportWidth = params["viewportWidth"] as? Double
        let viewportHeight = params["viewportHeight"] as? Double
        let appId = params["mini_app_id"] as? String
        let appType = params["mini_app_type"] as? String
        let userId = params["user_id"] as? String
        let version = params["mini_app_version"] as? String
        let appCode = params["app_code"] as? String
        let timestamp = params["timestamp"] as? String
    }
    
    func onPageHide(_ params: [AnyHashable : Any]) {
        let url = params["url"] as? String
        let fullUrl = params["fullUrl"] as? String
        let title = params["title"] as? String
        let referrer = params["referrer"] as? String
        let userAgent = params["userAgent"] as? String
        let viewportWidth = params["viewportWidth"] as? Double
        let viewportHeight = params["viewportHeight"] as? Double
        let appId = params["mini_app_id"] as? String
        let appType = params["mini_app_type"] as? String
        let userId = params["user_id"] as? String
        let version = params["mini_app_version"] as? String
        let appCode = params["app_code"] as? String
        let timestamp = params["timestamp"] as? String
    }
    func onPageEnd(_ params: [AnyHashable : Any]) {
        /// Metode ini tidak dipanggil di iOS
    }
}

2. Daftarkan Objek Observer

import com.alibaba.emas.android.windvane.mini.app.pluginsdk.environment.PluginEnv;

public class CustomReportPlugin extends BasePlugin implements IMiniAppEventObserver, IMiniAppPageEventObserver {
    
    private void registerObserver() {
        PluginEnv.getInstance().getContainerContext().getLifeCycleService().registerMiniAppObserver(this);
        PluginEnv.getInstance().getContainerContext().getLifeCycleService().registerMiniPageObserver(this);
    }

}
#import <EMASMiniAppService/EMASIMiniAppEventObserver.h>
#import <EMASMiniAppService/EMASIMiniAppPageEventObserver.h>
@interface EMASCustomPlugin()<EMASIMiniAppEventObserver, EMASIMiniAppPageEventObserver>
@property(nonatomic, strong) EMASPluginContext *plugContext;
@end
@implementation EMASCustomPlugin
- (void)registerObserver {
    [self.plugContext.context.getLifeCycleService registerMiniAppObserver:self];
    [self.plugContext.context.getLifeCycleService registerMiniPageObserver:self];
}
import UIKit
import EMASMiniAppService

@objc class EMASCustomPlugin: EMASBasePlugin, EMASIMiniAppEventObserver, EMASIMiniAppPageEventObserver {

    var plugContext:EMASPluginContext?
    
    func registerObserver() {
        self.plugContext?.context.getLifeCycleService().registerMiniAppObserver(self)
        self.plugContext?.context.getLifeCycleService().registerMiniPageObserver(self)
    }
}

3. Daftarkan, Ambil, dan Mulai Plugin

Untuk detailnya, lihat bagian 2.3 hingga 2.5.

4. Event MiniApp Lainnya

Custom jsapi

IV. Catatan

  1. Setelah membuka antarmuka miniapp, onPageShow akan dipanggil dua kali.

  2. Di iOS, penutupan miniapp tidak akan memicu event onPageEnd (Anda perlu memanggil metode penutupan halaman dalam metode penutupan miniapp).