gigya_flutter_plugin 0.0.4 gigya_flutter_plugin: ^0.0.4 copied to clipboard
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:
import gigya_flutter_plugin
import Gigya
@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