Advanced integration

Clickable links delegate

When a user taps a URL, phone number, or email address sent to a conversation, the SDK handles the event automatically by launching the default app capable of completing the action:

  • default browser for a URL
  • default phone app for a phone number
  • default email app for an email address

Note: Only URLs such as https://www.zendesk.com/ are made clickable in the UI. Other URIs such as zendesk://myapp will not be clickable.

You can customize the behavior and change what happens when the user clicks a URL by setting a MessagingDelegate. The messaging(:shouldHandleURL:from:) function will be called any time the user clicks a URL.

To prevent the SDK from opening the default browser, you should return false when this happens. In that case, you must handle the completion of the action yourself. The function receives two parameters:

  • url: the URL that was clicked
  • source: an enumeration that describes where in the UI the url was clicked, such as a text message, a carousel item, and so on.

The snippets below show how you can set a MessagingDelegate in Swift and Objective-C:

Swift

  1. Set the delegate for Messaging.
Messaging.delegate = self
  1. Handle the URL in the delegate method messaging(_ messaging: Messaging, shouldHandleURL url: URL, from source: URLSource) -> Bool.
func messaging(_ messaging: Messaging, shouldHandleURL url: URL, from source: URLSource) -> Bool {
    // Your custom action...

    // Return false to prevent the SDK from handling the URL automatically
    // Return true to allow the SDK to handle the URL automatically, even
    // if you have done something custom
    false
}

Objective-C

  1. Set the delegate for ZDKMessaging.
ZDKMessaging.delegate = self
  1. Handle the URL in the delegate method - (BOOL)messaging:(ZDKMessaging * _Nonnull)messaging shouldHandleURL:(NSURL * _Nonnull)URL from:(enum ZDKURLSource)source.
- (BOOL)messaging:(ZDKMessaging * _Nonnull)messaging shouldHandleURL:(NSURL * _Nonnull)URL from:(enum ZDKURLSource)source {
    // Your custom action...

    // Return false to prevent the SDK from handling the URL automatically
    // Return true to allow the SDK to handle the URL automatically, even
    // if you have done something custom
    return NO;
}