Working with the ASAP SDK for iOS - Online Help | Zoho Desk

Working with the ASAP SDK for iOS

SDK version 3.0

The ASAP SDK for iOS provides easy access to help the end-users of your iOS app. Using this SDK, you can create and customize an add-on that resides within your app and provides end-users with easy access to the following help center services:
  • Customer support team (to raise tickets or chat with support agents)
  • Knowledge Base (to access help articles)
  • User Community (to interact with other users of the app)
For end-users, this addition means that they do not have to exit your app and visit your website or send an email to contact you for support. They can easily seek help right from within your app, thereby saving time and enjoying a superior customer experience.
The ASAP SDK is compatible from iOS 13.0 and Xcode version 14.3.1.
If you are a current user of the ASAP SDK (versions up to 2.2), you need to migrate the existing code to use v3.0. For instructions on how to do this, please refer to the Migrating from v2.x to v3.0 section of this article.

Setting up the SDK in Zoho Desk

The first step to including the ASAP add-on within your iOS app is to create and register the add-on in Zoho Desk.
To create the add-on, perform the following steps.
  1. Go to this path in Zoho Desk:  Setup →  Channels →  ASAP .
  2. In the Setup pane on the left, under ASAP , click the + button next to Mobile . The Create Mobile Add-On page appears.



  3. Under Add-On Details , configure the following settings:
    1. Name: Name for the ASAP add-on. This name is only for reference; it does not appear anywhere on the app UI.
    2. Available for: Departments for which this ASAP add-on must be enabled
    3. Chat: Toggle switch for enabling/disabling Chat.
      The Chat module reflects the settings configured for the chat channel in your help desk portal. Therefore, any change required must be done via the Setup page in Zoho Desk.
    4. Zia:  Zia is an AI companion within Zoho Desk, with whom your customers can speak or chat from your mobile apps. Zia processes their questions and automatically answers them based on content in your knowledge base. Toggle switch for enabling Zia.
    5. Guided Conversations: Guided Conversations helps your end-users find answers by themselves or perform a standard process without an agent's assistance by following a pre-built conversation flow. Toggle switch for enabling Guided Conversations.
      Upon enabling Guided Conversations, you can choose the flows to be used to engage your users in the app. Learn more: Guided Conversations
      You can enable either Zia or Guided Conversations, or both together.
    6. Bundle ID: In the iOS field, enter the bundle ID of your iOS app. (You can retrieve the bundle ID from the General tab within the project target of your app settings.)
      Bundle ID is mandatory for enabling Chat and sending push notifications.
    7. Push Notifications : Toggle switch for enabling/disabling push notifications. For more details, refer to the Enabling Notifications section in this document.
      JWT-based user authentication is mandatory for enabling notifications. Push notifications related to tickets are not sent to anonymous users.
    8. Authentication Method: User authentication setting for the add-on
      1. Anonymous - In this method, end-users are considered guest users. They can only submit tickets, view posts in the user community, and chat with a customer support agent. They cannot view the tickets they submitted or actively participate in the user community.
      2. JWT - In this method, end-users are considered authenticated users. In addition to the activities that guest users can perform, authenticated users can also view and track the status of the tickets they submitted, reply/comment to a ticket, and actively participate in the user community (with rights to perform actions, such as following a topic, adding a topic, and adding a comment to existing posts).
  4. Click Save.


A new section called Code Snippet will appear. This section displays the Org ID, App ID, and Deployment type details of your app. These details are vital for initializing the ASAP SDK in your app.

Integrating the SDK with your app

The next step is to integrate the ASAP SDK with your iOS app.
You can follow either of the following two methods to perform this step.

(i) Integration Using CocoaPods

You must add the Zoho Desk Portal SDK to the Podfile and install the SDK in your project. To do this, perform the following steps.
  1. First, include the SDK of your choice in the Podfile.
    • To integrate the ASAP Core SDK (Tickets, Knowledge Base, Community, and Guided Conversations) , include the following code in the do block of the Podfile.
      pod 'ZohoDeskPortalCore' 
      
    • To integrate the ASAP Services SDK (Tickets, Knowledge Base, Community, Guided Conversations, and Chat), include the following code in the do block of the Podfile.
      pod 'ZohoDeskPortalServices'
      
  2. Save the Podfile.
  3. Execute the pod install or pod update command in Terminal.

     

    To learn more about CocoaPods, read how to use CocoaPods

(ii) Manual Integration

To integrate the ASAP SDK, perform the following steps:
  1. Download the SDK of your choice.
    • ASAP Core SDK (Tickets, Knowledge Base, and Community, and Guided Conversations)
    • ASAP Services SDK (Tickets, Knowledge Base, Community, Guided Conversations, and Chat)
  2. Decompress the zip file you downloaded. Next, drag and drop the respective framework file, which has the extension .XCFramework, to the FrameworksLibraries, and Embedded Content section of your Xcode project bundle.
If you choose to integrate the ASAP Core SDK, make sure to add the NSPhotoLibraryUsageDescriptionNSCameraUsageDescription, NSMicrophoneUsageDescription and NSLocationWhenInUseUsageDescription keys in the info.plist file of your app.

Initializing the SDK in your app

Next, you initialize the ASAP SDK in your app.
The following three keys are crucial in this step:
  • Org ID
  • App ID
  • Datacenter
The values of these keys appear under the Code Snippet section in the setup page of the ASAP add-on, in Zoho Desk.
To initialize the SDK in your app, perform the following steps:
  1. Import the Zoho Desk Portal SDK framework into the AppDelegate file in your project.
    Swift
    import ZohoDeskPortalAPIKit
    
    Objective-C
    @import ZohoDeskPortalAPIKit;
    
  2. Paste the following initialization code into the application method with the didFinishLaunchingWithOptions argument.
    Swift
    func application(_ application: UIApplication, 
    didFinishLaunchingWithOptions launchOptions: 
    [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
        ZohoDeskPortalSDK.initialize(orgID:<#String#>, appID:<#String#>, dataCenter: <#ZDPDataCenter#>) 
        return true 
    }
    
    Objective-C
    - (BOOL)application:(UIApplication *)application 
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
        [ZohoDeskPortalSDK 
    	initializeWithOrgID:<#NSString#>appID:<#NSString#>dataCenter:<
    	#ZDPDataCenter#>]; 
        return YES; 
    	}
    
Datacenter values according to the deployment type are as follows:
CN - ZDPDataCenter.CN
EU - ZDPDataCenter.EU
US - ZDPDataCenter.US
IN - ZDPDataCenter.IN
AU - ZDPDataCenter.AU
JP - ZDPDataCenter.JP

Displaying help modules

Given below are the methods for displaying individual help modules on the ASAP add-on. These methods display the modules according to their default configuration and the settings configured in your Zoho Desk portal. The modules in the default configuration vary according to the Zoho Desk edition in use.

SDK dashboard

The SDK dashboard is the screen through which end-users access your help center. This dashboard displays icons or buttons that provide access to your Knowledge Base, User Community, customer support team (through the ticket submission form), tickets list (list of tickets submitted by users who are logged in), and Chat (to interact with a customer support agent in real time).
If you chose ASAP Services and want to display the Chat module, make sure to enable it in your Zoho Desk web portal.
To display the SDK dashboard, include the following code in any method of your choice.

Swift
import ZohoDeskPortalCore 
... 
ZDPortalHome.show()
Objective-C
@import ZohoDeskPortalCore; 
... 
[ZDPortalHome showWithTitle:<#(NSString * _Nullable)#> navigationMode:<#(enum ZDPNavigationMode)#>];
  • To display a particular help module in the add-on, you must first enable it in your Zoho Desk web portal.
  • You can also hide a module on the dashboard and launch it from a different location in your app.
  • You also have the option to not display the SDK dashboard on your app and still provide access to individual help modules.
  
                                                                                                                      

SDK dashboard with overridden configuration

(i) Display selected modules in SDK dashboard

The SDK enables you to embed your preferred help center modules in your application excluding the other modules. By default, all the support modules are enabled. You can disable the particular support module by passing the value "false".
The following method displays the SDK dashboard with its configuration overridden.
Swift
let config = ZDPHomeConfiguration()
config.enableHelpCenter = true
config.enableCommunity = true
config.enableCreateTicket = true
config.enableMyTicket = true
config.enableAddTopic = true
config.showChat = true
config.showChatBot = true
ZDPortalHome.updateConfiguration(with: config)
ZDPortalHome.show()
Objective-C
ZDPHomeConfiguration * config = [[ZDPHomeConfiguration alloc]init]; 
config.enableHelpCenter = YES;
config.enableCommunity = YES;
config.enableCreateTicket = YES;
config.enableMyTicket = YES;
config.enableAddTopic = YES;
config.showChat = YES;
config.showChatBot = YES;
[ZDPortalHome updateConfigurationWith:config];
[ZDPortalHome showWithTitle:<#(NSString * _Nullable)#> navigationMode:<#(enum ZDPNavigationMode)#>];

(ii) Display individual module without displaying the SDK dashboard

You also have the option to provide access to individual help modules without displaying the SDK dashboard on your application.

The following methods help you display the individual modules with their default configuration.

Chat

Through Chat, end-users can interact with a customer support agent in real time.

The following methods display the Chat module.
Swift
import ZohoDeskPortalChat 
... 
ZDPortalChat.show()
Objective-C
@import ZohoDeskPortalChat; 
... 
[ZDPortalChat show];

Knowledge Base

Knowledge Base is the module through which end-users can access help articles.

For all method calls related to the Knowledge Base, include the following import statement.
Swift
import ZohoDeskPortalKB
Objective-C
@import ZohoDeskPortalKB;
The following methods display the Knowledge Base

Swift
ZDPortakKB.show()
Objective-C
[ZDPortalKB showWithTitle:<#(NSString * _Nullable)#> navigationMode:<#(enum ZDPNavigationMode)#>];
To display a Knowledge Base category using its permalink, use the following method.

Swift
ZDPortalKB.showCategory(withPermalink: <#String#>)
Objective-C
[ZDPortalKB showCategoryWithPermalink:<#(NSString * _Nonnull)#> withTitle:<#(NSString * _Nullable)#>];
Permalink refers to the URL of the Knowledge Base category.

For example, in the URL in the image above, the portion following "/kb/" is the permalink of the category. You can pass this portion as the path of the category or sub-category.

To display an article directly using its permalink, use the following method.

Swift
ZDPortalKB.showArticle(withPermalink : <#String#>)
Objective-C
[ZDPortalKB showArticleWithPermalink:<#(NSString * _Nonnull)#> withTitle:<#(NSString * _Nullable)#>];
Permalink refers to the URL of the help article.

For example, in the URL in the image above, the portion following "/articles/" is the permalink of the article.

Tickets Module

For all method calls related to the Tickets module, include the following import statement.
Swift
import ZohoDeskPortalTicket
Objective-C
@import ZohoDeskPortalTicket;

Submit Ticket

Submit Ticket is the screen through which end-users can submit their questions/requests as support tickets.

The following methods display the Submit Ticket screen.
Swift
ZDPortalSubmitTicket.show()
Objective-C
[ZDPortalSubmitTicket showWithTitle:<#(NSString * _Nullable)#> navigationMode:<#(enum ZDPNavigationMode)#>];

My Tickets

My Tickets is the screen through which end-users can access, track, and edit the tickets they submitted.

The following methods display the My Tickets screen.

Swift
ZDPortalTicket.show()
Objective-C
[ZDPortalTicket showWithTitle:<#(NSString * _Nullable)#> navigationMode:<#(enum ZDPNavigationMode)#>];

User Community

User Community is the module through which end-users can access discussion forums and interact with other users for sharing knowledge.

For all method calls related to the community module, include the following import statement.

Swift
import ZohoDeskPortalCommunity
Objective-C
@import ZohoDeskPortalCommunity;
To display the User Community,

Swift
ZDPortalCommunity.show()
Objective-C
[ZDPortalCommunity showWithTitle:<#(NSString * _Nullable)#> navigationMode:<#(enum ZDPNavigationMode)#>];
To display a particular topic,

Swift
ZDPortalCommunity.showTopic(withID: <#String#>)
Objective-C
[ZDPortalCommunity showTopicWithID:<#(NSString * _Nonnull)#> withTitle:<#(NSString * _Nullable)#>];

Guided Conversations

The Guided Conversations helps your end-users find answers by themselves or perform a standard process without an agent's assistance by following a pre-built conversation flow.

For all method calls related to the Guided Conversations, include the following import statement.

Swift
import ZohoDeskPortalLiveChat
Objective-C
@import ZohoDeskPortalLiveChat;
The following methods display the Guided Conversations.

Swift
ZDPortalLiveChat.show()
Objective-C
[ZDPortalLiveChat show];
Once you enable Guided Conversations and Zia, the Chat component will be displayed as below:
  
                                                
When you enable Guided Conversations and Zia together, Guided Conversations gets loaded by default, and you can switch to Zia if necessary. Note that you cannot switch between Zia and Guided Conversation in the middle of the flow unless you reset the flow by clicking Restart Conversation in the bottom menu.

Authenticating Users in the SDK

To access the tickets they submitted, end-users of your app must have an identity so that they can authenticate themselves as a user of the Zoho Desk portal. This authentication is made possible in Zoho Desk via the JSON Web Token (JWT).
Zoho Desk supports two types of authentication: Anonymous and JWT.
  • Anonymous - In this type, end-users are considered guest users. They can only submit tickets, view posts in the user community, and chat with a customer support agent. They cannot view the tickets they submitted or actively participate in the user community.
  • JWT - In this type, end-users are considered authenticated users. In addition to the activities that guest users can perform, authenticated users can also view the tickets they submitted and actively participate in the user community (with rights to perform actions, such as following a topic, adding a topic, and adding a comment to existing posts).
To learn more about JWT, read  how to configure JWT-based user authentication

The following code snippet authenticates users in the SDK. Make sure to include the following import statements to access all methods related to user authentication.

Swift
import ZohoDeskPortalAPIKit
Objective-C
@import ZohoDeskPortalAPIKit;

JWTToken

The token is passed from your app. kindly refer for how to generate jwttoken.


Swift
if !ZohoDeskPortalSDK.isUserLoggedIn
{ 
    ZohoDeskPortalSDK.login(withJWTToken: String) 
    { (isSuccess: Bool) in 
        // isSuccess shows whether the login attempt was successful 
        // any errors will be logged 
    } 
}else
{ 
        // user logged in already 
}
Objective-C
if (!ZohoDeskPortalSDK.isUserLoggedIn)
{ 
    [ZohoDeskPortalSDK loginWithJWTToken:
    <#(NSString * _Nonnull)#> onCompletion:^(BOOL isSuccess) 
    { 
         // isSuccess shows whether the login attempt was successful 
         // any errors will be logged 
    }]; 
}else
{ 
         // user logged in already 
} 
ZohoDeskPortalSDK.isUserLoggedIn is a Boolean value that tells you whether the user is currently logged in or not.

Logging users out from the SDK

To log a user out from the SDK, use the following method.

Swift
ZohoDeskPortalSDK.logout { (isSuccess: Bool ) in 
    // isSuccess shows whether the logout attempt was successful 
    // any errors will be logged 
}
Objective-C
[ZohoDeskPortalSDK logoutOnCompletion:^(BOOL isSuccess) { 
     // isSuccess shows whether the logout attempt was successful 
     // any errors will be logged 
}];
After this method is called, the authenticated user is treated as an anonymous user.

Clearing Local Data

All the data stored locally in the device is automatically cleared when an authenticated user signs out from the ASAP add-on.

However, if local data needs to be cleared for anonymous users too, use the following method.

Swift
ZohoDeskPortalSDK.clearAllLocalData()
Objective-C
[ZohoDeskPortalSDK clearAllLocalData];

Customizing the Add-On UI

The ASAP SDK provides you with the option to customize the UI of the add-on as required.

Predefined themes

The SDK UI comes with two predefined themes: white and black. The following methods help you apply these themes.
                                                            

If you want to make any changes to the theme, first make sure to include the following import statement, which imports the ZohoDeskPortalConfiguration.

Swift
import ZohoDeskPortalConfiguration
Objective-C
@import ZohoDeskPortalConfiguration;

Methods for applying the white theme (Default)

Swift 
ZDPThemeManager.setTheme(type: .light)
Objective-C
[ZDPThemeManager setThemeWithType:ZDPThemeTypeLight];

Methods for applying the black theme

Swift
ZDPThemeManager.setTheme(type: .dark)
Objective-C
[ZDPThemeManager setThemeWithType:ZDPThemeTypeDark];
iOS 13 provides users with the option to set dark or light theme throughout the system. For iOS 13 and above, you can set system theme in the ASAP add-on. In such cases, the add-on will be in the same theme as the rest of the OS.

Swift
ZDPThemeManager.setTheme(type: .system)
Objective-C
[ZDPThemeManager setThemeWithType:ZDPThemeTypeSystem];
- ZDPThemeType.system is available only for iOS 13 and above.
- By default, system theme will be applied for iOS 13 and above, and light theme will be applied for earlier versions.

Customized themes

You can also override the default dark and light themes to make the SDK look more like your application.

To update the default light theme,

Swift
ZDPThemeManager.updateLightTheme(theme: <#ZDPThemeProtocol#>)
Objective-C
[ZDPThemeManager updateLightThemeWithTheme:<#ZDPThemeProtocol#>];
To update the default dark theme,

Swift
ZDPThemeManager.updateDarkTheme(theme: <#ZDPThemeProtocol#>)
Objective-C
[ZDPThemeManager updateDarkThemeWithTheme:<#ZDPThemeProtocol#>];
Here, ZDPThemeProtocol contains the list of properties that represent the most used colors across the SDK, such as primaryTextColor and navigationBarTextColor among others. All properties in the protocol are optional. You can create any class conforming to this protocol, implement one or more properties, and pass an object of that class to the updateLightTheme or updateDarkTheme method. The colors you set in the class will override the default theme.
Updating the SDK's theme is different from setting a theme type. At any point of time, the SDK will be in dark or light theme, based on the theme type you have set.
                                                       

Using custom fonts

The SDK UI offers a set of default fonts, but you can use fonts of your choice if required.
To be able to display custom fonts on the SDK UI, perform these steps first:
  1. Add the fonts to your project.
  2. Edit the info.plist file of your app to include the Fonts provided by application key.
  3. Under this key, list the file names of all the fonts you want to use in the SDK UI.
After adding the fonts to your project, you can customize the SDK UI to display text in that font.
To display the custom font on your SDK UI, include the following method in your app code

Swift
ZDPortalConfiguration.customFontName = <#String#>
Objective-C
ZDPortalConfiguration.customFontName = <#NSString#>;
If you do not use a custom font, the add-on displays the system font by default. We have made the font sizes accessible from version 2.0. Accessibility for custom fonts, however, is supported only for iOS 11 and above.

Changing Language Settings

The ASAP SDK supports 47 languages. You can set any language of your choice, based on the geographical location of the end-users of your app.

Below is the code that helps you set the language for the ASAP add-on. However, to limit the size of the SDK, we have bundled only the 13 languages that were supported in previous SDK versions.

Below is the list of all 47 languages supported in the ASAP SDK.

Language

Locale Code

English (UK)

en-GB

English (US)

en

German

de

Spanish

es

Catalan

ca-ES

French

fr

French (Canada)

fr-CA

Italian

it

Russian

ru

Chinese (Traditional)

zh-Hant

Chinese (Simplified)

zh-Hans

Turkish

tr

Dutch

nl

Danish

da

Portuguese (Portugal)

pt-PT

Japanese

ja

Swedish

sv

Polish

pl

Arabic

ar

Hebrew

he

Afrikaans

af

Czech

cz

Bulgarian

bg

Finnish

fi

Greek

el

Hungarian

hu

Indonesian

id

Norwegian (Bokmal)

nb

Romanian

ro

Thai

th

Ukrainian

uk

Vietnamese

vi

Urdu

ur

Hindi

hi

Telugu

te

Kannada

kn

Tamil

ta

Marathi

mr

Korean

ko

Persian

fa

Bengali

bn

Gujarati

gu

Malay

ms

Malayalam

ml

Slovak

sk

Croatian

hr

Slovenian

sl


Below is the code that helps you set the language for the ASAP add-on. Pass the language identifier to the method. For instance, pass "en" for English.

Swift
ZDPortalConfiguration.setSDKLanguage(<#String#>)
Objective-C
[ZDPortalConfiguration setSDKLanguage:<#NSString#>];
The following table lists the 13 languages that come bundled with the SDK.

Language
Locale Code
English
en
German
de
Spanish
es
French
fr
Italian
it
Russian
ru
Chinese (Traditional)   
zh-Hant
Chinese (Simplified) 
zh-Hans
Turkish
tr
Dutch
nl
Danish
da
Portuguese (Portugal)  
pt-PT
Japanese
ja

To add any of the other 34 languages to your app, perform the following steps:
  1. Download the strings bundle.
  2. Remove the lproj files of the languages that are not required for your app.
  3. Add the bundle to your project.

Customizing UI Strings

The ASAP SDK facilitates customization of the text that appears on the different screens of the add-on. The text includes UI labels for help modules, error messages, and general information. To change the text, perform the following steps:
  1. Create a bundle titled ASAPStrings.bundle in the Xcode project of your app. The path to access this bundle is: Application-bundle/ASAPStrings.bundle.
  2. Create a new lproj file with the language code as the filename and customize the values of the keys, as required. You can customize the prominent keys listed below or all the keys in the languages bundle.
  3. Add this new lproj file to the ASAPStrings bundle.
Each language needs a unique lproj file. To customize the strings in each language that you want to support in your add-on, repeat steps 2 and 3 as many times as required.

The following table lists some of the prominent keys in the default ASAPLocalizable.strings file.

Key
Default Text
Description
DeskPortal.Dashboard.Heading
"Welcome"
Text that appears on the help center dashboard
DeskPortal.Dashboard.helpcenter.title
"Knowledge Base"
Title of the Knowledge Base module icon on the dashboard
DeskPortal.Dashboard.helpcenter.description
"Browse our extensive repository of help articles"
Text that describes the Knowledge Base
DeskPortal.Dashboard.community.title
"Community"
Title of the user community module icon on the dashboard
DeskPortal.Dashboard.community.description
"Find and share solutions with the User Community"
Text that describes the User Community
DeskPortal.Dashboard.addticket.title
"Submit Ticket"
Title of the ticket submission module icon on the dashboard
DeskPortal.Dashboard.addticket.description
"Seek help from our agents"
Text that describes the ticket submission screen
DeskPortal.Dashboard.myticket.title
"My Tickets"
Title of the my tickets icon on the dashboard
DeskPortal.Dashboard.myticket.description
"View and manage tickets that you submitted"
Text that describes the my tickets screens
DeskPortal.Helpcenter.article.detail.relatedtitle
"Related Articles"
Text that appears below any help article in the Knowledge Base
DeskPortal.Helpcenter.article.detail.vote.description
"Was this article helpful?"
Text that seeks feedback from the user
DeskPortal.Helpcenter.feedback.title
"Feedback"
Title of the feedback form
DeskPortal.Helpcenter.feedback.description
"We're sorry the article wasn't helpful."
Text that appears when a user downvotes an article
DeskPortal.Myticket.option.closeticket
"Close Ticket"
Text for option that lets the user close a ticket they submitted
DeskPortal.Error.message.reload
"Retry"
Error message that appears if ticket submission fails
DeskPortal.Network.failed.error.message
"Check your internet connection"
Error message that indicates loss of connectivity
DeskPortal.Dashboard.livechat.title
"Live Chat"
Title of the live chat module on the help center dashboard
DeskPortal.Helpcenter.category.subheading
"Section"
Text that appears if only one article category exists in the Knowledge Base
DeskPortal.Helpcenter.categories.subheading
"Sections"
Text that appears if multiple article categories exist in the Knowledge Base
DeskPortal.Helpcenter.article.detail.title
"FAQs"
Title of the individual article screen
DeskPortal.Addticket.title
"Add Ticket"
Title of the ticket submission form
DeskPortal.Myticket.comment.option.title
"Comment Actions"
Title of the options menu that appears when a user adds a comment to a ticket
DeskPortal.Myticket.option.editcomment
"Edit Comment"
Text for option that lets the user edit a comment they made
DeskPortal.Helpcenter.article.subheading
"Article"
Text that appears if only one article exists under an article category
DeskPortal.Helpcenter.articles.subheading
"Articles"
Text that appears if multiple articles exist under an article category

Enabling Notifications

You can configure the ASAP add-on to send notifications to end-users when an agent responds via chat. The key component in making this possible in the SDK is an Apple Push Notification service (APNs) certificate in the .p12 format.
To generate a .p12 file of the APNs certificate, perform the following steps:
  1. Create and download an APNs certificate from Apple's developer portal.
  2. Double-click the certificate. This action automatically imports it to the Keychain Access application.
  3. Locate and expand the certificate in Keychain Access. The corresponding key for the certificate appears.
  4. Select both the certificate and the key and right-click on them. A context menu will appear.
  5. Click the export option. A dialog box will appear.
  6. In this dialog box, make sure that .p12 is selected in the File Format drop-down list and click Save .
  7. Enter a password to access the file and click OK. The certificate is now exported as a .p12 file.
Next, you must enable push notifications in the Zoho Desk ASAP setup page. Here's how you do this. To do so, beginning on the setup page for the add-on in Zoho Desk, upload the .p12 file you created and the password to access the file. Next, configure the add-on to invoke the enablePushNotification: API call inside the application:didRegisterForRemoteNotificationsWithDeviceToken: method in the AppDelegate.

To perform this configuration, include the following method in the app code.

Swift
func application
(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) 
{ 
let token = deviceToken.reduce
("", {$0 + String(format: "%02X", $1)}).uppercased() 
ZohoDeskPortalSDK.enablePushNotification
(deviceToken:token, mode: .production) 
}
Objective-C
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
   NSString * token = [[[[deviceToken description]
   stringByReplacingOccurrencesOfString: @"<" withString: @""]
   stringByReplacingOccurrencesOfString: @">" withString: @""]
   stringByReplacingOccurrencesOfString: @" " withString: @""];
   [ZohoDeskPortalSDK enablePushNotificationWithDeviceToken:<#(NSString * _Nonnull)#> isTestDevice:<#(BOOL)#> mode:<#(enum APNSmode)#>];
}
You can verify if notifications are sent accurately by testing the functionality in development mode. To switch to development mode, replace ".production" in the code snippet above with ".sandbox". Make sure to switch back to production mode before deploying the app for end-customer use.
Next, you must configure the SDK to automatically invoke the didReceiveRemoteNotification: method in the AppDelegate when a push notification is received. Next, for the SDK to process the notification received and perform the corresponding operation, the processRemoteNotification method in the SDK must be invoked with details of the notification, as follows.

Swift
import ZohoDeskPortalConfiguration 
... 
func application(_ application: UIApplication, 
didReceiveRemoteNotification userInfo: [AnyHashable : Any]) 
{ 
   ZDPortalConfiguration.processRemoteNotification(userInfo: userInfo) 
}
Objective-C
@import ZohoDeskPortalConfiguration; 
... 
- (void)application:(UIApplication *)application 
didReceiveRemoteNotification:(NSDictionary *)userInfo 
fetchCompletionHandler:(void (^)
(UIBackgroundFetchResult))completionHandler
{ 
[ZDPortalConfiguration processRemoteNotificationWithUserInfo:userInfo];
}


You cannot configure Push notifications for only Android or only iOS in the live implementation. We need to configure both.
If you get any of the below errors:

  1. FCM token is invalid - The FCM key should be reviewed.
  2. Password incorrect - The iOS certificate's password should be checked.
  3. Invalid Certificate: The iOS.p12 file is invalid. Please recheck the certificate.

 

Steps to upload the .p12 file for using the APNS Certificate:

  1. The .p12 file is generated using the APNS certificate in the keychain application.
  2. If you run your application using your Development certificate, you have to choose the Sandbox mode; for the Distribution/Production certificate, you have to select the Production mode in the ASAP setup.
  3. .Enter the created password while completing the p12 process in the password section

Displaying details of anonymous users to agents

When an anonymous user contacts customer support via chat, their details usually do not appear on the agent's screen. However, you can configure the ASAP add-on to display these details after receiving them from the user.

To configure this setting, use the following method.

Swift
import ZohoDeskPortalChat 
   ... 
   ZDPortalChat.setGuestUser(email:<#Guest_User_Email#>, 
   displayName:<#Guest_User_DisplayName#>", 
   phoneNumber: <#Guest_User_PhoneNumber#>")
Objective-C
@import ZohoDeskPortalChat; 
... 
    [ZDPortalChat setGuestUserWithEmail:<#Guest_User_Email#>
    displayName:<#Guest_User_DisplayName#>
    phoneNumber:<#Guest_User_PhoneNumber#>];  
Additionally, agents can convert chat conversations into tickets, if more interactions with the user are required later. The email address is a mandatory parameter to make this conversion possible.

Programmatically adding tickets

While end-users can manually submit tickets through the ASAP add-on, you can also configure your app to automatically record tickets when certain events occur in the app. For instance, if you run a clothing business and your app fails to load the For Women screen when a user tries to access it, this failure instance can be automatically recorded as a ticket in your help desk.

The user would not need to visit your help center and manually submit a ticket.

To make this automatic submission of tickets possible, incorporate the following methods in your app code.

Swift
import ZohoDeskPortalAPIKit
Objective-C
@import ZohoDeskPortalAPIKit;
To fetch the IDs of the departments in your help desk portal, use the following method.

Swift
ZohoDeskPortalSDK.getDepartments(onCompletion: 
{ (departments, error) in 
 // on success, departments will return an array, error will return nil 
 // on failure, error will return a value, departments will return nil 
}
Objective-C
[ZohoDeskPortalSDK getDepartmentsOnCompletion:^
(NSArray * departments, NSError * error) 
{ 
 // on success, departments will return an array, error will return nil 
 // on failure, error will return a value, departments will return nil 
}];
To fetch information on the products configured in a department, use the following method.

Swift
ZohoDeskPortalSDK.getProducts(inDepartmentID: <#T##String#>, params: <#T##[String : Any]?#>) 
{ products, error in
// on success, products will return an array, error will return nil
// on failure, error will return a value, products will return nil
}
Objective-C
[ZohoDeskPortalSDK getProductsInDepartmentID:<#NSString#>
params:<#NSDictionary#>onCompletion:^
(NSArray * products, NSError * error) 
{ 
 // on success, products will return an array, error will return nil 
 // on failure, error will return a value, products will return nil 
}];
To fetch the fields configured in the ticket layout of a department, use the following method.

Swift
ZohoDeskPortalSDK.Ticket.getFields(<#T##params: [String : Any]?##[String : Any]?#>) 
{ fields, error in
// on success, fields will return an array, error will return nil
// on failure, error will return a value, products will return nil
}
Objective-C
[ZohoDeskPortalSDKTicket getFields:
<#(NSDictionary * _Nullable)#>onCompletion:^
(NSArray * fields, NSError * error) 
{ 
 // on success, fields will return an array, error will return nil 
 // on failure, error will return a value, fields will return nil 
}];
To include a file attachment in the ticket, use the following method.

Swift
ZohoDeskPortalSDK.Ticket.addAttachment(with:<#Data#>, 
andName:<#String#>, using: <#ZDPUploaderDelegate?#>) 
{ (attachment, error) in 
 // on success, attachment will return a value, error will return nil 
 // on failure, error will return a value, attachment will return nil 
}
Objective-C
[ZohoDeskPortalSDKTicket addAttachmentWith:
<#NSData#>andName:<#NSString#>using:
<#(id _Nullable)#>onCompletion:^
(ZDPortalAttachment * attachment, NSError * error) 
{ 
// on success, attachment will return a value, error will return nil 
// on failure, error will return a value, attachment will return nil 
}];
To make this automatic submission of tickets possible, incorporate the following method in your app code. You have to call different methods to post tickets for authenticated and unauthenticated users.

Swift
if ZohoDeskPortalSDK.isUserLoggedIn 
{ 
    ZohoDeskPortalSDK.Ticket.add(withFields:<#T##[String : Any]#>)
    { (ticket, error) in 
   // on success, ticket will return an object, 
		error will return nil 
   // on failure, error will return a value, 
		ticket will return nil 
    } 
} else 
{ 
    ZohoDeskPortalSDK.Ticket.addAsGuest
	(withFields: <#T##[String : Any]#>) 
    { (ticketNumber, error) in 
    // on success, ticketNumber will return a string value, 
		error will return nil 
    // on failure, error will return a value, 
		ticketNumber will return nil 
    } 
}
Objective-C
if (ZohoDeskPortalSDK.isUserLoggedIn)
{
        [ZohoDeskPortalSDKTicket addWithFields:<#(NSDictionary * _Nonnull)#> onCompletion:^(ZDPTicket * ticket, NSError * error)
    {
        	// on success, ticket will return an object, error will return nil
        	// on failure, error will return a value, ticket will return nil
        }];
}
else
{
        [ZohoDeskPortalSDKTicket addAsGuestWithFields:
        <#(NSDictionary * _Nonnull)#> onCompletion:^(NSString * ticketNumber, NSError * error)
        {
        	// on success, ticketNumber will return a string value, error will return nil
        	// on failure, error will return a value, ticketNumber will return nil
        }]
}
EmailAddressSubject, and DepartmentID are mandatory parameters in the method call

Customizing the Community module

These methods help you display your user community and all associated content on the ASAP add-on.

Custom-Configuring Community actions

Users can perform a range of actions, including editing and deleting topics; and adding, editing, and deleting comments, in the community module.

The following method helps you define which actions must be allowed and which actions must be disallowed when users access the community through the ASAP add-on.

Swift 
ZDPCommunityConfiguration.isTopicEditAllowed = <#Bool#> 
ZDPCommunityConfiguration.isTopicDeleteAllowed = <#Bool#> 
ZDPCommunityConfiguration.isReplyAllowed = <#Bool#> 
ZDPCommunityConfiguration.iReplyEditAllowed = <#Bool#> 
ZDPCommunityConfiguration.isReplyDeleteAllowed = <#Bool#>
Objective-C
ZDPCommunityConfiguration.isTopicEditAllowed = <#Bool#>; 
    ZDPCommunityConfiguration.isTopicDeleteAllowed = <#Bool#>; 
    ZDPCommunityConfiguration.isReplyAllowed = <#Bool#>; 
    ZDPCommunityConfiguration.isReplyEditAllowed = <#Bool#>; 
    ZDPCommunityConfiguration.isReplyDeleteAllowed = <#Bool#>;
The following API fetches the forum topics with the most number of likes.

Swift
ZohoDeskPortalSDK.Community.getMostPopularTopics(<#T##params: [String : Any]?##[String : Any]?#>)
{ topics, error in
// switch on result to get array of topics on success 
}
Objective-C
[ZohoDeskPortalSDKCommunity getMostPopularTopics:
    <#(NSDictionary * _Nullable)#> onCompletion:^(NSArray * topics, NSError * error)
{
// on success, topics will return an array, error will return nil
// on failure, error will return a value, topics will return nil
}];
Here are some of the parameter keys and the types of values expected. For more information on all keys and values, refer to the API documentation.
  1. categoryId - string - ID of the community category from which the topics must be fetched. If you want to include all categories, pass the value "-1".
  2. filterType - string - Type of forum topic. Values allowed are: QUESTIONIDEAANNOUNCEMENTPROBLEM, and DISCUSSION.
  3. from - int - Index number, starting from which the topics must be fetched. Value starts from 1.
  4. limit - int - Number of topics to fetch
  5. includeCount - Boolean - Parameter that specifies whether the number of topics fetched must be displayed or not

Getting the Most Discussed Topics

The following API fetches the forum topics with the most number of comments.

Swift
ZohoDeskPortalSDK.Community.getMostDisuccedTopics(<#T##params: [String : Any]?##[String : Any]?#>) 
{ topics, error in
// on success, topics will return an array, error will return nil
// on failure, error will return a value, products will return nil 
}
Objective-C
[ZohoDeskPortalSDKCommunity getMostDisuccedTopics:
    <#(NSDictionary * _Nullable)#> onCompletion:^(NSArray * topics, NSError * error)
{
// on success, topics will return an array, error will return nil
// on failure, error will return a value, topics will return nil
}];
Here are some of the parameter keys and the types of values expected. For more information on all keys and values, refer to the API documentation.
  1. categoryId - string - ID of the community category from which the topics must be fetched. If you want to include all categories, pass the value "-1".
  2. filterType - string - Type of forum topic. Values allowed are: QUESTIONIDEAANNOUNCEMENTPROBLEM, and DISCUSSION.
  3. from - int - Index number, starting from which the topics must be fetched. Value starts from 1.
  4. limit - int - Number of topics to fetch
  5. includeCount - Boolean - Parameter that specifies whether the number of topics fetched must be displayed or not

Customizing the Tickets module

These methods help you configure the Submit Ticket form the way you want, on the ASAP add-on.

Hiding fields in the Submit Ticket form

The Submit Ticket form in your ASAP add-on displays the same fields configured in the ticket layout in your Zoho Desk portal. If you want to hide any of the fields in the form, you can do so using the setFieldsListTobeShown() method.

Swift
ZDPortalSubmitTicket.setFieldsListTobeShown
(fields: <#[ZDVisibleTicketField]#>)
Objective-C
[ZDPortalSubmitTicket setFieldsListTobeShownWithFields:
<#(NSArray * _Nonnull)#>];
Here, ZDVisibleTicketField is a class containing two properties: departmentId (an optional string), layoutId, and an array of field names. You must pass the list of fields (apiNames) as strings in this method. You might also have to pass the departmentId key, depending on the department mapping of the add-on. For example, if the add-on is configured for a specific department, you don't need to pass the departmentId key. If the add-on is configured for multiple departments, you must pass the departmentId key to ensure department-ticket fields mapping in the Submit Ticket form. After you include this method, the form displays only the fields you passed in the method. However, keep in mind that mandatory fields will not be hidden even if you do not pass their names in the method.

Hiding mandatory fields in the Submit Ticket form

If you absolutely want to hide a mandatory field in the form, you can do so, provided the value of the field is pre-filled. To do this, you must use the preFillTicketFields() method.

The preFillTicketFields() method proves useful when you want to pre-populate fields with values, such as auto-generated IDs or OS version of devices.

To use this method, you must pass the list of PreFillTicketField objects. You should also pass the departmentId key, depending on the department mapping of the add-on.

Swift
ZDPortalSubmitTicket.preFillTicketFields(forForms: <#[ZDCustomizedTicketForm]#>)
Objective-C
[ZDPortalSubmitTicket preFillTicketFieldsForForms:<#[ZDCustomizedTicketForm]#>];
Here, ZDCustomizedTicketForm is a class containing two properties: departmentId (an optional string), and an array of customized ticket fields. Just like in the case of the setFieldsListTobeShown() method, if the add-on is configured for a specific department, you don't need to pass the departmentId key. If the add-on is configured for multiple departments, you must pass the departmentId key to ensure department-fields mapping.

The ZDCustomizedTicketField object contains three main properties:
  1. deptId - ID of the department for which you want to configure the Ticket Fields list.
  2. layoutId - ID of the particular layout for which you want to configure the Ticket Fields.
  3. fieldApiName - string - apiName of the ticket field. You can retrieve the apiName of each field using the getTicketForm() method.
  4. fieldValue - object
    1. For multiselect fields, pass the values allowed, as a comma(,) separated string.
    2. For pick list fields, pass one of the values allowed, as a string.
    3. For date fields, pass the value as a string in the MM/dd/yyyy format.
    4. For dateTime fields, pass the value as a string in the MM-dd-yyyy hh:mm aa format.
    5. For Boolean fields, pass a String value("true"/"false").
    6. For all other field types, pass the values as string objects.
    7. Make sure that the values you pass here to the maxlength and decimal restrictions defined for the field.
  5. isEditable - Boolean - Key that defines if the value in the field is editable or not
For more clarity check the sample here.

Submit Ticket event with subscription

To subscribe your app to the Submit Ticket event, use the following method, which involves an event callback:
Swift
ZDPortalSubmitTicket.getCallbackOnCreateTicket 
{ ticket in
// will get ticket object on success
} 
onError: 
{ error in
// will get error on failure
}
Objective-C
[ZDPortalSubmitTicket getCallbackOnCreateTicketWithCompletion:^(ZDPTicket * ticket) 
{
// will get ticket object on success
} onError:^(NSError * error)
{
// will get error on failure
}];
If an authenticated user submits a ticket, all details of the ticket are sent to your app. If a guest user submits a ticket, only the ticket number is sent.

Custom-Configuring Ticket Actions

Users can perform a range of actions, including replying to, commenting on, and closing tickets.

The following method helps you define which actions must be allowed and which actions must be disallowed when users access the ticket submission screen on the ASAP add-on.

Swift
ZDPTicketConfiguration.configure.isAddTicketAllowed = <#Bool#>
ZDPTicketConfiguration.configure.isReplyAllowed = <#Bool#>
ZDPTicketConfiguration.configure.isCommentAllowed = <#Bool#>
ZDPTicketConfiguration.configure.isCommentEditAllowed = <#Bool#>
ZDPTicketConfiguration.configure.isTicketUpdateAllowed = <#Bool#>
ZDPTicketConfiguration.configure.isCommentDeleteAllowed = <#Bool#>
ZDPTicketConfiguration.configure.isCustomerHappinessThreadAllowed = <#Bool#>
Objective-C
ZDPTicketConfiguration.configure.isAddTicketAllowed = <#Bool#>
ZDPTicketConfiguration.configure.isReplyAllowed = <#Bool#>
ZDPTicketConfiguration.configure.isCommentAllowed = <#Bool#>
ZDPTicketConfiguration.configure.isCommentEditAllowed = <#Bool#>
ZDPTicketConfiguration.configure.isTicketUpdateAllowed = <#Bool#>
ZDPTicketConfiguration.configure.isCommentDeleteAllowed = <#Bool#>
ZDPTicketConfiguration.configure.isCustomerHappinessThreadAllowed = <#Bool#>

Updating user details

The following API helps update the details of users added to your help desk portal.

Swift
import ZohoDeskPortalAPIKit 
    ... 
    var body = [String : Any]() 
    body["displayName"] = "displayName" 
    body["mobile"] = "123456" 

ZohoDeskPortalSDK.updateUserInformation(with: body) 
{ profile, error in
// on success only profile will return a value, error will return nil
// on failure only error will return a value, profile will return nil
}
Objective-C
NSMutableDictionary * body = [NSMutableDictionary new]; 
    [body setObject:@"displayName" forKey:@"displayName"]; 
    [body setObject:@"123456" forKey:@"mobile"]; 
    [ZohoDeskPortalSDK updateUserInformationWith:body onCompletion:
	^(Profile * profile, NSError * error) 
{ 
    // on success only profile will return a value, error will return nil 
    // on failure only error will return a value, profile will return nil 
}];

Params

Dictionary [String : Any] data - Key and value pair. The following keys are included: twitter, phone, facebook, name, displayName, mobile, countryLocale, and timeZone.

ASAP configuration

You can enable/disable the following options from the application end:
  1. SideMenu
  2. Language chooser
  3. Zoho footer, "powered by ASAP label."
By default, all the options are enabled.



To disable the above mentioned options, include the following code snippet:

Swift
let configuration = ZDPConfiguration()
configuration.disableSidemenu = true
configuration.disableLanguageChooser = true
configuration.disablePoweredByZoho = true
ZDPortalConfiguration.set(configuration: configuration)
Objective-C
ZDPConfiguration * configuration = [ZDPConfiguration init];
configuration.disableSidemenu = YES;
configuration.disableLanguageChooser = YES;
configuration.disablePoweredByZoho = YES;
[ZDPortalConfiguration setWithConfiguration:configuration];

Custom Chat Brand

If your ASAP setup lacks chat functionality but you have a brand in SalesIQ, you can now load the same SalesIQ chat brand within the ASAP SDK by providing the AppKey and AccessKey. This allows your end-users to contact your agents via chat.
The bundle ID configured with the brand and the app must be identical.
Swift
import ZohoDeskPortalConfiguration 
...
ZDPortalConfiguration.setChatBrandDetails(appKey: "Chat App key", accessKey: "Chat Access key")

Objective-C
@import ZohoDeskPortalConfiguration;
...
[ZDPortalConfiguration setChatBrandDetailsWithAppKey:@"Chat App key" accessKey:@"Chat Access key"];

SDK Logging

Enabling the console log allows you to track error messages, helping in the identification and resolution of errors that may arise during execution.

By default, logs are disabled for the SDK. 

To enable the logs, include the following code snippet:

Swift
import ZohoDeskPortalAPIKit 
    ... 
    ZohoDeskPortalSDK.enableLogs()
Objective-C
@import ZohoDeskPortalAPIKit;
...

[ZohoDeskPortalSDK enableLogs];

Release Notes

3.0.5

  • A new method has been introduced to load the Custom Chat Brand in ASAP SDK. For more info, please click here.
  • Integrated the latest version of SalesIQ SDK version 8.0.2.

3.0.4

  • Integrated the latest version of Guided Conversation SDK.

3.0.3

  • System fields in the Add Ticket form and Ticket Properties screen can now be localized.
  • Implemented an enhanced push notification functionality.

3.0.2

  • The SDK minimum deployment target has been updated to iOS 13.0, and the supported Xcode version has been updated to 14.3.1.
  • UI enhancements, along with bug fixes, have been implemented.

3.0.1

  • Essential support has been provided for iPad devices.
  • UI enhancements, along with bug fixes, have been implemented.

3.0.0

  • A new property has been introduced to Customize the colour of the navigation bar buttons. For more info, please click here.
  • The Department and Layout UI on the Add Ticket module has been redesigned.

3.0.0-beta-17

  1. We implemented the Text-To-Speech and the In-Article Search features for the KB Articles.

3.0.0-beta-16

  • We handled the Nested pick list in the ASAP SDK Tickets module.

3.0.0-beta-15

  • We have provided module-level configuration; you can now easily enable or disable modules throughout the mobile SDK.

3.0.0-beta-14

  • Handled the miscellaneous bug issue in the SalesIQ Livechat for a single department.

3.0.0-beta-13

  • We integrated the latest SalesIQ SDK version 5.4.1.
  • Highlighted the search text.

3.0.0-beta-12

  • Supported the theme APIs in Objective-C language.

3.0.0-beta-11

  1. Provided an option to edit the Ticket Properties within the ASAP SDK.

3.0.0-beta-10

  1. Implemented login support with JWT token in Objective-C language. For more information, refer "JWTToken " under Authenticating Users in the SDK

3.0.0-beta-9

  1. Included arm64 architecture for simulator.

3.0.0-beta-8

  1. Handled issues faced in the dark theme for the Article detail, Topic detail, and conversation screens.
  2. Handled the issue with the bot's customised name reflection in Guided Conversation.
  3. Error logs are disabled by default. To enable the error log, refer SDK Logging.

3.0.0-beta-7

  1. Performance tuning. 

3.0.0-beta-6

  1. A new independent method has been introduced to receive a callback on create ticket. The old call method has been deprecated. For more information, refer "Submit Ticket event with subscription" under Customizing the Tickets module.
  2. Provided an option to disable the side-menu, language chooser, and Zoho footer, "powered by ASAP label." For more information, refer ASAP configuration.

3.0.0-beta-5

  • Fixed the problem of uploading attachments faced in iOS 13.

  • Resolved the problem with the custom title in the Community module.

  • Handled Configuration for customer happiness threadFor more information, refer "Custom-Configuring Ticket Actions" under Customizing the Tickets module.

  • Handled the miscellaneous bug fixes.

3.0.0-beta-4      

  • Fixed the navigation issue in Submit Ticket case.

3.0.0-beta-3

  1. Supported ASAP switch within your applicationWhile switching to a new ASAP, the customer initializes a new session with a new set of ASAP keys (OrgID, AppID). The new session is established by killing the current session and initialize a new one based on the new keys(OrgID, AppID).
  2. Supported login using JWT token: You can now allow users to log in using a JWT token in the new authentication flow. For more information, refer "JWTToken " under Authenticating Users in the SDK.
  3. UI enhancement and performance tuning.

3.0.0-beta-2

  1. UI enhancement and performance tuning.

Migrating from v2.x to v3.0  

The following tables list the changes you need to make to ensure a smooth migration.

Added separate method to set Home configuration 

v2.0 Series

v3.0

let config = ZDPHomeConfiguration()

config.enableHelpCenter = true

config.enableCommunity = false

config.enableCreateTicket = true

config.enableMyTicket = true

ZDPortalHome.show(withConfiguration: config)


let config = ZDPHomeConfiguration()

config.enableHelpCenter = true

config.enableCommunity = true

config.enableCreateTicket = true

config.enableMyTicket = true

config.enableAddTopic = true

config.showChat = true

config.showChatBot = true

ZDPortalHome.updateConfiguration(with: config)

ZDPortalHome.show()

 

// added separate method to set Home configuration

 

 

Theme API changes

v2.0 Series

v3.0

import ZDThemeKit
....
ZDThemeManager.setTheme(type: .white)

import ZohoDeskPortalConfiguration
...
ZDPThemeManager.setTheme(type: .white) // Changed ZDThemeManager to ZDPThemeManager

ZDThemeManager.updateTheme(theme: <#ZDThemeProtocol#>)

ZDPThemeManager.updateLightTheme(theme: <#ZDPThemeProtocol#>)



    Zoho CRM Training Programs

    Learn how to use the best tools for sales force automation and better customer engagement from Zoho's implementation specialists.

    Zoho CRM Training
      Redefine the way you work
      with Zoho Workplace

        Zoho DataPrep Personalized Demo

        If you'd like a personalized walk-through of our data preparation tool, please request a demo and we'll be happy to show you how to get the best out of Zoho DataPrep.

        Zoho CRM Training

          Create, share, and deliver

          beautiful slides from anywhere.

          Get Started Now


            Zoho Sign now offers specialized one-on-one training for both administrators and developers.

            BOOK A SESSION





                        Still can't find what you're looking for?

                        Write to us: support@zohoforms.com

                                                                       
                            



                            



                          Contact Support :
                          Contact Sales :


                                You are currently viewing the help pages of Qntrl’s earlier version. Click here to view our latest version—Qntrl 3.0's help articles.




                                    Manage your brands on social media

                                      Zoho Desk Resources

                                      • Desk Community Learning Series


                                      • Digest


                                      • Functions


                                      • Meetups


                                      • Kbase


                                      • Resources


                                      • Glossary


                                      • Desk Marketplace


                                      • MVP Corner


                                      • Word of the Day


                                        Zoho Marketing Automation

                                          Zoho Sheet Resources

                                           

                                              Zoho Forms Resources


                                                Secure your business
                                                communication with Zoho Mail


                                                Mail on the move with
                                                Zoho Mail mobile application

                                                  Stay on top of your schedule
                                                  at all times


                                                  Carry your calendar with you
                                                  Anytime, anywhere




                                                        Zoho Sign Resources

                                                          Sign, Paperless!

                                                          Sign and send business documents on the go!

                                                          Get Started Now





                                                                  Zoho TeamInbox Resources



                                                                          Zoho DataPrep Resources



                                                                            Zoho DataPrep Demo

                                                                            Get a personalized demo or POC

                                                                            REGISTER NOW


                                                                              Design. Discuss. Deliver.

                                                                              Create visually engaging stories with Zoho Show.

                                                                              Get Started Now










                                                                                                  • Related Articles

                                                                                                  • Working with ASAP SDK for Flutter

                                                                                                    Integrate ASAP SDK to implement the help center services within your Flutter applications. ASAP is a self-service platform that provides the following help center services to the customers: Raise tickets Access the Knowledge Base Interact with other ...
                                                                                                  • Working with the ASAP SDK for React Native

                                                                                                    The ASAP SDK for React Native makes help available within quick reach for the end-users of your mobile app. Using this SDK, you can add and customize an add-on that resides within your iOS/Android app and provides end-users with easy access to your: ...
                                                                                                  • Working with the Zoho GC SDK for iOS

                                                                                                    Mobile applications have proven to be a significant component of business with the advent of smartphones. Businesses offer a range of services through their mobile phone applications for better customer engagement. To improve users' interest in apps, ...
                                                                                                  • Working with the ASAP Add-Ons for Mobile Platforms

                                                                                                    The ASAP SDKs for mobile platforms--iOS and Android--make help available within quick reach for the end-users of your mobile apps. Using these SDKs, you can create and customize add-ons that reside within your app and provide end-users with easy ...
                                                                                                  • Working with the ASAP Add-On for the Web

                                                                                                    Introduction The ASAP add-on for websites makes your help center available within quick reach for your end-customers. By embedding this add-on with your website, you can provide your customers with easy access to your: Customer support team (to raise ...
                                                                                                  Wherever you are is as good as
                                                                                                  your workplace

                                                                                                    Resources

                                                                                                    Videos

                                                                                                    Watch comprehensive videos on features and other important topics that will help you master Zoho CRM.



                                                                                                    eBooks

                                                                                                    Download free eBooks and access a range of topics to get deeper insight on successfully using Zoho CRM.



                                                                                                    Webinars

                                                                                                    Sign up for our webinars and learn the Zoho CRM basics, from customization to sales force automation and more.



                                                                                                    CRM Tips

                                                                                                    Make the most of Zoho CRM with these useful tips.



                                                                                                      Zoho Show Resources