Mobile - CNAME Configuration

A Canonical Name record (abbreviated as CNAME record) is a type of resource record in the Domain Name System (DNS) used to specify that a domain name is an alias for another domain, which is the "canonical" domain.

The CNAME feature allows you to create hostnames under your own application’s domain, which will be used in place of Pendo hostnames for sending events and downloading guide content. This helps ensure that events are collected and guides are served to end-users who are subject to ad-blocking software, firewalls, web filters, etc.

Important: CNAME configuration is supported on Android and iOS SDK version 2.5.1 and higher.

Configuration

You will provide a subdomain of your corporate domain, such as product.example.com (where ‘example’ is your corporate domain).

Pendo will provide a set of required DNS entries that must be created. They look something like this:

Domain CNAME Description
product.example.com 1234567812345678-txt.example.pendo.io This record is used to validate to Google that Pendo can serve data.product.example.com via Google App Engine.
mobile.product.example.com 1234567812345678-data.example.pendo.io Based on your data center the record is an alias to either: data.pendo.io
data.eu.pendo.io
us1.data.pendo.io
_0123456789abcdef. content.product. example.com _fedcab987654321.acm-validations.aws This record is used to validate subdomain ownership to Amazon so that SSL certificates can be autogenerated.


The above examples are placeholders, Pendo will provide the actual set of DNS entries to be created. You will need a unique content domain for each subscription you have Pendo installed in.

Once the DNS entries are configured, Pendo will complete the infrastructure configuration which includes autogeneration of SSL certificates for the new hostnames.

Pendo will update the "data host" and "content host" in the subscription settings to point mobile.product.example.com.

Enabling CNAME in Android

Add the following entries to the app’s Manifest.xml, inside the <application> tag:

example:
<meta-data android:name="pnd_device_url" android:value="https://mobile.product.example.com" />
<meta-data android:name="pnd_app_url" android:value="https://mobile.product.example.com/" />
<meta-data android:name="pnd_data_url" android:value="https://mobile.product.example.com/" />

Enabling CNAME in iOS

Add the following mapping to your info.plist

<key>PNDCNames</key> 
<dict>
<key>PNDDeviceURL</key>
<string>https://mobile.product.example.com</string>

<key>PNDAppURL</key>
<string>https://mobile.product.example.com</string>

<key>PNDDataURL</key>
<string>https://mobile.product.example.com</string>
 


Frequently asked questions

Can I provide my own SSL certificates?

You can provide a single SSL certificate suitable for both the data and content hostnames or provide two separate certificates. There are two ways to handle certificate generation.

  1. Generate a key and CSR, obtain a certificate from your CA, and send us an encrypted archive containing the certificate chain and private key. Our default is to send PGP-encrypted files via keybase.io to a member of our OPS team, such as https://keybase.io/a13m. If you prefer your own approved secure file transfer mechanism, we can use that instead.

  2. Provide us a text file suitable for generating a CSR. Pendo generates a key and CSR, sends you the CSR, which you use to obtain a certificate from your CA. This eliminates the need to pass a private key between parties; the certificate chain is safe to send via plaintext email. The CSR input file looks like the following:
[ req ]
default_bits = 2048
prompt = no
encrypt_key = no
default_md = sha1
distinguished_name = dn
req_extensions = req_ext

[ dn ]
CN = data.product.example.com
O = Example, Inc.
L = Some City
ST = NC
C = US
0.OU= Engineering

[ req_ext ]
subjectAltName = DNS:data.product.example.com, DNS:content.product.example.com