ZohoAuth Header

Integrating Zoho Sign-in to your Android Application

ZohoAuth is a holistic SDK which provides easy to use methods. Using these methods, you can achieve Zoho sign-in integration with your Android Mobile Application.

1. Register

Register your mobile application at the Zoho Accounts Developers Console to receive your Client ID and Client Secret. You must enter the client name, client domain, and valid authorized redirect URI.

Make sure you use the drop-down menu to change the client type to Mobile Applications.

Note: The authorized redirect URI is the URLScheme (Example: MyDemoApp://) of your application.

2. Set up your Development Environment

Step-1: Add the following code in the project level build.gradle

    
        include 
        allprojects {
            repositories {
                jcenter()
                maven { url "http://maven.zohodl.com/" }
                maven { url 'https://maven.google.com' }
            }
        }
        
    

Step-2: Include the following code in the app level build.gradle


            implementation 'com.zoho.accounts.android:zaccountssdk: <TheLatestVersion>'
    

Note: Maven is the recommended compiler for compiling the library.

3. Configuration

Step-1: Add the following to your strings.xml


    <string name="iam_portal_url">["Your accounts URL; Example:https://accounts.zohoportal.com%26lt%3B"]
    </string>
    <string name="redir_url">["Your URLScheme; Example: MyDemoApp://"]</string>
    

Step-2a: HandleRedirect activity is an activity which handles the redirection from the chrome tab. To create a HandleRedirect activity, add the following intent-filters for the activity in the manifest.


    <activity android:name=".HandleRedirectActivity">
         <intent-filter>
             <action android:name="android.intent.action.VIEW" />
             <category android:name="android.intent.category.DEFAULT" />
             <category android:name="android.intent.category.BROWSABLE" />
                //for the redirect url MyDemoApp://
             <data android:scheme=["Your URLScheme; Example: MyDemoApp"] />
         </intent-filter>
    </activity>
    

Step-2b: Inside the onCreate of the dummy activity yo should call HandleRedirection method.


        public class HandleRedirectActivity extends AppCompatActivity {
          @Override
          protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           ZohoSDK.getInstance(Context).handleRedirection(Activity);
           }
         }
    

Step-3: In your application class initialize the library by calling init method


        public class DemoApp extends Application {    
            @Override
                public void onCreate() {
                    super.onCreate();
                    String clientID = ["Your ClientID"];
                    String clientSecret = ["Your clientSecret"];
                    String scope = "ZohoCRM.modules.ALL";
                    ZohoSDK.getInstance(this).init(clientID, clientSecret, scope, true);
                }
            }
    

4. Add Zoho login to your code

4a. Login

To show the login screen on the Chrome tab use presentLoginScreen method.

         
        HashMap paramMap = new HashMap();
        paramMap.put("logout","true");//No I18N
        ZohoSDK.getInstance(getApplicationContext()).presentLoginScreen(getApplicationContext(), ZohoTokenCallBack, paramMap);
    

Note:The view will fall back to web view when Chrome is not available

4b. Custom Login

To add Zoho login to your app and customize Zoho login page, add the following code snippet to the login button action of your view controller.

    ZohoSDK.getInstance(getApplicationContext()).presentLoginScreen(MainActivity.this, tokenCallBack, 'Your Custom Params', Color.parseColor("#3FFFB5"));
    

The custom params may include the following with HashMap:

Custom Param NameSupported ValuesPurpose
hide_signuptrue/falseTo hide/show Sign up option
portal_domain<Your Org Registered Domain Name>To show Org logo in Sign in page
hide_fstrue/falseTo hide/show Federated Sign in option

5. OAuth Token

5a. Get OAuth Token:

You should call the getToken method to get the OAuth2 token.

                ZohoSDK.getInstance(MainActivity.this).getToken(tokenCallback);
    

This fetches you a valid OAuth token asynchronously through appropriate callbacks OnTokenFetchInitiated, OnTokenFetchCompleted, OnTokenFetchFailed.


    ZohoSDK.getInstance(this).getToken(new IAMTokenCallback() {
        @Override
        public void onTokenFetchInitiated() {
            //called when the token fetch is initiated by the user
        }
        @Override
        public void onTokenFetchComplete(final IAMToken token) {
            //When the token fetch is successful, use this for further actions 
        }

        @Override
        public void onTokenFetchFailed(final IAMErrorCodes errorCode) {
            //Token fetch is failed
        }
    });
    

5b. How to send the access token

Send the access token only via the authorization header.

Example
Key=>Authorization
Value=>Zoho-oauthtoken<space><access_token>


    request.addHeader("Authorization", "Zoho-oauthtoken<space><access_token>")
    

5c. Logout/Sign-out Handling

Add the following code snipet to the logout/sign-out button action


        ZohoSDK.getInstance(view.getContext()).revoke(new ZohoSDK.OnLogoutListener() {
            @Override
                    public void onLogoutSuccess() {
                        Log.e("LOGOUT", "Success");//No I18N
                    }

                    @Override
                    public void onLogoutFailed() {
                        Log.e("LOGOUT", "Failed");//No I18N
                    }
        });
    

6. Error Handling

In Async getToken method, you'll get IAMErrorCodes in onTokenFetchFailed
In Sync getToken method, you can get IAMErrorCodes using getStatus() method on IAMToken

The possible error codes can be found here: IAMErrorCodes

ErrorCode:
invalid_mobile_code: Logout from the application

7. Logs

Use this method to show logs

ZohoSDK.showLogs();