Flutter移动分析推送插件umeng_analytics_push的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter移动分析推送插件umeng_analytics_push的使用

使用说明

导入依赖

pubspec.yaml文件中添加以下依赖:

dependencies:
  umeng_analytics_push: ^x.x.x # 替换为最新版本号,plugin1.x支持flutter1.x,plugin2.x支持flutter2.x

# 或者通过Git导入(选择一种方式,Git版本可能会更及时更新)

dependencies:
  umeng_analytics_push:
      git:
        url: https://github.com/zileyuan/umeng_analytics_push.git
Android预处理设置(Kotlin示例)
创建自定义FlutterApplication类作为启动类

如果不需要推送功能,uemng_message_secret可以设置为null或空字符串。

package com.demo.umeng.app

import io.flutter.app.FlutterApplication
import io.github.zileyuan.umeng_analytics_push.UmengAnalyticsPushFlutterAndroid

class MyFlutterApplication: FlutterApplication() {
    override fun onCreate() {
        super.onCreate();
        UmengAnalyticsPushFlutterAndroid.androidPreInit(this, "uemng_app_key", "channel", "uemng_message_secret")
    }
}
修改MainActivity,添加Umeng设置
package com.demo.umeng.app

import android.os.Handler
import android.os.Looper
import android.content.Intent
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
import io.github.zileyuan.umeng_analytics_push.UmengAnalyticsPushFlutterAndroid
import io.github.zileyuan.umeng_analytics_push.UmengAnalyticsPushPlugin

class MainActivity: FlutterActivity() {
    var handler: Handler = Handler(Looper.myLooper())

    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);
    }

    override fun onNewIntent(intent: Intent) {
        // 每次回到前台时主动更新并保存intent,然后可以获取最新的intent
        setIntent(intent);
        super.onNewIntent(intent);
    }

    override fun onResume() {
        super.onResume()
        UmengAnalyticsPushFlutterAndroid.androidOnResume(this)
        if (getIntent().getExtras() != null) {
            var message = getIntent().getExtras().getString("message")
            if (message != null && message != "") {
                // 等待引擎加载完成,延迟5秒后发送到界面
                handler.postDelayed(object : Runnable {
                    override fun run() {
                        UmengAnalyticsPushPlugin.eventSink.success(message)
                    }
                }, 5000)
            }
        }
    }

    override fun onPause() {
        super.onPause()
        UmengAnalyticsPushFlutterAndroid.androidOnPause(this)
    }
}
修改AndroidManifest.xml文件
<application
  android:name="com.demo.umeng.app.MyFlutterApplication">
</application>
添加厂商推送通道

请参考官方文档进行详细设置 [umeng:push:vendor]。

修改MyFlutterApplication类:

package com.demo.umeng.app

import io.flutter.app.FlutterApplication
import io.github.zileyuan.umeng_analytics_push.UmengAnalyticsPushFlutterAndroid

class MyFlutterApplication: FlutterApplication() {
    override fun onCreate() {
        super.onCreate();
        UmengAnalyticsPushFlutterAndroid.androidInit(this, "uemng_app_key", "channel", "uemng_message_secret")
        // 注册小米推送(可选)
        UmengAnalyticsPushFlutterAndroid.registerXiaomi(this, "xiaomi_app_id", "xiaomi_app_key")
        // 注册华为推送(可选,需在AndroidManifest.xml中添加其他信息)
        UmengAnalyticsPushFlutterAndroid.registerHuawei(this)
        // 注册Oppo推送(可选)
        UmengAnalyticsPushFlutterAndroid.registerOppo(this, "oppo_app_key", "oppo_app_secret")
        // 注册Vivo推送(可选,需在AndroidManifest.xml中添加其他信息)
        UmengAnalyticsPushFlutterAndroid.registerVivo(this)
        // 注册魅族推送(可选)
        UmengAnalyticsPushFlutterAndroid.registerMeizu(this, "meizu_app_id", "meizu_app_key")
        // 注册荣耀推送(可选,需在AndroidManifest.xml中添加其他信息)
        UmengAnalyticsPushFlutterAndroid.registerHonor(this)
    }
}

修改AndroidManifest.xml,填写真实ID或Key:

<application
  android:name="com.demo.umeng.app.MyFlutterApplication">
    <!-- Vivo推送通道开始(可选) -->
    <meta-data
        android:name="com.vivo.push.api_key"
        android:value="vivo_api_key" />
    <meta-data
        android:name="com.vivo.push.app_id"
        android:value="vivo_app_id" />
    <!-- Vivo推送通道结束 -->

    <!-- 华为推送通道开始(可选) -->
    <meta-data
        android:name="com.huawei.hms.client.appid"
        android:value="appid=huawei_app_id" />
    <!-- 华为推送通道结束 -->
</application>

如果App需要使用Proguard进行混淆打包,请添加以下混淆代码:

-dontwarn com.umeng.**
-dontwarn com.taobao.**
-dontwarn anet.channel.**
-dontwarn anetwork.channel.**
-dontwarn org.android.**
-dontwarn org.apache.thrift.**
-dontwarn com.xiaomi.**
-dontwarn com.huawei.**
-dontwarn com.meizu.**

-keepattributes *Annotation*

-keep class com.taobao.** {*;}
-keep class org.android.** {*;}
-keep class anet.channel.** {*;}
-keep class com.umeng.** {*;}
-keep class com.xiaomi.** {*;}
-keep class com.huawei.** {*;}
-keep class com.meizu.** {*;}
-keep class org.apache.thrift.** {*;}

-keep class com.alibaba.sdk.android.** {*;}
-keep class com.ut.** {*;}
-keep class com.ta.** {*;}

-keep public class **.R$* {
    public static final int *;
}
iOS预处理设置(Swift示例)
修改AppDelegate.swift文件
import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
    override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        GeneratedPluginRegistrant.register(with: self)
        UmengAnalyticsPushFlutterIos.iosPreInit(launchOptions, appkey:"uemng_app_key", channel:"appstore");
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
    }

    // 如果需要处理推送点击事件,使用以下代码
    @available(iOS 10.0, *)
    override func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        let userInfo = response.notification.request.content.userInfo
        UmengAnalyticsPushFlutterIos.handleMessagePush(userInfo)
        completionHandler()
    }
}
修改Runner-Bridging-Header.h文件
#import "GeneratedPluginRegistrant.h"
#import <UMCommon/UMCommon.h>
#import <UMCommon/MobClick.h>
#import <UMPush/UMessage.h>
#import <UserNotifications/UserNotifications.h>
#import <umeng_analytics_push/UmengAnalyticsPushIos.h>
在Flutter中使用
初始化Umeng

在同意“隐私政策”后调用初始化方法,两个参数开关,一个是日志,另一个是推送。

import 'package:umeng_analytics_push/umeng_analytics_push.dart';

UmengAnalyticsPush.initUmeng(false, true);
点击推送响应
import 'package:umeng_analytics_push/umeng_analytics_push.dart';
import 'package:umeng_analytics_push/message_model.dart';

UmengAnalyticsPush.addPushMessageCallback((MessageModel message) {
  print("UmengAnalyticsPush Message =====> $message");
});
操作别名
import 'package:umeng_analytics_push/umeng_analytics_push.dart';

UmengAnalyticsPush.addAlias('1001', 'jobcode');
UmengAnalyticsPush.setAlias('1002', 'jobcode');
UmengAnalyticsPush.deleteAlias('1002', 'jobcode');
操作标签
import 'package:umeng_analytics_push/umeng_analytics_push.dart';

UmengAnalyticsPush.addTags('manager');
UmengAnalyticsPush.deleteTags('manager');
页面埋点操作
import 'package:umeng_analytics_push/umeng_analytics_push.dart';

UmengAnalyticsPush.pageStart('memberPage');
UmengAnalyticsPush.pageEnd('memberPage');
自定义事件
import 'package:umeng_analytics_push/umeng_analytics_push.dart';

UmengAnalyticsPush.event('customEvent', '1000');

完整示例Demo

以下是一个完整的Flutter应用示例,展示如何使用umeng_analytics_push插件:

import 'package:flutter/material.dart';
import 'package:umeng_analytics_push/umeng_analytics_push.dart';
import 'package:umeng_analytics_push/message_model.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化Umeng
    UmengAnalyticsPush.initUmeng(false, true);

    // 添加推送消息回调
    UmengAnalyticsPush.addPushMessageCallback((MessageModel message) {
      print("UmengAnalyticsPush Message =====> $message");
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () {
                  // 示例:添加别名
                  UmengAnalyticsPush.addAlias('1001', 'jobcode');
                },
                child: Text('Add Alias'),
              ),
              ElevatedButton(
                onPressed: () {
                  // 示例:添加标签
                  UmengAnalyticsPush.addTags('manager');
                },
                child: Text('Add Tags'),
              ),
              ElevatedButton(
                onPressed: () {
                  // 示例:记录页面访问
                  UmengAnalyticsPush.pageStart('memberPage');
                  UmengAnalyticsPush.pageEnd('memberPage');
                },
                child: Text('Page Buried Point'),
              ),
              ElevatedButton(
                onPressed: () {
                  // 示例:自定义事件
                  UmengAnalyticsPush.event('customEvent', '1000');
                },
                child: Text('Custom Event'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter移动分析推送插件umeng_analytics_push的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter移动分析推送插件umeng_analytics_push的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用umeng_analytics_push插件的详细步骤,包括相关代码案例。

第一步:添加依赖

首先,你需要在你的pubspec.yaml文件中添加umeng_analytics_push依赖。

dependencies:
  flutter:
    sdk: flutter
  umeng_analytics_push: ^最新版本号  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

第二步:配置Android项目

2.1 添加友盟+ SDK的Gradle配置

在你的android/app/build.gradle文件中,添加友盟+的Maven仓库和依赖。

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://download.umcloud.com/release/umeng-sdk/' }
    }
}

dependencies {
    implementation 'com.umeng.sdk:umeng-common:9.7.3'  // 请使用最新版本
    implementation 'com.umeng.sdk:umeng-push:9.7.3'    // 请使用最新版本
    implementation 'com.umeng.sdk:umeng-analytics:9.7.3' // 请使用最新版本
}

2.2 配置AndroidManifest.xml

android/app/src/main/AndroidManifest.xml中,添加友盟+相关的权限和服务。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <!-- 添加权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.GET_TASKS" />

    <!-- 添加友盟+的服务 -->
    <service
        android:name="com.umeng.message.service.PushService"
        android:exported="true">
        <intent-filter>
            <action android:name="com.umeng.message.intent.action.MESSAGE_ARRIVED" />
            <action android:name="com.umeng.message.intent.action.CLICK" />
        </intent-filter>
    </service>
    <service
        android:name="com.umeng.message.service.DownloadService"
        android:exported="false" />
    <receiver android:name="com.umeng.message.UmengReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>
    <receiver android:name="com.umeng.message.service.NetworkChangeReceiver"
        android:exported="false">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>

    <!-- 友盟+其他配置 -->
    <meta-data
        android:name="UMENG_APPKEY"
        android:value="你的友盟+ App Key" />
    <meta-data
        android:name="UMENG_CHANNEL"
        android:value="developer-default" />

</manifest>

第三步:配置iOS项目

3.1 添加友盟+ SDK的Podfile配置

打开ios/Podfile文件,添加友盟+的SDK依赖。

platform :ios, '9.0'

target 'Runner' do
  use_frameworks!
  
  # Pods for Runner
  pod 'UMCommon', '~> 9.7.3'  # 请使用最新版本
  pod 'UMPush', '~> 9.7.3'    # 请使用最新版本
  pod 'UMAnalytics', '~> 9.7.3'  # 请使用最新版本

  # Flutter Pods
  flutter_install_all_ios_pods(File.dirname(File.realpath(__FILE__)))
end

然后运行pod install来安装依赖。

3.2 配置Info.plist

ios/Runner/Info.plist中,添加友盟+的相关配置。

<key>UMENG_APPKEY</key>
<string>你的友盟+ App Key</string>
<key>UMENG_CHANNEL</key>
<string>developer-default</string>

第四步:在Flutter中使用umeng_analytics_push插件

4.1 初始化插件

在你的Flutter项目的main.dart文件中,初始化umeng_analytics_push插件。

import 'package:flutter/material.dart';
import 'package:umeng_analytics_push/umeng_analytics_push.dart';

void main() {
  runApp(MyApp());
  // 初始化友盟+
  UmengAnalyticsPush.init("你的友盟+ App Key", "你的友盟+ Channel");
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("友盟+ 推送与分析示例"),
      ),
      body: Center(
        child: Text("插件已初始化"),
      ),
    );
  }
}

4.2 发送事件和分析数据

你可以使用UmengAnalyticsPush.onEvent方法来发送自定义事件。

// 发送自定义事件
UmengAnalyticsPush.onEvent(eventName: "custom_event", attributes: {"key": "value"});

4.3 处理推送消息

你可以通过监听UmengAnalyticsPush.onMessageReceivedUmengAnalyticsPush.onNotificationClicked来接收推送消息和处理点击事件。

@override
void initState() {
  super.initState();

  // 监听推送消息接收事件
  UmengAnalyticsPush.onMessageReceived.listen((message) {
    print("Received message: $message");
  });

  // 监听推送通知点击事件
  UmengAnalyticsPush.onNotificationClicked.listen((notification) {
    print("Notification clicked: $notification");
  });
}

总结

以上就是在Flutter项目中集成和使用umeng_analytics_push插件的详细步骤和相关代码案例。请确保你使用的是最新版本的插件和SDK,并根据你的项目需求进行相应的配置和调整。

回到顶部