Skip to content

Frequently Asked Questions

How do I make Multi Page Tours on a Web App?

Contextual will support SPA (Single Page Apps) and normal URL-based apps. The navigation is built-in when you choose your next step in a tour.

This video explains:

How do I make Multi Page Tours on a Mobile App?

  • To create tours or walkthroughs of your app that go accross multiple pages, firstly you must have deeplinks enabled in your application.

  • If deeplinks are enabled, then all you have to do is enter the link of the page where you want the next tip to be displayed, in the "Deeplink" section of the tip or pop up. (Example below) Example of Deeplink Call To Action (CTA)

  • Important to note that if you would like users to be able to click on the back button and it is on a different page in your app, you will have to put the link to the previous page in the back button as a deeplink also.

In the context of mobile applications and Contextual, Deeplinking consists of providing a universal link (URI) that links to a certain location within an application. Due to the lack of a common protocols among native apps, you will have to ask your developers if they have set up deeplinking and the schema they have used within your application. Wikipedia entry.

  • Set up deeplinks for iOS here
  • Set up deeplinks for Android here
  • Set up deeplinks for React Native here

How do we integrate Contextual with our backend systems?

We have three methods:

  1. View/Screen and clickable elements per install are automatic

  2. You can tag user properties with a single line using our SDK. We support, text, numeric, datetime properties.

  3. You can tag user propertied with our REST/JSON API to our cloud. We are real-time in applying those properties.

You can view the endpoints by checking the API documentation link in the dashboard or refer to this article.

iOS FAQ

Sometimes people ask us how much Contextual impacts App Size. The answer is not much!

SDK Sizes

The Contextual iOS lib increases your App by only 2 MB (approx).

At compile time it contains 4 architectures:

  • armv7
  • arm64
  • i386
  • x86_64

First two are for devices and last two are for simulator. Our SDK must contain all the possible architectures so that customer can use it anywhere. When a customer packages App, the App will only increase on required architectures.

SDK implementation language

Our iOS SDK is written using Objective-C, Swift, Swift UI and we are developing new features in Swift, SwiftUI, Combine and rewriting Objective-C into Swift.

Customers using Swift or Objective-C (or a combination of both) will not experience any compatibility issues when integrating with our SDK because iOS supports interoperability between the two languages and the SDK is shipped as an XCFramework.

Customers using Swift UI as their UI implementation should note that we currently only support the use of UIViewControllers in order to determine "pages" or "screens". This means that if you have a screen that you want to be usable with the SDK, it will need to have a UIViewController as its root "view". An example of this is how we recommend that customers set the rootViewController of the app's UIWindow to one of our custom subclasses of UIViewController, i.e. ContextualBaseViewController or ContextualBaseTableViewController.

NOTE: If you are using a version of the Contextual SDK earlier than v3.0.0, then the class names will be StreetHawkBaseViewController or StreetHawkBaseTableViewController.

Example from an AppDelegate/SceneDelegate which is setting up the initial view for the app:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
if let windowScene = scene as? UIWindowScene {
   let window = UIWindow(windowScene: windowScene)
   let childVC = UIHostingController(rootView: contentView)

   window.rootViewController = ContextualBaseTableViewController()
   window.rootViewController!.addChild(childVC)
   childVC.view.frame = UIScreen.main.bounds
   window.rootViewController!.view.addSubview(childVC.view)
   childVC.didMove(toParent: window.rootViewController)

   self.window = window
   window.makeKeyAndVisible()
}

Any "pages" or "screens" that you want to be enabled for use with our SDK, but are set up as Swift UI views, should implement the protocol UIViewControllerRepresentable. This provides a way for a Swift UI view to create its own UIViewController, without interfering with the Swift UI implementation.

An example of this implementation would be:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct TicketListViewVC: UIViewControllerRepresentable {
    func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
      // Perform any updates required here
    }

    func makeUIViewController(context: Context) -> some UIViewController {
      // Create and return the UIViewController here
      // In this case, we want this view to be enabled for use with the Contextual SDK, and so we use the "ContextualBaseViewController"
      Contextual.sharedInstance().setReactViewName("TicketList Screen")
      let baseVC = ContextualBaseViewController()
      let viewVC = UIHostingController(rootView: TicketListView())
      baseVC.addChild(viewVC)
      baseVC.view.addSubview(viewVC.view)
      viewVC.view.frame = UIScreen.main.bounds
      viewVC.didMove(toParent: baseVC)
      return baseVC
    }

    func makeCoordinator() -> () {
      // Make a coordinator here if required
    }
}

Android FAQ

SDK Sizes

Current Size of Contextual for Android (2.+) is only 1.2MB.

Contextual also uses common libraries like Gson, Glide and Retrofit 2. This might affect the size of your app if you aren't currently using them.

Firewall Configuration

If your organization has a firewall that restricts the traffic to or from the Internet, you need to configure it to allow connectivity with Contextual in order for your apps to receive the content feed.

The following host/ports need to be whitelisted/unblocked in order for Contextual to function properly.

Host Port Component
api.contextu.al 443 SDKs
dashboard.contextu.al 443 Dashboard
cdn.filestackcontent.com 443 Dashboard
creator.contextu.al 443 Creator

You can verify the firewall configuration using the following commands.

1
2
telnet api.contextu.al 443
telnet cdn.filestackcontent.com 443

What is my App Key?

App key is the identifier used by Contextual to identify your app. You can find your app key in the dashboard.


Last update: 2024-01-12