An Android and iOS SDK port of Zendesk for Flutter

Android min SDK 16 and iOS min OS Version 10.0

Easy and fast to use

Setup for Native Chat

(Native chat is obsolete and is discouraged to be used)

Android Min SDK - 16

android/app/src/main/res/values/styles.xml

Add the following style

    <style name="ZendeskTheme" parent="ZendeskSdkTheme.Light">    
      <item name="colorPrimary">#FF5148</item>
      <item name="colorPrimaryDark">#FF5148</item>
      <item name="colorAccent">#FF5148</item>
    </style>

android/app/src/main/AndroidManifest.xml

Inside tag, insert the following Activity

    <activity android:name="zendesk.messaging.MessagingActivity"
        android:theme="@style/ZendeskTheme" />
iOS Min OS Version - 10.0

In AppDelegate.swift should look like this

override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  GeneratedPluginRegistrant.register(with: self)

  //Snippet to make rootView as navigatable
  let flutterViewController = window?.rootViewController as! FlutterViewController
  let navigationController = UINavigationController.init(rootViewController: flutterViewController)
  navigationController.isNavigationBarHidden = true
  window.rootViewController = navigationController
  window.makeKeyAndVisible()

  return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}

You can have pre loaded localization with "Localizable.string"

See example/ios/Runnner/Localizable.string

See: https://developer.zendesk.com/embeddables/docs/ios_support_sdk/localize_text

Custom UI (Providers)

/// Zendesk Chat instance
Zendesk2Chat z = Zendesk2Chat.instance;

/// Initialize Zendesk SDK
await z.init(accountKey, appId);

/// Optional Visitor Info information
await z.setVisitorInfo(
    name: name,
    email: email,
    phoneNumber: phoneNumber,
  );

/// Very important, for custom UI, prepare Stream for ProviderModel
await z.startChatProviders();

/// Get the updated provider Model from SDK
z.providersStream.listen((providerModel) {
  /// this stream retrieve all Chat data and Logs from SDK
  _providerModel = providerModel;
});

/// It is also important to disconnect and reconnect and when the app enters  and exits background, to do this you can simply calll
z.disconnect() 
z.connect()  

Push Notifications

To configure chat notifications, you will need to do the following configuration per platform

iOS

Inside your AppDelegate.swift import the ChatSdk import ChatProvidersSDK

Add the following method

    override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        //Messaging.messaging().apnsToken = deviceToken  /// You might already have this if you are using firebase messaging
        
        Chat.registerPushToken(deviceToken)
    }

Android

Using FCM messaging, get your FCM token and register it as follows:

Zendesk2Chat z = Zendesk2Chat.instance;
await z.registerFCMToken(fcmToken);

(calling this function has no effect on iOS)

To display the notifications, you will need to register your own FirebaseMessagingService as a service inside the application. You can follow the Firebase Android Docs for this. An example file that you can copy and customize can be found in the main github repo. Overally you will add the file to your application and register the service as follows:

<service
    android:name="{your package name}"
    android:stopWithTask="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

What you need

  • AccountKey

  • AppId

  • Update Cocoapods to latest version

STATUS

Chat SDK

Live Chat, Customization and Providers for custom UI

Live Chat - OK
Support SDK - OK
Customization - OK

Far development

Unified SDK

Answer BOT SDK

Talk SDK

Libraries

provider_enums
provider_model
zendesk2
zendesk_chat2