Flutter移动分析推送插件umeng_analytics_push的使用
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
更多关于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.onMessageReceived
和UmengAnalyticsPush.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,并根据你的项目需求进行相应的配置和调整。