Skip to main content

Add Kettle

Preqrequisites

The following criterias must be fulfilled to implement the SDK:

  • Minimum iOS target: 11.0
  • Minimum Android minSdk: 15
  • Minimum Android compileSdk: 31
  • Minimum Kotlin version: 1.8.10

Add dependency

The plugin is available at pub.dev. Add the following package to your pubspec:

pubspec.yaml
dependencies:
kettle: ^x.x.x

Install flutter package

Install the package.

$ flutter pub get

Android

IMPORTANT

A runtime exception will be thrown on launch if API key is missing.

In AndroidManifest.xml, add the following element as a child of the application element:

AndroidManifest.xml
<meta-data
android:name="com.kogenta.kettle.sdk.API_KEY"
android:value="<API-KEY>"
/>

If your project utilizees ProGuard for obfuscation and code minification, add the following exception to your definition:

-keepclassmembers class com.kogenta.kettle.core.model.** { *; }

iOS

After running flutter pub get, navigate to your projects ios directory and install hte pods imported by the kettle plugin. Open the runner workspace afterwards.

$ cd ios
$ pod install
$ open Runner.xcworkspace

In your AppDelegate didFinishLaunchingWithOptions, add the following to initialize Kettle:

AppDelegate.swift
import KettleKit
...
override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
...

let kettleConfig = KettleConfig.default()
kettleConfig.developmentApiKey = "<DEV-API-KEY">
kettleConfig.productionApiKey = "<PROD-API-KEY">

// optionally, override Kettle's default log verbosity
kettleConfig.productionLogLevel = .none
kettleConfig.developmentLogLevel = .debug

// Initialize Kettle
Kettle.prepare(config, launchOptions: launchOptions)

...
}

Add bluetooth-central to your applications background modes. This is required to scan for eddystone data. Add the required permissions to your Info.plist.

Push Notifications

Assign push token

Forwards the users push token to Kettle, allowing it to send push notifications.

Kettle.shared.pushToken = "<PUSH-TOKEN>"

Handle notification events

To enable Kettle to track push notification interactions, you need to forward specific notification events to the SDK.

AppDelegate.swift
// When app receives a remote notification
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
Kettle.shared.didReceiveRemoteNotification(userInfo: userInfo)
...
}

// When user opens a notification (requires UNUserNotificationCenterDelegate)
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
Kettle.shared.didOpenNotification(userInfo: userInfo)
...
}

User opened notification

When a user taps on a notification to open the app, inform Kettle about this interaction:

func userNotificationCenter(_ center: UNUserNotificationCenter, 
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
Kettle.shared.didOpenNotification(userInfo: userInfo)
...
}

If your app is opened via a custom URL scheme or universal link, notify Kettle in case any project-specific deep link logic needs to be handled by the SDK.

AppDelegate.swift
func application(_ app: UIApplication, 
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
Kettle.shared.didOpenApplicationWithUrl(url: url.absoluteString)
return true
}

Import Kettle in Dart

You can import Kettle in Dart as:

import 'package:kettle/kettle.dart';