Flutter营销自动化插件sfmc_plugin的使用

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

Flutter营销自动化插件sfmc_plugin的使用

sfmc_plugin

pub package

salesforce.com提供的Salesforce Marketing Cloud (SFMC) - MobilePush SDK for Flutter。Marketing Cloud MobilePush允许您创建和发送通知以鼓励用户使用您的应用程序。

此SFMC Flutter插件包括:

  • Push Notifications:通过Marketing Cloud MobilePush或Content Builder或Journey Builder中的推送通知模板创建消息。
  • In-App Messages:在用户使用移动应用程序时与他们互动,触发消息在用户打开应用程序时显示。

了解更多关于SFMC Mobile Push SDK的信息:

开始使用

首先需要在项目中添加sfmc_plugin。请按照安装指南操作。

建议查看示例源代码

设置Android

  1. 创建MobilePush应用程序:根据文档连接设备到MobilePush应用。

  2. 设置Firebase:遵循官方文档完成设置,并将google-services.json文件放置在android/app目录下。

  3. 修改build.gradle

    • android/app/build.gradle中添加:
      apply plugin: 'com.google.gms.google-services'
      
    • android/build.gradle中添加依赖:
      dependencies {
        classpath 'com.google.gms:google-services:4.3.13'
      }
      
  4. 初始化SFMC SDK:更新android/gradle.properties如下:

    MC_APP_ID="<YOUR_SFMC_APP_ID>"
    MC_ACCESS_TOKEN="<YOUR_SFMC_ACCESS_TOKEN>"
    MC_SENDER_ID="<YOUR_FIREBASE_CLOUD_MESSAGING_SENDER_ID_FOR_SFMC>"
    MC_MID="<YOUR_SFMC_MID>"
    MC_SERVER_URL="<YOUR_SFMC_URL>"
    

设置iOS

  1. 配置推送服务:根据文档进行配置。

  2. 更新info.plist:添加以下内容:

    <key>UIBackgroundModes</key>
    <array>
        <string>fetch</string>
        <string>remote-notification</string>
    </array>
    
  3. 设置UNUserNotificationCenter代理:在AppDelegate.m/AppDelegate.swift中添加以下代码:

    Objective-C:

    if ([@available](/user/available)(iOS 10.0, *)) {
      [UNUserNotificationCenter currentNotificationCenter].delegate = (id<UNUserNotificationCenterDelegate>) self;
    }
    

    Swift:

    if #available(iOS 10.0, *) {
      UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
    }
    

使用Flutter插件

  1. 初始化SFMC插件(仅适用于iOS,Android请参阅设置Android部分):

    var isInitialized = await SfmcPlugin().initialize(
      appId: '<YOUR_APP_ID>',
      accessToken: '<YOUR_ACCESS_TOKEN>',
      mid: '<YOUR_MID>',
      sfmcURL: '<YOUR_SFMC_URL>',
      senderId: '<YOUR_FIREBASE_CLOUD_MESSAGING_SENDER_ID>',
    
      /// Set delayRegistration on iOS only,
      /// delayRegistration on Android is by default true
      delayRegistration: true,
    
      /// Set analytics on iOS only,
      /// analytics on Android is by default true
      analytics: true,
    );
    
  2. 设置联系人密钥(唯一标识符):

    await SfmcPlugin().setContactKey('<Uniquely Identifying Key>');
    
  3. 设置属性(用于细分受众和个性化消息):

    await SfmcPlugin().setProfileAttribute("key", "value");
    
    await SfmcPlugin().clearProfileAttribute("key");
    

示例Demo

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

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

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

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

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  final String title = "SFMC - Mobile Push";

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

Future handler(MethodCall methodCall) async {
  switch (methodCall.method) {
    case 'handle_url':
      var url = methodCall.arguments['url'];
      // the url is accessible here and can be processed (Applicable to iOS Only)
      return null;
  }
}

class _MyHomePageState extends State<MyHomePage> {
  bool? initStatus;

  void onInit() async {
    SfmcPlugin().setHandler(handler);
    var isInitialized = await SfmcPlugin().initialize(
      appId: '<YOUR_APP_ID>',
      accessToken: '<YOUR_ACCESS_TOKEN>',
      mid: '<YOUR_MID>',
      sfmcURL: '<YOUR_SFMC_URL>',
      senderId: '<YOUR_FIREBASE_CLOUD_MESSAGING_SENDER_ID>',

      /// Set delayRegistration on iOS only,
      /// delayRegistration on Android is by default true
      delayRegistration: true,

      /// Set analytics on iOS only,
      /// analytics on Android is by default true
      analytics: true,
    );

    setState(() {
      initStatus = isInitialized;
    });
  }

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

  @override
  Widget build(BuildContext context) {
    bool initSucceeded = (initStatus != null && initStatus == true);
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: ListView(
        children: [
          const SizedBox(height: 30,),
          initStatusDisplay(initStatus),
          const SizedBox(height: 15,),
          if (initSucceeded) ContactKeyComponent(),
        ],
      ),
    );
  }

  Widget initStatusDisplay(bool? isInitSuccessful) {
    String text = 'Trying to initialize ...';
    bool isLoading = isInitSuccessful == null;
    if (!isLoading) {
      if (isInitSuccessful) {
        text = "The cloud messaging system has been initialized !";
      } else {
        text = "There was an error during initializing the cloud system !";
      }
    }
    return SizedBox(
      child: Column(
        children: [
          if (isLoading)
            const SizedBox(height: 20, width: 20, child: CircularProgressIndicator(),),
          Text(
            text,
            textAlign: TextAlign.center,
          ),
        ],
      ),
    );
  }

  Widget buildSectionContainer({required Widget child}) {
    return Container(
      margin: const EdgeInsets.symmetric(horizontal: 15, vertical: 5),
      padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10),
      decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(10),
          border: Border.all(width: 0.5)),
      child: child,
    );
  }
}

贡献

欢迎提交Pull Request!如果您有任何问题或建议,请随时参与本项目的贡献。


更多关于Flutter营销自动化插件sfmc_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter营销自动化插件sfmc_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用sfmc_plugin(假设这是一个用于Salesforce Marketing Cloud的Flutter插件)的示例代码案例。请注意,由于sfmc_plugin可能是一个虚构的插件名称(因为实际中可能存在不同名称的插件用于此目的),以下代码将基于假设的API和功能进行编写。

1. 添加依赖

首先,你需要在你的pubspec.yaml文件中添加sfmc_plugin作为依赖项。如果插件在pub.dev上可用,你应该能找到它的具体名称并添加:

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

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

2. 初始化插件

在你的Flutter应用的入口文件(通常是main.dart)中,你需要初始化插件。

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

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

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

class SFMCExamplePage extends StatefulWidget {
  @override
  _SFMCExamplePageState createState() => _SFMCExamplePageState();
}

class _SFMCExamplePageState extends State<SFMCExamplePage> {
  SfmcPlugin? sfmcPlugin;

  @override
  void initState() {
    super.initState();
    sfmcPlugin = SfmcPlugin();
    // 初始化SFMC插件,比如设置API密钥等(这里假设需要)
    sfmcPlugin!.initialize("YOUR_SFMC_API_KEY");
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SFMC Plugin Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Send Push Notification'),
            ElevatedButton(
              onPressed: () {
                // 发送推送通知的示例函数
                sendPushNotification();
              },
              child: Text('Send'),
            ),
          ],
        ),
      ),
    );
  }

  void sendPushNotification() async {
    try {
      // 假设有一个函数用于发送推送通知
      var result = await sfmcPlugin!.sendPushNotification(
        to: "DEVICE_ID",
        message: "Hello from Flutter!",
      );
      print("Push notification sent: $result");
    } catch (e) {
      print("Error sending push notification: $e");
    }
  }
}

3. 插件方法假设

由于sfmc_plugin是一个假设的插件,我们假设它有以下方法:

  • initialize(String apiKey): 初始化插件并设置API密钥。
  • sendPushNotification(String to, String message): 发送推送通知到指定的设备ID。

4. 注意事项

  • 实际插件可能不同:上述代码基于假设的插件API。实际使用时,你需要查阅插件的官方文档来了解其真实API和方法。
  • 错误处理:在实际应用中,你应该添加更多的错误处理逻辑,以确保应用的健壮性。
  • 权限:确保你的应用有权限发送推送通知,并处理用户可能拒绝授予权限的情况。
  • 安全性:不要在客户端代码中硬编码敏感信息,如API密钥。考虑使用更安全的方式来管理这些密钥,如环境变量或密钥管理服务。

希望这个示例能帮助你开始使用Flutter中的sfmc_plugin(或类似的Salesforce Marketing Cloud插件)。如果你有具体的插件名称或API文档,我可以提供更准确的代码示例。

回到顶部