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.
-
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.
- 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