Flutter集成SDK插件se_flutter_sdk_us的使用

Flutter集成SDK插件se_flutter_sdk_us的使用

本教程将详细介绍如何在Flutter项目中集成并使用se_flutter_sdk_us插件。该插件提供了丰富的功能来支持各种事件跟踪和用户属性设置。

开始之前

确保你的开发环境已经安装了Flutter和Dart,并且你可以创建和运行一个新的Flutter项目。

添加依赖

首先,在你的pubspec.yaml文件中添加se_flutter_sdk_us插件的依赖:

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

然后运行flutter pub get来获取新添加的依赖。

初始化SDK

在你的主应用程序文件(如main.dart)中,初始化SDK并进行一些基本配置。

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:se_flutter_sdk_us/solar_engine_core/solar_engine.dart';
import 'package:se_flutter_sdk_us/solar_engine_core/solar_engine_config.dart';
import 'package:se_flutter_sdk_us/solar_engine_core/solar_engine_event_data.dart';
import 'package:se_flutter_sdk_us/solar_engine_remote_config/remote_config.dart';
import 'dart:io'; // 引入IO库

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'SolarEngine Demo'),
    );
  }
}

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

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

typedef ClickCallbackString = void Function(String result);
typedef ClickCallbackString2 = void Function(String result1, String result2);
typedef ClickCallback = void Function();

class SETextButtonItem extends StatelessWidget {
  final String title;
  final String desc;
  final ClickCallbackString tapAction;

  var _titleTxt = new TextEditingController();

  SETextButtonItem(this.title, this.desc, this.tapAction);

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(12),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          TextField(
            controller: _titleTxt, // 把 TextEditingController 对象应用到 TextField 上
            decoration: InputDecoration(
              filled: true,
              fillColor: Colors.grey[200],
              hintText: desc,
            ),
          ),
          SizedBox(height: 8),
          TextButton(
            onPressed: () {
              tapAction!(_titleTxt.text);
            },
            autofocus: true,
            child: Text(
              title,
              style: TextStyle(fontSize: 18.0),
            ),
            style: ButtonStyle(
              backgroundColor: MaterialStateProperty.resolveWith((states) {
                return Colors.blue[200];
              }),
              padding: MaterialStateProperty.all(EdgeInsets.only(left: 50, right: 50)),
            ),
          ),
        ],
      ),
    );
  }
}

// 其他组件省略...

class _MyHomePageState extends State<MyHomePage> {
  void toast(String text) {
    final snackBar = SnackBar(content: Text(text));
    ScaffoldMessenger.of(context).showSnackBar(snackBar);
  }

  void onReceivedAllData(Map? config) {
    if (config != null) {
      print('Received remote config data: $config');
      // 这里可以处理配置数据
    } else {
      print('No remote config data received');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Padding(
          padding: EdgeInsets.only(left: 0, right: 0),
          child: CustomScrollView(
            shrinkWrap: true,
            slivers: <Widget>[
              SliverPadding(
                padding: const EdgeInsets.all(0),
                sliver: SliverList(
                  delegate: SliverChildListDelegate(
                    <Widget>[
                      SEButtonItem("Init SDK", () {
                        if (Platform.isIOS) {
                          print("---Platform.isIOS");
                        } else if (Platform.isAndroid) {
                          print("---Platform.isAndroid");
                        }

                        SolarEngine.onDeepLinkCallback((code, data) {
                          print("onDeepLinkCallback----");
                          print(code);
                          if (code == 0) {
                            print("deeplink解析成功----");
                            print(data);
                          } else {
                            print("deeplink失败----$code");
                          }
                        });
                        SolarEngine.onDelayDeepLinkCallback((code, data) {
                          print("onDelayDeepLinkCallback----");
                          print(code);
                          if (code == 0) {
                            print("deeplink解析成功----");
                            print(data);
                          } else {
                            print("deeplink失败----$code");
                          }
                        });

                        String appkey = "898b33180e819174";

                        SolarEngine.preInitialize(appkey);

                        SolarEngineConfig config = SolarEngineConfig();
                        config.logEnabled = true;
                        config.enable2GReporting = true;
                        config.adPersonalizationEnabled = false;
                        config.adUserDataEnabled = false;

                        SECustomDomain customDomain = SECustomDomain();
                        customDomain.enable = true;
                        customDomain.receiverDomain = "https://stable-solar.detailroi.com";
                        customDomain.ruleDomain = "https://rule.detailroi.com";
                        customDomain.tcpReceiverHost = "cn-test-receiver.solar-engine.com";
                        customDomain.tcpRuleHost = "cn-test-rule.solar-engine.com";
                        customDomain.tcpGatewayHost = "cn-test-gateway.solar-engine.com";
                        config.customDomain = customDomain;

                        SERemoteConfigData rcConfig = SERemoteConfigData();
                        rcConfig.enable = true;
                        rcConfig.logEnabled = true;
                        rcConfig.customIDProperties = {
                          "key": "customID",
                          "value": "androidID"
                        };
                        rcConfig.customIDEventProperties = {
                          "key": "customEventID",
                          "value": "_appStart"
                        };
                        rcConfig.customIDUserProperties = {
                          "key": "customUserID",
                          "value": "Topic"
                        };
                        config.remoteConfigData = rcConfig;

                        config.onAttributionSuccess = (data) {
                          print("onAttributionSuccess----");
                          print(data);
                          toast(data!);
                        };
                        config.onAttributionFail = (code) {
                          print("onAttributionFail----");
                          print(code);
                          toast("onAttributionFail" + code.toString());
                        };

                        SolarEngine.initializeWithCallbacK(appkey, config, (code) {
                          print("initializeWithCallbacK----");
                          print(code);
                          // 初始化成功
                          SolarEngine.handleDeepLinkUrl("liongo://lionmobo.com/goods_detail?sedp_urlscheme=xxx&amp;sedp_link=xxx&amp;download=xxx&amp;turl_id=xxx&amp;a=1&amp;b2&amp;se_from=urlscheme");

                          print("初始化成功-----");
                          print(code);
                        });
                      }),
                      // 其他组件省略...
                    ],
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

使用示例

以下是使用se_flutter_sdk_us插件的一些具体示例:

  1. 异步获取远程配置
SETextButtonItem("asyncFetchRemoteConfig", "key", (key) {
  SERemoteConfig().asyncFetchRemoteConfig(key, (result) {
    print("在线参数回调-----");
    print(result);
    toast("result=" + result!);
  });
}),
  1. 设置默认远程配置
SETextButtonItem("setRemoteDefaultConfig", "properties", (properties) async {
  List<dynamic> data = [
    {"name": "key1", "type": 2, "value": 1},
    {"name": "key2", "type": 2, "value": 0}
  ];
  SERemoteConfig().setRemoteDefaultConfig(data);
}),
  1. 设置用户属性
SETextButtonItem("setRemoteConfigUserProperties", "properties", (properties) {
  if (properties.isNotEmpty) {
    Map<String, dynamic> userProperties = json.decode(properties);
    SERemoteConfig().setRemoteConfigUserProperties(userProperties);
    return;
  }
  Map<String, dynamic> userProperties = {};
  userProperties['name'] = 'liming';
  userProperties['age'] = "20";
  SERemoteConfig().setRemoteConfigUserProperties(userProperties);
}),
  1. 设置自定义事件属性
SETextButtonItem("setRemoteConfigEventProperties", "properties", (properties) {
  if (properties.isNotEmpty) {
    Map<String, dynamic> eventProperties = json.decode(properties);
    SERemoteConfig().setRemoteConfigEventProperties(eventProperties);
    return;
  }
  Map<String, dynamic> eventProperties = {};
  eventProperties['event'] = 'end';
  eventProperties['pro'] = "max";
  SERemoteConfig().setRemoteConfigEventProperties(eventProperties);
}),

更多关于Flutter集成SDK插件se_flutter_sdk_us的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter集成SDK插件se_flutter_sdk_us的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中集成并使用se_flutter_sdk_us插件的示例代码。请注意,由于se_flutter_sdk_us可能是一个假想的或特定用途的SDK,以下代码示例将基于一般的Flutter插件集成步骤进行编写,并假设该插件具有一些基本的初始化、登录和获取用户信息的功能。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加se_flutter_sdk_us插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  se_flutter_sdk_us: ^x.y.z  # 替换为实际的版本号

然后运行flutter pub get来下载依赖。

2. 导入插件

在你的Dart文件中导入该插件:

import 'package:se_flutter_sdk_us/se_flutter_sdk_us.dart';

3. 初始化SDK

通常,SDK需要在应用启动时进行初始化。你可以在MainActivity.kt(对于Android)或AppDelegate.swift(对于iOS)中进行原生初始化(如果需要),但也可以在Flutter中处理。以下是一个在Flutter中初始化的示例:

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化SDK
  SeFlutterSdkUs.initialize("your_api_key_here")
    .then((result) {
      if (result) {
        print("SDK initialized successfully");
      } else {
        print("SDK initialization failed");
      }
    })
    .catchError((error) {
      print("Error initializing SDK: $error");
    });

  runApp(MyApp());
}

4. 使用SDK功能

假设se_flutter_sdk_us插件具有登录和获取用户信息的功能,以下是如何使用这些功能的示例:

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化SDK(同上)
  SeFlutterSdkUs.initialize("your_api_key_here")
    .then((_) => runApp(MyApp()))
    .catchError((error) {
      print("Error initializing SDK: $error");
      runApp(MaterialApp(home: Scaffold(body: Center(child: Text("SDK Initialization Failed")))));
    });
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('se_flutter_sdk_us Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () => _login(),
                child: Text('Login'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () => _getUserInfo(),
                child: Text('Get User Info'),
              ),
              SizedBox(height: 20),
              Text(_userInfo ?? 'No user info available'),
            ],
          ),
        ),
      ),
    );
  }

  String? _userInfo;

  void _login() async {
    try {
      bool result = await SeFlutterSdkUs.login("username", "password");
      if (result) {
        print("Login successful");
        // 更新UI或执行其他操作
      } else {
        print("Login failed");
      }
    } catch (error) {
      print("Error logging in: $error");
    }
  }

  void _getUserInfo() async {
    try {
      Map<String, dynamic> userInfo = await SeFlutterSdkUs.getUserInfo();
      setState(() {
        _userInfo = userInfo.toString(); // 或者根据需要处理userInfo
      });
    } catch (error) {
      print("Error getting user info: $error");
    }
  }
}

注意事项

  1. API Key:替换your_api_key_here为你实际的API密钥。
  2. 错误处理:在实际应用中,应添加更详细的错误处理和用户反馈。
  3. 插件文档:查阅se_flutter_sdk_us插件的官方文档,了解所有可用方法和参数。
  4. 平台特定配置:某些SDK可能需要在iOS的Info.plist或Android的AndroidManifest.xml中进行额外配置。

以上示例提供了一个基本的框架,展示了如何在Flutter项目中集成和使用一个假设的SDK插件。根据实际的SDK文档和API,你可能需要调整代码以匹配特定的功能和方法。

回到顶部