Flutter自定义功能插件fluttersamplesdkplugin的使用

Flutter自定义功能插件fluttersamplesdkplugin的使用

概述

fluttersampleplugin 是一个用于集成 Resulticks 分析模块的 Flutter 插件。它允许通过 Flutter 应用程序捕获分析相关的数据,并支持跨平台(Android 和 iOS)的推送通知服务。通过该插件,您可以实现用户旅程报告、客户数据增强以及触发或创建营销活动等功能。

使用步骤

1. 添加依赖

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

dependencies:
  fluttersampleplugin: ^1.0.0

然后运行 flutter pub get 来安装插件。

2. 初始化插件

在应用程序启动时初始化插件。通常在 main() 函数中完成初始化操作。

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

void main() async {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'ReFlutterSDK-Example',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

3. 初始化 SDK 并监听事件

MyHomePage 中初始化插件并设置事件监听器。

class _MyHomePageState extends State<MyHomePage> {
  late var screenName;
  var token;

  [@override](/user/override)
  void initState() {
    super.initState();
    _refluttersdkPlugin.listener((data) {
      print("Deeplink Data :: $data");
      Map<String, dynamic> notificationData = jsonDecode(data);
      String screenName = notificationData['customParams']['screenName'];
      print("ScreenName :: $screenName");
    });
  }
}

4. 调用插件功能

更新用户位置

passLocation() {
  double lat = 13.0827;
  double lang = 80.2707;
  _refluttersdkPlugin.locationUpdate(lat, lang);
}

自定义事件

customEvent() {
  var event = "On Track Event called!!!";
  _refluttersdkPlugin.customEvent(event);
}

自定义事件并传递数据

customEventwithData() {
  var eventData = {
    "name": "payment",
    "data": {"id": "6744", "price": "477"}
  };
  _refluttersdkPlugin.customEventWithData(eventData);
}

删除通知

deleteNotificationByCampaignid(campaignId) {
  _refluttersdkPlugin.deleteNotificationByCampaignId(campaignId);
}

读取通知

readnotification(campaignId) {
  _refluttersdkPlugin.readNotification(campaignId);
}

未读通知

unreadNotification(campaignId) {
  _refluttersdkPlugin.unReadNotification(campaignId);
}

应用转化跟踪

appconversionTracking() {
  _refluttersdkPlugin.appConversion();
}

appconversionTrackingWithData() {
  Map appConversionData = {
    "name": "xyrr",
    "data": {"age": "23", "city": "yyy"}
  };
  _refluttersdkPlugin.appConversionWithData(appConversionData);
}

表单数据捕获

formdataCapture() {
  Map formData = {
    "Name": "vishwa",
    "EmailID": "abc@gmail.com",
    "MobileNo": 9329333,
    "Gender": "Male",
    "formid": 101,
    "apikey": "b78db6rb3-9462-4132-a4d3-894db10b3782",
    "City": "Chennai"
  };
  _refluttersdkPlugin.formDataCapture(formData);
}

更新推送令牌

updatepushToken(fcmToken) {
  _refluttersdkPlugin.updatePushToken(fcmToken);
}

SDK 注册

sdkRegisteration() {
  Map userData = {
    "userUniqueId": "1111",
    "name": "kkkkk",
    "age": "23",
    "email": "abc@gmail.com",
    "phone": "12334455",
    "gender": "Male",
    "profileUrl": "",
    "dob": "23/12/2010",
    "education": "BE",
    "employed": "true",
    "married": "false",
    "deviceToken": token,
    "storeId": "555"
  };
  _refluttersdkPlugin.sdkRegisteration(userData);
}

获取通知列表

getNotificationList() async {
  var notificationList = await _refluttersdkPlugin.getNotificationList();
  print("GetNotificationList::$notificationList");
}

获取已读通知数量

readnotificationCount() async {
  var rnCount = await _refluttersdkPlugin.getReadNotificationCount();
  if (kDebugMode) {
    print("readNotificationCount::$rnCount");
  }
}

获取未读通知数量

unReadnotificationCount() async {
  var unreadCount = await _refluttersdkPlugin.getUnReadNotificationCount();
  print("unReadNotificationCount::$unreadCount");
}

5. 示例代码

以下是完整的示例代码:

import 'dart:convert';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:fluttersampleplugin/fluttersampleplugin.dart';

void main() async {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'ReFlutterSDK-Example',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

final _refluttersdkPlugin = Fluttersampleplugin();

class _MyHomePageState extends State<MyHomePage> {
  late var screenName;
  var token;

  [@override](/user/override)
  void initState() {
    super.initState();
    _getFcmToken();
    _refluttersdkPlugin.listener((data) {
      print("Deeplink Data :: $data");
      Map<String, dynamic> notificationData = jsonDecode(data);
      String screenName = notificationData['customParams']['screenName'];
      print("ScreenName :: $screenName");
    });
  }

  Future<void> _getFcmToken() async {
    // messaging = FirebaseMessaging.instance;
    // messaging.getToken().then((value) {
    //   print('Fcm Token: $value');
    //   token = value;
    // });
  }

  passLocation() {
    double lat = 13.0827;
    double lang = 80.2707;
    _refluttersdkPlugin.locationUpdate(lat, lang);
  }

  customEvent() {
    var event = "On Track Event called!!!";
    _refluttersdkPlugin.customEvent(event);
  }

  customEventwithData() {
    var eventData = {
      "name": "payment",
      "data": {"id": "6744", "price": "477"}
    };
    _refluttersdkPlugin.customEventWithData(eventData);
  }

  deleteNotificationByCampaignid(campaignId) {
    _refluttersdkPlugin.deleteNotificationByCampaignId(campaignId);
  }

  readnotification(campaignId) {
    _refluttersdkPlugin.readNotification(campaignId);
  }

  unreadNotification(campaignId) {
    _refluttersdkPlugin.unReadNotification(campaignId);
  }

  appconversionTracking() {
    _refluttersdkPlugin.appConversion();
  }

  appconversionTrackingWithData() {
    Map appConversionData = {
      "name": "xyrr",
      "data": {"age": "23", "city": "yyy"}
    };
    _refluttersdkPlugin.appConversionWithData(appConversionData);
  }

  formdataCapture() {
    Map formData = {
      "Name": "vishwa",
      "EmailID": "abc@gmail.com",
      "MobileNo": 9329333,
      "Gender": "Male",
      "formid": 101,
      "apikey": "b78db6rb3-9462-4132-a4d3-894db10b3782",
      "City": "Chennai"
    };
    _refluttersdkPlugin.formDataCapture(formData);
  }

  updatepushToken(fcmToken) {
    _refluttersdkPlugin.updatePushToken(fcmToken);
  }

  sdkRegisteration() {
    Map userData = {
      "userUniqueId": "1111",
      "name": "kkkkk",
      "age": "23",
      "email": "abc@gmail.com",
      "phone": "12334455",
      "gender": "Male",
      "profileUrl": "",
      "dob": "23/12/2010",
      "education": "BE",
      "employed": "true",
      "married": "false",
      "deviceToken": token,
      "storeId": "555"
    };
    _refluttersdkPlugin.sdkRegisteration(userData);
  }

  readnotificationCount() async {
    var rnCount = await _refluttersdkPlugin.getReadNotificationCount();
    if (kDebugMode) {
      print("readNotificationCount::$rnCount");
    }
  }

  unReadnotificationCount() async {
    var unreadCount = await _refluttersdkPlugin.getUnReadNotificationCount();
    print("unReadNotificationCount::$unreadCount");
  }

  getNotificationList() async {
    var notificationList = await _refluttersdkPlugin.getNotificationList();
    print("GetNotificationList::$notificationList");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('ReFlutter - Sdk'),
        ),
        body: SingleChildScrollView(
          child: ConstrainedBox(
            constraints: BoxConstraints(),
            child: Container(
              child: Column(
                children: [
                  ElevatedButton(
                    onPressed: sdkRegisteration,
                    child: Text("On Device User Register"),
                  ),
                  ElevatedButton(
                    onPressed: () => updatepushToken(token),
                    child: Text("update Push Token"),
                  ),
                  ElevatedButton(
                    onPressed: passLocation,
                    child: Text("Update Location"),
                  ),
                  ElevatedButton(
                    onPressed: () => readnotification("w39|G|qqD|iF|DEA5Q|430404|Bulk|20230418060124"),
                    child: Text("Read Notification By Id"),
                  ),
                  ElevatedButton(
                    onPressed: () => unreadNotification("w39|G|qqD|iF|DEA5Q|430404|Bulk|20230418060124"),
                    child: Text("UnRead Notification BY Id"),
                  ),
                  ElevatedButton(
                    onPressed: getNotificationList,
                    child: Text("Get Notification List"),
                  ),
                  ElevatedButton(
                    onPressed: readnotificationCount,
                    child: Text("Read Notification Count"),
                  ),
                  ElevatedButton(
                    onPressed: unReadnotificationCount,
                    child: Text("Un_Read_Notification_Count"),
                  ),
                  ElevatedButton(
                    onPressed: () =>
                        deleteNotificationByCampaignid("w39|G|qqD|iF|DEA5Q|430404|Bulk|20230418060124"),
                    child: Text("Delete Notification By CampaignId"),
                  ),
                  ElevatedButton(
                    onPressed: formdataCapture,
                    child: Text("form Data Capture"),
                  ),
                  ElevatedButton(
                    onPressed: customEvent,
                    child: Text("customEvent"),
                  ),
                  ElevatedButton(
                    onPressed: customEventwithData,
                    child: Text("customEventwithData"),
                  ),
                  ElevatedButton(
                    onPressed: appconversionTracking,
                    child: Text("app Conversion Tracking"),
                  ),
                  ElevatedButton(
                    onPressed: appconversionTrackingWithData,
                    child: Text("App Conversion Tracking WithData"),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      WidgetsBinding.instance.addPostFrameCallback((_) {
                        _refluttersdkPlugin.screentracking("page1");
                      });
                    },
                    child: Text("Page-1"),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      WidgetsBinding.instance.addPostFrameCallback((_) {
                        _refluttersdkPlugin.screentracking("page2");
                      });
                    },
                    child: Text("Page-2"),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      WidgetsBinding.instance.addPostFrameCallback((_) {
                        _refluttersdkPlugin.screentracking("page3");
                      });
                    },
                    child: Text("Page-3"),
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter自定义功能插件fluttersamplesdkplugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义功能插件fluttersamplesdkplugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,自定义插件(Plugin)允许你将原生平台(如Android和iOS)的功能集成到Flutter应用中。flutter_sample_sdk_plugin 是一个假设的自定义插件名称,用于演示如何创建和使用自定义插件。

1. 创建自定义插件

首先,你需要创建一个Flutter插件。你可以使用Flutter命令行工具来创建一个插件项目:

flutter create --template=plugin flutter_sample_sdk_plugin

这将生成一个包含Android和iOS代码的插件项目。

2. 实现插件功能

在生成的插件项目中,你需要实现原生平台的功能。

Android

android/src/main/kotlin/com/example/flutter_sample_sdk_plugin/FlutterSampleSdkPlugin.kt 文件中,你可以实现Android平台的逻辑。

package com.example.flutter_sample_sdk_plugin

import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result
import io.flutter.plugin.common.PluginRegistry.Registrar

class FlutterSampleSdkPlugin: MethodCallHandler {
  companion object {
    @JvmStatic
    fun registerWith(registrar: Registrar) {
      val channel = MethodChannel(registrar.messenger(), "flutter_sample_sdk_plugin")
      channel.setMethodCallHandler(FlutterSampleSdkPlugin())
    }
  }

  override fun onMethodCall(call: MethodCall, result: Result) {
    when (call.method) {
      "getPlatformVersion" -> {
        result.success("Android ${android.os.Build.VERSION.RELEASE}")
      }
      else -> {
        result.notImplemented()
      }
    }
  }
}

iOS

ios/Classes/FlutterSampleSdkPlugin.m 文件中,你可以实现iOS平台的逻辑。

#import "FlutterSampleSdkPlugin.h"

@implementation FlutterSampleSdkPlugin
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
  FlutterMethodChannel* channel = [FlutterMethodChannel
      methodChannelWithName:@"flutter_sample_sdk_plugin"
            binaryMessenger:[registrar messenger]];
  FlutterSampleSdkPlugin* instance = [[FlutterSampleSdkPlugin alloc] init];
  [registrar addMethodCallDelegate:instance channel:channel];
}

- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
  if ([@"getPlatformVersion" isEqualToString:call.method]) {
    result([@"iOS " stringByAppendingString:[[UIDevice currentDevice] systemVersion]]);
  } else {
    result(FlutterMethodNotImplemented);
  }
}

@end

3. 在Dart中使用插件

在Flutter应用中,你可以通过 MethodChannel 调用插件中的方法。

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

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String _platformVersion = 'Unknown';

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    String platformVersion;
    // Platform messages may fail, so we use a try/catch PlatformException.
    try {
      const platform = const MethodChannel('flutter_sample_sdk_plugin');
      platformVersion = await platform.invokeMethod('getPlatformVersion');
    } on PlatformException catch (e) {
      platformVersion = 'Failed to get platform version.';
    }

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Plugin example app'),
      ),
      body: Center(
        child: Text('Running on: $_platformVersion\n'),
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(
    home: HomePage(),
  ));
}

4. 安装插件

在你的Flutter项目中,你可以通过以下方式安装和使用这个插件:

  1. pubspec.yaml 文件中添加插件的依赖:
dependencies:
  flutter:
    sdk: flutter
  flutter_sample_sdk_plugin:
    path: ../path_to_your_plugin
回到顶部