gigya_flutter_plugin 0.0.2
gigya_flutter_plugin: ^0.0.2 copied to clipboard

Flutter Android iOS

SAP Gigya Flutter plugin

SAP CDC Gigya Flutter Plugin #

A Flutter plugin for interfacing Gigya's native SDKs into a Flutter application using Dart.

Description #

Flutter plugin that provides an interface for the Gigya API.

Developers Preview Status #

The plugin allows you to use the core elements & business API flows available within the SAP Customer Data Cloud mobile SDKs. This plugin is currently in an early developers preview stage.

Setup & Gigya core integration #

Android setup #

Add the following to your native implementation.

class MainActivity : FlutterActivity() {

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine)

        // Copy this code to you Android app.
        //
        // Reference the plugin and register your SDK initialization parameters.
        val plugin: GigyaFlutterPlugin= flutterEngine.plugins.get(GigyaFlutterPlugin::class.java) as GigyaFlutterPlugin
        plugin.registerWith(application, GigyaAccount::class.java)
    }
}

Important: Make sure you have configured the basic steps needed for integrating the Android SDK

iOS setup #

Navigate to <your project root>/ios/Runner/AppDelegate.swift and add the following:

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {

    // Copy this code to you Android app.
    //
    GeneratedPluginRegistrant.register(with: self)
    SwiftGigyaFlutterPlugin.register(accountSchema: UserHost.self)

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

Important: Make sure you have configured your info.plist file accordinglty.

Sending a simple request #

Sending a request is available using the plugin send method.

GigyaSdk.instance.send('REQUEST-ENDPOINT', {PARAMETER-MAP}).then((result) {
      debugPrint(json.encode(result));
    }).catchError((error) {
      debugPrint(error.errorDetails);
    });

Example implementation is demonstrated in the send_request.dart class of the provided example application.

Business APIs #

The plugin provides an interface to these core SDK business APIs: login, register, getAccount, getAccount, isLoggedIn ,logOut, addConnection, removeConnection Implement them using the same request structure as shown above. Example application includes the various implementations.

Social login #

Use the "socialLogin" interface in order to perform social login using supported providers. The Flutter plugin supports the same *providers supported by the Core Gigya SDK.

Supported social login providers: google, facebook, line, wechat, apple, amazon, linkedin, yahoo.

Embedded social providers #

Specific social providers (Facebook, Google) require additional setup. This due to the their requirement for specific (embedded) SDKs.

Example for both Facebook & Google are implemented in the example application.

Facebook #

Follow the core SDK documentation and instructions for setting Facebook login. Android documentation iOS documentation

iOS: In addition add the following to your Runner's AppDelegate.swift file:

Gigya.sharedInstance(UserHost.self).registerSocialProvider(of: .facebook, wrapper: FacebookWrapper())
Instead of adding the provider's sdk using gradle/cocoapods you are able to add
the [flutter_facebook_login] plugin to your **pubspec.yaml** dependencies.

Google #

Follow the core SDK documentation and instructions for setting Google login. Android documentation iOS documentation

iOS: In addition add the following to your Runner's AppDelegate.swift file:

Gigya.sharedInstance(UserHost.self).registerSocialProvider(of: .google, wrapper: GoogleWrapper())
Instead of adding the provider's sdk using gradle/cocoapods you are able to add
the [google_sign_in] plugin to your **pubspec.yaml** dependencies.

LINE #

In order to provider support for LINE provider, please follow the core SDK documentation. Android documentation iOS documentation

WeChat #

In order to provider support for WeChat provider, please follow the core SDK documentation. Android documentation iOS documentation

Using screen-sets #

The plugin supports the use of Web screen-sets using the following:

GigyaSdk.instance.showScreenSet("Default-RegistrationLogin", (event, map) {
          debugPrint('Screen set event received: $event');
          debugPrint('Screen set event data received: $map');
});

Optional {parameters} map is available.

As in the core SDKs the plugin provides a streaming channel that will stream the Screen-Sets events (event, map).

event - actual event name. map - event data map.

Resolving interruptions #

Much like the our core SDKs, resolving interruptions is available using the plugin.

Current supporting interruptions:

  • pendingRegistration using the PendingRegistrationResolver class.
  • pendingVerification using the PendingVerificationResolver class.
  • conflictingAccounts using the LinkAccountResolver class.

Example for resolving conflictingAccounts interruptions:

GigyaSdk.instance.login(loginId, password).then((result) {
      debugPrint(json.encode(result));
      final response = Account.fromJson(result);
      // Successfully logged in
    }).catchError((error) {
      // Interruption may have occurred.
      if (error.getInterruption() == Interruption.conflictingAccounts) {
        // Reference the correct resolver
        LinkAccountResolver resolver = GigyaSdk.instance.resolverFactory.getResolver(error);
      } else {
        setState(() {
          _inProgress = false;
          _requestResult = 'Register error\n\n${error.errorDetails}';
        });
      }
    });

Once you reference your resolver, create your relevant UI to determine if a site or social linking is required (see example app for details) and use the relevant "resolve" method.

Example of resolving link to site when trying to link a new social account to a site account.

final String password = _linkPasswordController.text.trim();
resolver.linkToSite(loginId, password).then((res) {
     final Account account = Account.fromJson(res);
     // Account successfully linked.
});

Known Issues #

None

How to obtain support #

Contributing #

Via pull request to this repository.

To-Do (upcoming changes) #

None