Table of Contents
Sending push notifications from Salesforce to mobile applications can be challenging due to Salesforce’s limitations. By default, Salesforce requires a Connected App to send notifications, but this only allows notifications to be sent to Salesforce users, not external contacts or leads.
To address this limitation, we use AWS Pinpoint, which serves as an intermediate service between Salesforce and mobile apps. AWS Pinpoint provides scalable, secure, and efficient push notifications to Android (FCM) and iOS (APNs) devices.
This guide outlines the step-by-step process to integrate Salesforce with AWS Pinpoint and send push notifications successfully.
Why Use AWS Pinpoint for Salesforce Push Notifications?
Salesforce’s built-in push notification feature has several limitations:
- It requires a Connected App, limiting notifications to Salesforce users only.
- It does not support push notifications for external contacts, leads, or customers.
- It lacks flexibility in segmentation, automation, and targeting.
Key Benefits of AWS Pinpoint
- No Need for a Connected App: Send push notifications to external contacts, leads, and customers.
- Supports Multi-Platforms: Works with Android (FCM) and iOS (APNs).
- Scalable & Cost-Effective: Handles millions of notifications efficiently.
- Custom Targeting:– Personalize notifications based on customer preferences and behavior.
- Real-Time Analytics: Track delivery rates, open rates, and engagement.
- Seamless API Integration: Salesforce can trigger notifications programmatically without complex configurations.
Step-by-Step Guide: Sending Push Notifications from Salesforce to Mobile Apps via AWS Pinpoint

Step 1: Set Up AWS Pinpoint for Push Notifications
1. Log in to AWS Console and navigate to Amazon Pinpoint.
2. Create a New Project (or select an existing one).
3. Enable Push Notification Channels:
- Configure Firebase Cloud Messaging (FCM) for Android.
- Configure Apple Push Notification Service (APNs) for iOS.
4. Set Up Firebase for Android:
- Go to Firebase Console → Select your project → Project Settings → Service Accounts.
- Generate and download the JSON private key file.
5. Set Up APNs for iOS:
- Obtain Team ID, Auth Key, Bundle ID, and .p8 Certificate from Apple Developer Console.
6. Retrieve AWS Pinpoint Application ID – This ID will be used for API calls in Salesforce.
Step 2: Configure Salesforce to Call AWS Pinpoint API
1. Enable External API Calls in Salesforce
- Go to Salesforce Setup → Remote Site Settings.
- Add AWS Pinpoint API URL as a trusted remote site.
2. Create an Apex Class to Send Push Notifications
- Salesforce will use Apex Code to call the AWS Pinpoint API and send push notifications.
AWS Pinpoint API Endpoint.
https://pinpoint.{aws_region}.amazonaws.com/v1/apps/{pinpoint_project_id}/messages
- {aws_region} → Your AWS region (e.g., us-east-1).
- {pinpoint_project_id} → Your AWS Pinpoint application ID.
API Payload Structure
{
"MessageConfiguration": {
"GCMMessage": {
"Body": "Hello, this is a push notification!",
"Title": "Notification Title",
"Action": "OPEN_APP",
"Data": { "key": "value" }
},
"APNSMessage": {
"Body": "Hello, this is a push notification!",
"Title": "Notification Title",
"Action": "OPEN_APP",
"Data": { "key": "value" }
}
},
"Addresses": {
"deviceToken": { "ChannelType": "APNS" }
}
}
Apex Code for Sending Push Notifications
public class AWSNotificationService {
public static String generateSignature(String method, String service, String host, String region,
String endpoint, String requestParameters, String payload) {
String amzDate = Datetime.now().formatGMT('yyyyMMdd\'T\'HHmmss\'Z\'');
String dateStamp = Datetime.now().formatGMT('yyyyMMdd');
String canonicalUri = endpoint;
String canonicalQueryString = requestParameters;
String canonicalHeaders = 'host:' + host + '\n' + 'x-amz-date:' + amzDate + '\n';
String signedHeaders = 'host;x-amz-date';
String payloadHash = hash(payload);
String canonicalRequest = method + '\n' + canonicalUri + '\n' + canonicalQueryString + '\n' +
canonicalHeaders + '\n' + signedHeaders + '\n' + payloadHash;
String algorithm = 'AWS4-HMAC-SHA256';
String credentialScope = dateStamp + '/' + region + '/' + service + '/aws4_request';
String stringToSign = algorithm + '\n' + amzDate + '\n' + credentialScope + '\n' + hash(canonicalRequest);
Blob signingKey = getSignatureKey(SECRET_KEY, dateStamp, region, service);
String signature = hmacSHA256(stringToSign, signingKey);
String authorizationHeader = algorithm + ' ' + 'Credential=' + ACCESS_KEY + '/' + credentialScope +
', SignedHeaders=' + signedHeaders + ', Signature=' + signature;
return authorizationHeader;
}
@future(callout = true)
public static void sendPushNotification(String message) {
try {
String method = 'POST';
String service = 'mobiletargeting';
String host = 'pinpoint.us-east-1.amazonaws.com';
String region = 'us-east-1';
String endpoint = '/v1/apps/YOUR_APP_ID/messages';
String requestParameters = '';
String payload = message;
String authorizationHeader = generateSignature(method, service, host, region, endpoint, requestParameters, payload);
HttpRequest req = new HttpRequest();
req.setEndpoint('https://' + host + endpoint);
req.setMethod(method);
req.setHeader('Authorization', authorizationHeader);
req.setHeader('x-amz-date', Datetime.now().formatGMT('yyyyMMdd\'T\'HHmmss\'Z\''));
req.setHeader('Content-Type', 'application/json');
req.setBody(payload);
Http http = new Http();
HttpResponse res = http.send(req);
System.debug(res.getStatusCode());
System.debug(res.getStatus());
System.debug(res.getBody());
} catch (Exception e) {
System.debug(e.getMessage());
}
}
}
Step 3: Configure Mobile Apps to Receive Push Notifications
- For Android: Follow AWS Amplify Android Push Notification Guide.
- For iOS: Follow AWS Amplify iOS Push Notification Guide.
Conclusion
By integrating AWS Pinpoint, businesses can overcome Salesforce’s limitations and send push notifications to contacts, leads, and customers. This scalable and automated approach enhances user engagement and communication.
- Salesforce alone cannot send push notifications to external users.
- AWS Pinpoint serves as a bridge to send notifications to mobile apps.
- Multi-platform support ensures seamless push notifications for Android & iOS.
- Real-time tracking and analytics improve campaign effectiveness.
Frequently Asked Questions
1. Can I send push notifications from Salesforce without AWS Pinpoint?
Salesforce supports push notifications only for users within the Salesforce platform. AWS Pinpoint enables notifications to be sent to external users such as customers and leads.
2. How secure is AWS Pinpoint for sending push notifications?
AWS Pinpoint uses secure authentication, encryption, and access control mechanisms to ensure safe communication between Salesforce and mobile apps.
3. What happens if a push notification fails to deliver?
AWS Pinpoint provides real-time analytics and logs errors for failed notifications. So, you can monitor these metrics and troubleshoot any delivery issues.
4. Is AWS Pinpoint cost effective for businesses?
Yes, AWS Pinpoint offers reliable pricing based on the usage. It is an affordable solution compared to developing an in house notification system.
5. How do I integrate AWS Pinpoint with a mobile app?
You need to configure Firebase Cloud Messaging (FCM) for Android and Apple Push Notification Service (APNs) for iOS. Then, AWS Pinpoint connects with these services to send push notifications.