OTPLess Flutter Plugin

Integrate OTPless "login with whatsapp" functionality

Getting Started

Native Part (Permissions)

1. Copy the application name, Package Name and Bundle Id and create an OTPLess account

Copy the application name, Package Name and Bundle Id and create an OTPLess account

2. Go to the Applications tab in sidebar and copy the callback URI

  • Callback URI should be the deeplink for your application

Copy the application name, Package Name and Bundle Id and create an OTPLess account

2. Added Required Permissions

For iOS

  • add the following keys in Info.plist file for sucessfull deeplinking of callback uri
  • call back URI has two parts one is scheme and another is domain
  • for Example: For URI "exam://example.com", "exam" will be scheme and "example.com" will be the domain
  • we need to add the domain and scheme to the Info.Plist file
<key>CFBundleURLTypes</key>
<array>
    <dict>
    <key>CFBundleTypeRole</key>
    <string>Editor</string>
    <key>CFBundleURLName</key>
    <string>your_app_domain</string>
    <key>CFBundleURLSchemes</key>
    <array>
    <string>your_app_scheme</string>
    </array>
    </dict>
</array>
  • example (query permission) Example of iOS deeplinking

  • We also need the query permission to check whether the user has Whatsapp installed in his/her device

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>whatsapp</string>
</array>
  • example (query permission) Example for iOS query permission

For Android

  • The AndroidMainfest.xml must be modified to for deeplinking
  • Paste this xml snippet in AndroidManifest.xml present inside android/app/src/main/AndroidManifest.xml inside the <activity> tag
<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="your_app_scheme" android:host="your_app_domain"  />
</intent-filter>
  • If you got more doubt please check the example app's AndroidManifest

Flutter Part (Implementation)

Import the plugin in your Flutter project

NOTE : USE THE PLUGIN IN APPLICATION'S ENTRY POINT Eg. in the root route (starting page) "/"

import 'package:otpless_flutter/otpless_flutter.dart';

Create an instance of plugin and store in a local variable

final _otplessFlutterPlugin = Otpless();

Function for initiating the login process

 // ** Function to initiate the login process
  void initiateWhatsappLogin(String intentUrl) async{
    var result = await _otplessFlutterPlugin.loginUsingWhatsapp(intentUrl: intentUrl);
    switch (result['code']) {
      case "581":
        print(result['message']);
        //TODO: handle whatsapp not found
        break;
      default:
    }
  }

Listen to token changes

  • NOTE LISTEN TO THE TOKEN CHANGES INSIDE initState() METHOD LIKE THE BELOW EXAMPLE
@override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // ** Function that is called when page is loaded
  // ** We can check the auth state in this function
  Future<void> initPlatformState() async {
    _otplessFlutterPlugin.authStream.listen((token) {
      // TODO: Handle user token like making api calls or navigation
      print(token)
    });
  }
  • after sucessfully getting the user token you can make api calls to OTPless Rest API and get user information from the token

  • refer Rest API documentation