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 are 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.
Configuration
You must provide a subdomain of your corporate domain, such as product.example.com
(where ‘example’ is your corporate domain).
Pendo provides a set of required DNS entries that must be created. Examples are shown in this table:
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 data.jpn.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 examples are placeholders. Pendo provides the actual set of DNS entries to be created. You need a unique content domain for each subscription
where you have Pendo installed.
Once the DNS entries are configured, Pendo completes the infrastructure configuration that includes autogeneration of SSL certificates for the new hostnames.
Pendo updates the "data host" and "content host" in the subscription settings to point to 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>
Important: When enabling CNAME in both Android and iOS, make sure the three URLs are directed to a single URL.
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