This repository contains the framework and instructions for the Forethought iOS SDK.
A valid API key is needed in order to use the Forethought Solve SDK. In additon to the documentation below, sample apps have been written in Objective-C & Swift, as well as a SwiftUI implementation
-
In Xcode, File > Add Packages.
-
Enter the Forethought iOS GitHub repo URL (
https://github.com/Forethought-Technologies/solve-ios
) -
Tap Add Package. Follow the remaining prompts and Xcode will automatically download the framework
-
Forethought is also available through CocoaPods.
-
In the
Podfile
, add the following line:pod 'Forethought'
-
Run the following command:
$ pod install
-
Make sure to use the
.xcworkspace
file and NOT the.xcodeproj
from now on.
- In
AppDelegate.swift
file, replace__YOUR_KEY_HERE__
with a valid Forethought API key:ForethoughtSDK.start(apiKey: "__YOUR_KEY_HERE__")
- Open the Forethought widget:
import 'Forethought' ForethoughtSDK.show()
Returns a SwiftUI view
ForethoughtSDK.forethoughtView
Attach the Forethought SDK directly onto a navigation stack:
@IBAction func contactSupportTapped() {
ForethoughtSDK.show(fromNavigationController: self.navigationController)
}
Pass in Workflow Context Variables that have been defined via the Forethought Dashboard. (Note: you do not need to prefix with data-ft
)
ForethoughtSDK.dataParameters = ["language": "EN", "user-email": "[email protected]", "workflow-context-variable": "value"]
Current configuration parameters are all the config-ft
prefixed parameters under Additional Attributes. (Note: you do not need to prefix with config-ft
)
ForethoughtSDK.configParameters = ["theme-color": "#7b33fb"]
Pass in non data-ft
/ config-ft
using ForethoughtSDK.additionalParameters. A comprehensive list of parameters can be found here.
ForethoughtSDK.additionalParameters = ["initial-intent-id": "79fc012c-cce3-4574-9b75-7b272310d854"]
Default style is UIModalPresentationStyle.popover
(Note this does not apply when using fromNavigationController
).
ForethoughtSDK.modalPresentationStyle = UIModalPresentationStyle.fullScreen
Forethought delegate is used to respond to events during the widget conversation that may need additional implementation.
All methods in the ForethoughtDelegate
are optional as well.
@objc public protocol ForethoughtDelegate: AnyObject {
// Customer requested a handoff. Implement your own handoff from Forethought to another SDK (e.g. Zendesk or Salesforce)
@objc optional func startChatRequested(handoffData: ForethoughtHandoffData)
// Customer clicked the close widget button. Make sure to call ForethoughtSDK.hide if you choose to implement this
@objc optional func widgetClosed()
// Widget experienced an error causing it not be able to render
@objc optional func widgetError(errorData: ForethoughtErrorData)
}
To setup the delegate
- Set a delegate to the Forethought SDK. Do this before presenting the screen:
ForethoughtSDK.delegate = self
- Make sure the object conforms to the ForethoughtDelegate protocol
class ViewController: UIViewController, ForethoughtDelegate {
- Add any of the optional delegate methods you want to handle
func startChatRequested(handoffData: ForethoughtHandoffData) {
print("Chat Requested: \(handoffData)")
// close forethought widget
ForethoughtSDK.hide(animated: false) {
// start a Kustomer chat
Kustomer.startNewConversation(initialMessage: KUSInitialMessage(body: handoffData.question, direction: .user))
ForethoughtSDK.sendHandoffResponse(success: true)
}
// if handoff was unsuccessful
ForethoughtSDK.show()
ForethoughtSDK.sendHandoffResponse(success: false)
}
func widgetClosed() {
// add any additional logic here
ForethoughtSDK.hide(animated: true) {
print("forethought - widgetClosed")
}
}
func widgetError(errorData: ForethoughtErrorData) {
// add any additional logic here
ForethoughtSDK.hide(animated: true) {
print("forethought - \(errorData.error)")
}
}
⛔️ Plugins are deprecated in starting in version 2.0.0 ⛔️
Documentation has been provided as a .doccarchive to enable full documentation directly inside Xcode. To use, simply double-click on Forethought.doccarchive, and Xcode will handle the rest.