# Uncomment this line to define a global platform for your project # platform :ios, '9.0' # Uncomment this line if you're using Swift # use_frameworks! target 'My Sample App' do end
target 'My Sample App' do pod 'ZohoDeskPortalCore' end
target 'My Sample App' do pod 'ZohoDeskPortalServices' end
import ZohoDeskPortalAPIKit
@import ZohoDeskPortalAPIKit;
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { ZohoDeskPortalSDK.initialize(orgID:<#String#>, appID:<#String#>, dataCenter: <#ZDPDataCenter#>) return true }
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [ZohoDeskPortalSDK initializeWithOrgID:<#NSString#>appID:<#NSString#>dataCenter:<#ZDPDataCenter#>]; return YES; }
import ZohoDeskPortalCore ... ZDPortalHome.show()
@import ZohoDeskPortalCore; ... [ZDPortalHome showWithConfiguration:nil andTitle:nil];
let config = ZDPHomeConfiguration() config.enableHelpCenter = true // disable/enable the Help center (Knowledge Base). config.enableCommunity = false // disable/enable the Community. config.enableCreateTicket = true // disable/enable the CreateTicket. config.enableMyTicket = true // disable/enable My Tickets. ZDPortalHome.show(withConfiguration: config)
ZDPHomeConfiguration * config = [[ZDPHomeConfiguration alloc]init]; config.enableHelpCenter = YES; // disable/enable the Help center (Knowledge Base). config.enableCommunity = NO; // disable/enable the Community. config.enableCreateTicket = YES; // disable/enable the CreateTicket. config.enableMyTicket = YES; // disable/enable My Tickets. [ZDPortalHome showWithConfiguration:config andTitle:<#(NSString * _Nullable)#>];
import ZohoDeskPortalChat ... ZDPortalChat.show()
@import ZohoDeskPortalChat; ... [ZDPortalChat show];
import ZohoDeskPortalKB
@import ZohoDeskPortalKB;
ZDPortakKB.show()
[ZDPortalKB showWithTitle:<#NSString#>];
ZDPortalKB.showCategory(withPermalink: <#String#>)
[ZDPortalKB showCategoryWithPermalink:<#NSString#>withTitle:<#NSString#>];
ZDPortalKB.showArticle(withPermalink : <#String#>)
ZDPortalKB showArticleWithPermalink:<#NSString#>withTitle:<#NSString#>];
import ZohoDeskPortalTicket
@import ZohoDeskPortalTicket;
ZDPortalSubmitTicket.show()
[ZDPortalSubmitTicket showWithTitle:<#NSString#>];
ZDPortalSubmitTicket.showAddTicketForm(completion: { (ticket) in // The ticket parameter contains the details of the ticket created. // Your program logic goes here. }, onError: { error in // error creating Ticket })
[ZDPortalSubmitTicket showAddTicketFormWithTitle:<#(NSString * _Nullable)#> navigationMode:<#(enum ZDPNavigationMode)#> completion:^(ZDPTicket * ticket) { // The ticket parameter contains the details of the ticket created. // Your program logic goes here. } onError:^(NSError * error) { // error creating Ticket }];
ZDPortalTicket.show()
[ZDPortalTicket showWithTitle:<#NSString#>];
import ZohoDeskPortalCommunity
@import ZohoDeskPortalCommunity;
ZDPortalCommunity.show()
[ZDPortalCommunity show];
ZDPortalCommunity.showTopic(withID: <#String#>)
[ZDPortalCommunity showTopicWithID:<#NSString#>];
import ZohoDeskPortalLiveChat
@import ZohoDeskPortalLiveChat;
ZDPortalLiveChat.show()
[ZDPortalLiveChat show];
import ZohoDeskPortalAPIKit
@import ZohoDeskPortalAPIKit;
if !ZohoDeskPortalSDK.isUserLoggedIn{ ZohoDeskPortalSDK.login(withUserToken: String) { (isSuccess: Bool) in // isSuccess shows whether the login attempt was successful // any errors will be logged } }else{ // user logged in already }
if (!ZohoDeskPortalSDK.isUserLoggedIn){ [ZohoDeskPortalSDK loginWithUserToken:<#(NSString * _Nonnull)#> onCompletion:^(BOOL isSuccess) { // isSuccess shows whether the login attempt was successful // any errors will be logged }]; }else{ // user logged in already }
ZohoDeskPortalSDK.logout { (isSuccess: Bool ) in // isSuccess shows whether the logout attempt was successful // any errors will be logged }
[ZohoDeskPortalSDK logoutOnCompletion:^(BOOL isSuccess) { // isSuccess shows whether the logout attempt was successful // any errors will be logged }];
ZohoDeskPortalSDK.clearAllLocalData()
[ZohoDeskPortalSDK clearAllLocalData];
import ZDThemeKit
@import ZDThemeKit;
ZDThemeManager.setTheme(type: .white)
[ZDThemeManager setTheme:ZDThemeTypeWhite];
ZDThemeManager.setTheme(type: .dark)
[ZDThemeManager setTheme:ZDThemeTypeDark];
ZDThemeManager.setTheme(type: .system)
[ZDThemeManager setTheme:ZDThemeTypeSystem];
ZDThemeManager.updateTheme(theme: <#ZDThemeProtocol#>)
[ZDThemeManager updateThemeWithTheme:<#ZDThemeProtocol#>];
ZDThemeManager.updateDarkTheme(theme: <#ZDThemeProtocol#>)
[ZDThemeManager updateDarkThemeWithTheme:<#ZDThemeProtocol#>];
ZDPortalConfiguration.customFontName = <#String#>
ZDPortalConfiguration.customFontName = <#NSString#>;
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 |
ZDPortalConfiguration.setSDKLanguage(<#String#>)
[ZDPortalConfiguration setSDKLanguage:<#NSString#>];
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 |
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 |
func application(_ application: UIApplication,didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let token = deviceToken.reduce("", {$0 + String(format: "%02X", $1)}).uppercased() ZohoDeskPortalSDK.enablePushNotification(deviceToken:token, mode: .production) }
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ NSString * token = [[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""] stringByReplacingOccurrencesOfString: @">" withString: @""] stringByReplacingOccurrencesOfString: @" " withString: @""]; [ZohoDeskPortalSDK enablePushNotificationWithDeviceToken:token isTestDevice:NO mode:APNSModeProduction]; }
import ZohoDeskPortalConfiguration ... func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) { ZDPortalConfiguration.processRemoteNotification(userInfo: userInfo) }
@import ZohoDeskPortalConfiguration; ... - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ [ZDPortalConfiguration processRemoteNotificationWithUserInfo:userInfo]; }
import ZohoDeskPortalChat ... ZDPortalChat.setGuestUser(email:<#Guest_User_Email#>, displayName:<#Guest_User_DisplayName#>", phoneNumber: <#Guest_User_PhoneNumber#>")
@import ZohoDeskPortalChat; ... [ZDPortalChat setGuestUserWithEmail:<#Guest_User_Email#>displayName:<#Guest_User_DisplayName#>phoneNumber:<#Guest_User_PhoneNumber#>];
import ZohoDeskPortalAPIKit
@import ZohoDeskPortalAPIKit;
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 }
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 }];
ZohoDeskPortalSDK.getProducts(inDepartmentID: String, [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 }
[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 }];
ZohoDeskPortalSDK.Ticket.getFields([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 }
[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 }];
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 }
[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 }];
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 } }
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 }] }
ZDPCommunityConfiguration.isTopicEditAllowed = <#Bool#> ZDPCommunityConfiguration.isTopicDeleteAllowed = <#Bool#> ZDPCommunityConfiguration.isReplyAllowed = <#Bool#> ZDPCommunityConfiguration.iReplyEditAllowed = <#Bool#> ZDPCommunityConfiguration.isReplyDeleteAllowed = <#Bool#>
ZDPCommunityConfiguration.isTopicEditAllowed = <#Bool#>; ZDPCommunityConfiguration.isTopicDeleteAllowed = <#Bool#>; ZDPCommunityConfiguration.isReplyAllowed = <#Bool#>; ZDPCommunityConfiguration.iReplyEditAllowed = <#Bool#>; ZDPCommunityConfiguration.isReplyDeleteAllowed = <#Bool#>;
ZohoDeskPortalSDK.Community.getMostPopularTopics(<#[String:Any]?#>) { (result: Result<[ZDPCommunity.TopicDetail], ZDPError>) in // switch on result to get array of topics on success }
[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 }];
ZohoDeskPortalSDK.Community.getMostDiscussedTopics(<#[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 }
[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 }];
ZDPortalSubmitTicket.setFieldsListTobeShown(fields: <#[ZDVisibleTicketField]#>)
[ZDPortalSubmitTicket setFieldsListTobeShownWithFields:<#(NSArray * _Nonnull)#>];
ZDPortalSubmitTicket.preFillTicketFields(forForms: <#[ZDCustomizedTicketForm]#>)
[ZDPortalSubmitTicket preFillTicketFieldsForForms:<#[ZDCustomizedTicketForm]#>];
ZDPTicketConfiguration.isCommentAllowed = <#Bool#> ZDPTicketConfiguration.isCommentDeleteAllowed = <#Bool#> ZDPTicketConfiguration.isCommentEditAllowed = <#Bool#> ZDPTicketConfiguration.isReplyAllowed = <#Bool#> ZDPTicketConfiguration.isTicketUpdateAllowed = <#Bool#>
ZDPTicketConfiguration.isCommentAllowed = YES;
ZDPTicketConfiguration.isCommentDeleteAllowed = YES;
ZDPTicketConfiguration.isCommentEditAllowed = YES;
ZDPTicketConfiguration.isReplyAllowed = YES;
ZDPTicketConfiguration.isTicketUpdateAllowed = YES;
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 }
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 }];
import ZohoDeskPortalAPIKit ... ZohoDeskPortalSDK.disableLogs()
@import ZohoDeskPortalAPIKit;
...
[ZohoDeskPortalKit disableLogs]
# Uncomment this line to define a global platform for your project # platform :ios, '9.0' # Uncomment this line if you're using Swift # use_frameworks! target 'My Sample App' do end
target 'My Sample App' do pod 'ZohoDeskPortalSDK', :git => 'https://github.com/zoho/ZohoDeskPortalSDK.git' end
bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZohoDeskPortalSDK.framework/strip-frameworks.sh"
import ZohoDeskPortalSDK
@import ZohoDeskPortalSDK;
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { let config = ZDPortalConfiguration() config.enableHelpCenter = true config.enableCreateTicket = true config.enableMyTicket = true config.enableCommunity = false ZohoDeskPortalSDK.initializeSDK(<#ORGID#>, appId: <#APPID#>, dataCenter: <#dataCenterValue#>, configuration: <#config#>) return true }
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ZDPortalConfiguration * config = [[ZDPortalConfiguration alloc]init]; config.enableHelpCenter = YES; config.enableCommunity = YES; config.enableCreateTicket = YES; config.enableMyTicket = YES; [ZohoDeskPortalSDK initializeSDK:<#ORGID#> appId:<#APPID#> dataCenter:<#dataCenterValue#> configuration:<#config#>]; return YES; }
ZohoDeskPortalSDK.showHomePage(controller: self)
[ZohoDeskPortalSDK showHomePageWithController:self];
let config = ZDPortalConfiguration() config.enableHelpCenter = true // disable/enable the Help center (Knowledge Base). config.enableCommunity = false // disable/enable the Community. config.enableCreateTicket = true // disable/enable the CreateTicket. config.enableMyTicket = true // disable/enable My Tickets. ZohoDeskPortalSDK.showHomePage(controller: self, withConfiguration: config)
ZDPortalConfiguration * config = [[ZDPortalConfiguration alloc]init]; config.enableHelpCenter = YES; // disable/enable the Help center (Knowledge Base). config.enableCommunity = NO; // disable/enable the Community. config.enableCreateTicket = YES; // disable/enable the CreateTicket. config.enableMyTicket = YES; // disable/enable My Tickets. [ZohoDeskPortalSDK showHomePageWithController:self withConfiguration:config];
ZohoDeskPortalSDK.showLiveChat(controller: self)
[ZohoDeskPortalSDK showLiveChatWithController:self];
ZohoDeskPortalSDK.showHelpCenter(controller: self)
[ZohoDeskPortalSDK showHelpCenterWithController:self];
ZohoDeskPortalSDK.addTicket(controller: self)
[ZohoDeskPortalSDK addTicketWithController:self];
ZohoDeskPortalSDK.addTicket(controller: self, onCompletion: { (ticketDetail) in // The ticketDetail parameter contains the details of the ticket created. // Your program logic goes here. }) { (error) in // error creating Ticket }
[ZohoDeskPortalSDK addTicketWithController:self onCompletion:^(TicketDetailJsonObject * ticket) { // The ticketDetail parameter contains the details of the ticket created. // Your program logic goes here. } onError:^(NSError * error) { // error creating Ticket }];
ZohoDeskPortalSDK.ticketList(controller: self)
[ZohoDeskPortalSDK ticketListWithController:self];
ZohoDeskPortalSDK.showCommunity(controller: self)
[ZohoDeskPortalSDK showCommunityWithController:self];
if !ZohoDeskPortalSDK.isZDUserSignedIn{ ZohoDeskPortalSDK.set(jwtUserIdentifier: <#Remote user Token#>, onCompletion: { }, onError: { (error) in }) }else{ //User already signed into SDK }
if (![ZohoDeskPortalSDK isZDUserSignedIn]){ [ZohoDeskPortalSDK setWithJwtUserIdentifier:<#Remote user Token#> onComplition:^{ } onError:^(NSError * error) { }]; }else{ //User already signed into SDK }
ZohoDeskPortalSDK.logout()
[ZohoDeskPortalSDK logout];
ZohoDeskPortalSDK.clearAllLocalData()
[ZohoDeskPortalSDK clearAllLocalData];
let config = ZDPortalConfiguration() config.enableHelpCenter = false // disable the Help center (Knowledge Base). config.enableCommunity = false // disable the Community. config.enableCreateTicket = false // disable the CreateTicket. config.enableMyTicket = false // disable My Tickets. config.showLeftMenu = true // enable/disable left Menu
ZDPortalConfiguration * config = [[ZDPortalConfiguration alloc]init]; config.enableHelpCenter = NO; // disable the Help center (Knowledge Base). config.enableCommunity = NO; // disable the Community. config.enableCreateTicket = NO; // disable the CreateTicket. config.enableMyTicket = NO; // disable My Tickets. config.showLeftMenu = YES; // enable/disable left Menu
ZDTheme.applyTheme(theme: .white)
[ZDTheme applyThemeWithTheme:ZDThemeTypeWhite];
ZDTheme.applyTheme(theme: .dark)
[ZDTheme applyThemeWithTheme:ZDThemeTypeDark];
let articleTheme = ZDThemeArticle.init() articleTheme.tintColor = UIColor.white articleTheme.primaryTextColor = UIColor.white articleTheme.secondryTextColor = UIColor(red:0.12, green:0.13, blue:0.15, alpha:1.00) articleTheme.primaryBackgroundColor = UIColor(red:0.12, green:0.13, blue:0.15, alpha:1.00) articleTheme.secondryBackgroundColor = UIColor(red:0.12, green:0.13, blue:0.15, alpha:1.00) articleTheme.cellSeporatorColor = UIColor(red:0.12, green:0.13, blue:0.15, alpha:1.00) articleTheme.headerColor = UIColor(red:0.13, green:0.18, blue:0.15, alpha:1.00)
ZDThemeArticle * articleTheme = [ZDThemeArticle init]; articleTheme.tintColor = [UIColor whiteColor]; articleTheme.primaryTextColor = [UIColor whiteColor]; articleTheme.secondryTextColor = [UIColor colorWithRed:0.12 green:0.13 blue:0.15 alpha:1.00]; articleTheme.primaryBackgroundColor = [UIColor colorWithRed:0.12 green:0.13 blue:0.15 alpha:1.00]; articleTheme.secondryBackgroundColor = [UIColor colorWithRed:0.12 green:0.13 blue:0.15 alpha:1.00]; articleTheme.cellSeporatorColor = [UIColor colorWithRed:0.12 green:0.13 blue:0.15 alpha:1.00]; articleTheme.headerColor = [UIColor colorWithRed:0.12 green:0.13 blue:0.15 alpha:1.00];
ZDNavigationTheme.navigationBarColor = UIColor.blue ZDNavigationTheme.titleColor = UIColor.white ZDNavigationTheme.barButtonTextColor = UIColor.white ZDNavigationTheme.translucent = false ZDNavigationTheme.statusBarApperance = .lightContent ZDNavigationTheme.backButtonStyle = ZDNavigationBackButtonStyle.icon
[ZDNavigationTheme setNavigationBarColor:[UIColor blueColor]]; [ZDNavigationTheme setTitleColor:[UIColor blueColor]]; [ZDNavigationTheme setBarButtonTextColor:[UIColor blueColor]]; [ZDNavigationTheme setTranslucent:NO]; [ZDNavigationTheme setStatusBarApperance:UIStatusBarStyleLightContent]; [ZDNavigationTheme setBackButtonStyle:ZDNavigationBackButtonStyleIcon];
let font = ZDCustomFont() font.fontFamilyName = "ProximaNova" font.regularFontName = "ProximaNova-reg" font.lightFontName = "ProximaNova-light" font.boldFontName = "ProximaNova-Bold" font.mediumFontName = "ProximaNova-Bold"
ZDCustomFont * font = [ZDCustomFont init]; font.fontFamilyName = @"ProximaNova"; font.regularFontName = @"ProximaNova-reg"; font.lightFontName = @"ProximaNova-light"; font.boldFontName = @"ProximaNova-Bold"; font.mediumFontName = @"ProximaNova-Bold";
ZDPortalConfiguration.setSDKLanguage = "en"
ZDPortalConfiguration.setSDKLanguage = @"en";
Language
|
Locale Code
|
English
|
en
|
German
|
de
|
Spanish
|
es
|
French
|
fr
|
Italian
|
it
|
Russian
|
ru
|
Chinese
|
zh
|
Turkish
|
tr
|
Dutch
|
nl
|
Danish
|
da
|
Portuguese
|
pt
|
Japanese
|
ja
|
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 |
func application(_ application: UIApplication,didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let token = deviceToken.reduce("", {$0 + String(format: "%02X", $1)}).uppercased() ZohoDeskPortalSDK.enablePushNotification(deviceToken:token, mode: .production) }
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ NSString * token = [[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""] stringByReplacingOccurrencesOfString: @">" withString: @""] stringByReplacingOccurrencesOfString: @" " withString: @""]; [ZohoDeskPortalSDK enablePushNotificationWithDeviceToken:token isTestDevice:NO mode:APNSModeProduction]; }
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) { ZohoDeskPortalSDK.processRemoteNotification(userInfo: userInfo) }
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ [ZohoDeskPortalSDK processRemoteNotificationWithUserInfo:userInfo]; }
ZDPortalConfiguration.setGuestUser(email: <#Guest_User_Email#>, displayName: <#Guest_User_DisplayName#>", phoneNumber: <#Guest_User_PhoneNumber#>")
[ZDPortalConfiguration setGuestUserWithEmail:<#Guest_User_Email#> displayName:<#Guest_User_DisplayName#> phoneNumber:<#Guest_User_PhoneNumber#>];
ZDProvoider.sharedInstance.getDepartments(onCompletion: { (departments) in // get departments list in departments variable }) { (error) in // error in departments fetch }
[[ZDProvoider sharedInstance] getDepartmentsOnCompletion:^(NSArray * departments) { // get departments list in departments variable } onError:^(NSError * error) { // error in departments fetch }];
ZDProvoider().getProductsFor(<#Department ID#>, from: <#T##Int#>, limit: <#T##Int#>, onCompletion: { (products) in // get products list in products variable }) { (error) in // error in products fetch }
[ZDProvoider sharedInstance] getProductsFor:@"Department ID" from:<#(NSInteger)#> limit:<#(NSInteger)#> onCompletion:^(NSArray products) { // get products list in products variable } onError:^(NSError * error) { // error in products fetch }
ZDProvoider.sharedInstance.getTicketForm(<#Department ID#>, onCompletion: { (ticketFilelds) in // get Ticket Form in ticketFilelds variable }) { (error) in // error in TicketForm fetch }
[[ZDProvoider sharedInstance] getTicketForm:<#Department ID#> onCompletion:^(NSArray * ticketFilelds) { // get Ticket Form in ticketFilelds variable } onError:^(NSError * error) { // error in TicketForm fetch }];
ZDProvoider.sharedInstance.uploadTicketAttachment(<#Your File path#>, onCompletion: { (attachement) in // get uploaded attachement object in attachement variable }) { (error) in // error in Attachement upload }
[[ZDProvoider sharedInstance] uploadTicketAttachment:<#Your File path#> onCompletion:^(AttachmentJsonObject * attachement) { // get Ticket Form in ticketFilelds variable } onError:^(NSError * error) { // error in Attachement upload }];
let ticketForm = ZDTicketForm() ticketForm.emailID = <#User email ID#> ticketForm.contactName = <#Contact Name#> ticketForm.subject = <#Ticket Subject#> ticketForm.departmentID = <#Ticket Department ID#> ticketForm.descriptionText = <#Ticket Description Text#> ZDProvoider.sharedInstance.createTicket(form: ticketForm, onCompletion: { (ticket) in // get created ticket object in ticketDetail variable }) { (error) in // error in ticket submission }
ZDTicketForm * ticketForm = [ZDTicketForm init]; [ticketForm setEmailID:<#User email ID#>]; [ticketForm setContactName:<#Contact Name#>]; [ticketForm setSubject:<#Ticket Subject#>]; [ticketForm setDepartmentID:<#Ticket Department ID#>]; [ticketForm setDescriptionText:<#Ticket Description Text#>]; [[ZDProvoider sharedInstance] createTicketWithForm:ticketForm onCompletion:^(TicketDetailJsonObject * ticket) { // get created ticket object in ticketDetail variable } onError:^(NSError * error) { // error in ticket submission }]
ZohoDeskPortalSDK.showCatgoryByPermalink(forPermaLink:"permalink", controller: self)
[ZohoDeskPortalSDK showCatgoryByPermalinkForPermaLink:@"permalink" controller:self];
ZohoDeskPortalSDK.showHelpPage(forPermaLink: "permalink", controller: self)
[ZohoDeskPortalSDK showHelpPageForPermaLink:@"permalink" controller:self];
ZDCommunityConfiguration.configure.isTopicDeleteAllowed = true ZDCommunityConfiguration.configure.isTopicEditAllowed = true ZDCommunityConfiguration.configure.isReplyDeleteAllowed = true ZDCommunityConfiguration.configure.isReplyEditAllowed = true ZDCommunityConfiguration.configure.isReplyAllowed = true
[ZDCommunityConfiguration configure].isTopicDeleteAllowed = YES; [ZDCommunityConfiguration configure].isTopicEditAllowed = YES; [ZDCommunityConfiguration configure].isReplyDeleteAllowed = YES; [ZDCommunityConfiguration configure].isReplyEditAllowed = YES; [ZDCommunityConfiguration configure].isReplyAllowed = YES;
ZDProvoider.sharedInstance.getZDMostPopularCommunityTopics(forCategory: "Your Category ID", filterType: "ALL", from: 1, limit: 10, includeCount: false, { (communityTopics) in // get most popular topic list in communityTopics callback }) { (error) in // error }
[[ZDProvoider sharedInstance] getZDMostPopularCommunityTopicsForCategory:@"Your Catehory ID" filterType:@"ALL" from:1 limit:10 includeCount:NO :^(NSArray communityTopics) { // get most popular topic list in communityTopics callback } onError:^(NSError * error) { // error }];
ZDProvoider.sharedInstance.getZDMostDiscussedCommunityTopics(forCategory: "Your Category ID", filterType: "ALL", from: 1, limit: 10, includeCount: false, { (communityTopics) in // get most discussed topic list in communityTopics callback }) { (error) in // error }
[[ZDProvoider sharedInstance] getZDMostDiscussedCommunityTopicsForCategory:@"Your Catehory ID" filterType:@"ALL" from:1 limit:10 includeCount:NO :^(NSArray communityTopics) { // get most discussed topic list in communityTopics callback } onError:^(NSError * error) { // error }];
ZDTicketConfiguration.configure.isCommentAllowed = true ZDTicketConfiguration.configure.isCommentDeleteAllowed = true ZDTicketConfiguration.configure.isCommentEditAllowed = true ZDTicketConfiguration.configure.isReplyAllowed = true ZDTicketConfiguration.configure.isTicketUpdateAllowed = true
ZDTicketConfiguration.configure.isCommentAllowed = YES; ZDTicketConfiguration.configure.isCommentDeleteAllowed = YES; ZDTicketConfiguration.configure.isCommentEditAllowed = YES; ZDTicketConfiguration.configure.isReplyAllowed = YES; ZDTicketConfiguration.configure.isTicketUpdateAllowed = YES;
var body = [String : Any]() body["displayName"] = "displayName" body["mobile"] = "123456" ZDProvoider.sharedInstance.UpdateUserInformation(userInfo: body, { (userInfo) in // get updated user information in userInfo variable }) { (error) in // error }
NSMutableDictionary * body = [NSMutableDictionary new]; [body setObject:@"displayName" forKey:@"displayName"]; [body setObject:@"123456" forKey:@"mobile"]; [[ZDProvoider sharedInstance] UpdateUserInformationWithUserInfo:body :^(NSDictionary * userInfo) { // get updated user information in userInfo variable } onError:^(NSError * error) { // error }];
ZDPortalConfiguration.enableLogMessages = true
ZDPortalConfiguration.enableLogMessages = YES;
ZohoDeskPortalSDK.dismissController {(controller) in // You can find dismissed from ZohoDeskPortalSDK using ZDViewController object switch controller{ case .DashBoard: print("DashBoard") default: break } }
[ZohoDeskPortalSDK dismissControllerOnCompletion:^(enum ZDViewController controller) { switch (controller) { case ZDViewControllerDashBoard: NSLog(@"DashBoard"); default: break; } }];
ZohoDeskPortalSDK.logout(onComplition: { print("User sucessfully logged out") }) { (error) in print(error) }
[ZohoDeskPortalSDK logoutOnComplition:^{ // } onError:^(NSError * error) { // }];
ZohoDeskPortalSDK.ZDAnalyticsTracker { (analyticsObject) in if analyticsObject?.getEventAction() == .KBArticleClicked{ print("An Article is clicked.") //An Article is clicked. You can Log or Push this to any of the Analytics tools. }else if analyticsObject?.getEventAction() == .CommunityTopicClicked{ print("A Topic is clicked.") //A topic is clicked. You can Log or Push this to any of the Analytics tools. } }
[ZohoDeskPortalSDK ZDAnalyticsTrackerOnCompletion:^(ZDAnalytics * analyticsObject) { if ([analyticsObject getEventAction] == ZDPortalUIActionKBArticleClicked) { NSLog(@"An Article is clicked."); //An Article is clicked. You can Log or Push this to any of the Analytics tools. }else if ([analyticsObject getEventAction] == ZDPortalUIActionCommunityTopicClicked) { NSLog(@"A Topic is clicked."); //A topic is clicked. You can Log or Push this to any of the Analytics tools. } }];
if !ZohoDeskPortalSDK.isZDUserSignedIn || !ZohoDeskPortalSDK.isZDSDKMigratedTo1_0{ ZohoDeskPortalSDK.set(jwtUserIdentifier: <#Remote user Token#>, onComplition: { }, onError: { (error) in }) }else{ //User already signed into SDK }
if (![ZohoDeskPortalSDK isZDUserSignedIn] || ![ZohoDeskPortalSDK isZDSDKMigratedTo1_0]){ [ZohoDeskPortalSDK setWithJwtUserIdentifier:<#Remote user Token#> onComplition:^{ } onError:^(NSError * error) { }]; }else{ //User already signed into SDK }
ZDNavigationTheme.backButtonStyle = ZDNavigationBackButtonStyle.icon
[ZDNavigationTheme setBackButtonStyle:ZDNavigationBackButtonStyleIcon];
v1.0 Series
|
v2.0
|
pod 'ZohoDeskPortalSDK', :git => '
https://github.com/zoho/ZohoDeskPortalSDK.git'end
|
pod 'ZohoDeskPortalServices',
|
In App Delegate.swift,
|
|
import ZohoDeskPortalSDK
|
import ZohoDeskPortalAPIKit
|
v1.0 Series
|
v2.0
|
import ZohoDeskPortalSDK
|
import ZohoDeskPortalCore
|
v1.0 Series
|
v2.0
|
import ZohoDeskPortalSDK
|
import ZohoDeskPortalKB
|
v1.0 Series
|
v2.0
|
import ZohoDeskPortalSDK
|
import ZohoDeskPortalTicket
|
v1.0 Series
|
v2.0
|
import ZohoDeskPortalSDK
|
import ZohoDeskPortalTicket
|
v1.0 Series
|
v2.0
|
import ZohoDeskPortalSDK
|
import ZohoDeskPortalCommunity
|
v1.0 Series
|
v2.0
|
ZohoDeskPortalSDK.set(jwtUserIdentifier: _, onCompletion: _ -> (), onError: _ -> () )
|
ZohoDeskPortalSDK.loginUser(withJWTidentifier: <#String#>, onCompletion: (Bool) -> Void)
|
v1.0 Series
|
v2.0
|
ZohoDeskPortalSDK.isZDUserSignedIn
|
ZohoDeskPortalSDK.isUserLoggedIn
|
To log out an user from the SDK |
|
ZohoDeskPortalSDK.logout()
|
ZohoDeskPortalSDK.logout(onCompletion: (Bool) -> Void)
|
//skipping customization for now |
v1.0 Series
|
v2.0
|
ZohoDeskPortalSDK.enablePushNotifications(deviceToken: _, mode: )
|
ZohoDeskPortalSDK.enablePushNotification(deviceToken:token, mode: .production)
|
To let the SDK know about the notifications, in AppDelegate.swift,
|
|
import ZohoDeskPortalSDK
|
import ZohoDeskPortalConfiguration
|
// set guest config in chat
|
|
v1.0 Series
|
v2.0
|
import ZohoDeskPortalSDK
|
import ZohoDeskPortalKB
|
v1.0 Series
|
v2.0
|
import ZohoDeskPortalSDK
|
import ZohoDeskPortalKB
|
v1.0 Series
|
v2.0
|
ZDCommunityConfiguration.configure.isTopicDeleteAllowed = true
|
ZDPCommunityConfiguration.isTopicEditAllowed = <#Bool#>
|
v1.0 Series
|
v2.0
|
ZDProvoider.sharedInstance.getZDMostPopularCommunityTopics( with all parameters)
|
ZohoDeskPortalSDK.Community.getMostPopularTopics(<#[String: Any]?#>, onCompletion: <#Result<[ZDPCommuity.TopicDetail], ZDPError> -> Void#>
|
v1.0 Series
|
v2.0
|
ZDProvoider.sharedInstance.getZDMostDiscussedCommunityTopics( with all parameters)
|
ZohoDeskPortalSDK.Community.getMostDiscussedTopics(<#[String: Any]?#>, onCompletion: <#Result<[ZDPCommuity.TopicDetail], ZDPError> -> Void#>
|
ticket configuration - same as community configuration - static changes pending
|
|
v1.0 Series
|
v2.0
|
ZDProvoider.sharedInstance.UpdateUserInformation(userInfo: <#data#>, onCompletion: _ -> (), onError: _ -> ())
|
ZohoDeskPortalSDK.updateUserInformation(with: [String: String], onCompletion: (Result) -> Void)
|
v1.0 Series
|
v2.0
|
ZDPortalConfiguration.enableLogMessages = true
|
ZohoDeskPortalSDK.enableLogs()
|
v1.0 Series
|
v2.0
|
ZDPortalConfiguration.enableLogMessages = false
|
ZohoDeskPortalSDK.disableLogs()
|
Learn how to use the best tools for sales force automation and better customer engagement from Zoho's implementation specialists.
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.
Write to us: support@zohoforms.com