We've been using Amazon Simple Notification Service (https://aws.amazon.com/sns/) and having good results so far. Since SNS is part of AWS, it integrates well with other Amazon services. As an example, we wrote a simple AWS Lambda function to send a "reminder" notification for one our Apps, and created a CloudWatch schedule trigger to run the function once a week. As long as you're cool with a lttle Node.js or Python coding, using the AWS SDK for SNS is relatively straightforward. Our Lambda written for Node.js looks something like this:
var AWS = require('aws-sdk');
AWS.config.update({
accessKeyId: 'YOUR KEY HERE',
secretAccessKey: 'YOUR SECRET HERE',
region: 'us-west-2'
});
exports.handler = (event, context) => {
var sns = new AWS.SNS();
var message = {
"default": "This is a notification message",
"APNS_SANDBOX":"{\"aps\":{\"alert\":\"This is a notification message\"}}"
// Use "APNS" here to target production apps
};
var params = {
MessageStructure: "json",
Message: JSON.stringify(message),
TopicArn: "arn:aws:sns:us-west-2:123456789012:YourTopicSetUpInSNS"
};
sns.publish(params, context.done);
};
As with all AWS services, pricing can get complicated based usage, how much data you're storing and transferring, etc. SNS on it's own is free for the first 1 million mobile push notifications per month, though.
I've been writing about AWS SNS on my company blog, starting with general setup stuff: http://www.artermobilize.com/blog/2017/02/14/step-by-step-guide-to-setup-ios-push-notifications-with-amazon-sns/. More code samples there if you're interested.
Cheers,
Evan