gigya_flutter_plugin 0.2.1 gigya_flutter_plugin: ^0.2.1 copied to clipboard
SAP Gigya Flutter plugin
Flutter plug-in for SAP Customer Data Cloud #
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.
Requirements #
Android SDK support requires SDK 14 and above.
Download and Installation #
Add the plugin in your pubspec.yaml fie.
Setup & Gigya core integration #
Android setup #
Important: Make sure you have configured the basic steps needed for integrating the Android SDK
If you need custom scheme(Optional):
class MyApplication : FlutterApplication() {
override fun onCreate() {
super.onCreate()
GigyaFlutterPlugin.init(this, GigyaAccount::class.java)
}
}
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.
Mobile SSO #
The plugin supports the native SDK's "Single Sign On feature".
Documentation:
Please make sure to implement the necessary steps described for each platform.
To initiate the flow run the following snippet.
GigyaSdk.instance.sso().then((result) {
// Handle result here.
setState(() { });
}).catchError((error) {
// Handle error here.
});
FIDO/WebAuthn Authentication #
FIDO is a passwordless authentication method that allows password-only logins to be replaced with secure and fast login experiences across websites and apps. Our SDK provides an interface to register a passkey, login, and revoke passkeys created using FIDO/Passkeys, backed by our WebAuthn service.
Please follow the platform implementation guides: Swift Android
Additional setup for Android: To support FIDO operations in your application, it is required that the MainActivity class of the application extends the FlutterFragmentActivity class and not FlutterActivity.
Usage example Login with FIDO/WebAuthn passkey:
_loginWithPasskey() async {
try {
GigyaSdk.instance.webAuthn.webAuthnLogin().then((result) {
setState(() {});
});
} catch (error) {
if (error is GigyaResponse) {
showAlert("FidoError", error.errorDetails);
}
}
}
Register a new FIDO/WebAuthn passkey:
_registerPasskey() async {
try {
var result = await GigyaSdk.instance.webAuthn.webAuthnRegister();
debugPrint(jsonEncode(result));
showAlert("FIDO success", "passkey registered");
} catch (error) {
if (error is GigyaResponse) {
showAlert("FIDO error", error.errorDetails);
}
}
}
Revoke an existing FIDO/WebAuthn passkey:
_revokePasskey() async {
try {
var result = await GigyaSdk.instance.webAuthn.webAuthnRevoke();
debugPrint(jsonEncode(result));
showAlert("FIDO success", "passkey revoked");
} catch (error) {
if (error is GigyaResponse) {
showAlert("FIDO", error.errorDetails);
}
}
}
Login using phone number (OTP) #
Users can now authenticate using a valid phone number. Note: An SMS provider configuration setup is required for the partner
Usage example Begin phone authentication flow providing phone number.
GigyaSdk.instance.otp.login(phone).then((resolver) {
// Code is sent. A resolver object is available for code verification
}).catchError((error) {
// Handle error here.
});
Verify SMS code using obtained "resolver" object.
resolver.verify(code).then((res) {
// Parse account information.
final Account account = Account.fromJson(res);
}).catchError((error) {
// Handle error here.
});
Additional information & limitations
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. Please read CONTRIBUTING file for guidelines.
To-Do (upcoming changes) #
None
Licensing #
Please see our LICENSE for copyright and license information.