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 Name | Supported Values | Purpose |
---|---|---|
hide_signup | true/false | To hide/show Sign up option |
portal_domain | <Your Org Registered Domain Name> | To show Org logo in Sign in page |
hide_fs | true/false | To 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();