sfmc_flutter
A Flutter implementation of Salesforce Marketing Cloud for iOS and Android.
Features
- Setup Marketing Cloud (iOS and Android)
- Support for Push Notifications (iOS and Android)
- Support Attributes (iOS and Android)
- Support TAGS (iOS and Android)
- Support Enable/Disable Verbose (iOS and Android)
- Support Enable/Disable Push Notifications (iOS and Android)
- Support In-App Messaging
- Support Location Based Notifications
- Support Beacons
Install
In the pubspec.yaml
of your flutter project, add the following dependency:
dependencies:
sfmc_flutter:
In your library add the following import:
import 'package:sfmc_flutter/sfmc_flutter.dart';
Getting started
Setup Android
- Add SFMCSdk to project-level
build.gradle
allprojects {
repositories {
...
maven {
url "https://salesforce-marketingcloud.github.io/MarketingCloudSDK-Android/repository"
}
}
}
- Add SFMCSdk to app-level
app/build.gradle
implementation ("com.salesforce.marketingcloud:marketingcloudsdk:8.0.4")
implementation 'com.google.android.gms:play-services-location:17.1.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation platform('com.google.firebase:firebase-bom:29.0.0')
implementation 'com.google.firebase:firebase-messaging:20.1.2'
- Add your
google-services.json
from your Firebase toapp/
. - Open
app/src/main/
and add the following code./MainActivity.kt
... import io.flutter.embedding.android.FlutterActivity import com.salesforce.marketingcloud.MarketingCloudSdk import com.salesforce.marketingcloud.MCLogListener import com.salesforce.marketingcloud.MarketingCloudConfig import com.salesforce.marketingcloud.notifications.NotificationCustomizationOptions import com.salesforce.marketingcloud.sfmcsdk.SFMCSdk import com.salesforce.marketingcloud.sfmcsdk.SFMCSdkModuleConfig class MainActivity : FlutterActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) SFMCSdk.configure(applicationContext as Application, SFMCSdkModuleConfig.build { pushModuleConfig = MarketingCloudConfig.builder().apply { setApplicationId("" ) setAccessToken("" ) setSenderId("" ) setMarketingCloudServerUrl("" ) setMid("" ) setNotificationCustomizationOptions( NotificationCustomizationOptions.create(R.drawable.ic_notification_icon) ) }.build(applicationContext) }) { initStatus -> } } }
Setup iOS
- Setup your
AppDelegate.swift
file with Marketing Cloud initialization.
import UIKit import Flutter import MarketingCloudSDK @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { GeneratedPluginRegistrant.register(with: self) self.configureMarketingCloudSDK() return super.application(application, didFinishLaunchingWithOptions: launchOptions) } func configureMarketingCloudSDK() { let builder = MarketingCloudSDKConfigBuilder() .sfmc_setApplicationId("" ) .sfmc_setAccessToken("" ) .sfmc_setMarketingCloudServerUrl("" ) .sfmc_setMid("" ) .sfmc_build()! do { try MarketingCloudSDK.sharedInstance().sfmc_configure(with:builder) registerForRemoteNotification() } catch let error as NSError { } } override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { MarketingCloudSDK.sharedInstance().sfmc_setDeviceToken(deviceToken) } func registerForRemoteNotification() { if #available(iOS 10.0, *) { let center = UNUserNotificationCenter.current() center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in if error == nil{ UIApplication.shared.registerForRemoteNotifications() } } } else { UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.sound, .alert, .badge], categories: nil)) UIApplication.shared.registerForRemoteNotifications() } } override func applicationProtectedDataDidBecomeAvailable(_ application: UIApplication) { if(MarketingCloudSDK.sharedInstance().sfmc_isReady() == false) { self.configureMarketingCloudSDK() } } }
Flutter
await SFMCSDK.setContactKey("" ); // Set Contact Key for desired user await SFMCSDK.enablePush(); // Enables PUSH for SDK await SFMCSDK.disablePush(); // Disables PUSH for SDK await SFMCSDK.pushEnabled(); // Returns if push is enabled or not await SFMCSDK.setAttribute("name", "Mark"); // Set a user attribute await SFMCSDK.clearAttribute("name"); // Removes a given user attribute await SFMCSDK.setTag("Barcelona"); // Set a user tag await SFMCSDK.removeTag("Barcelona"); // Removes a given user tag await SFMCSDK.enableVerbose(); // Enable native Verbose await SFMCSDK.disableVerbose(); // Disable native Verbose await SFMCSDK.sdkState(); // Returns the SDKState log
Contributions
Feel free to contribute to this project.
If you find a bug or want a feature, but don't know how to fix/implement it, please fill an [issue][issue].
If you fixed a bug or implemented a feature, please send a [pull request][pr].