我的Android应用程序需要简单的推送通知才能获知服务器上新数据的外观.Android提供的Google Cloud Messaging(GCM)似乎很合适.
但是,运行速度低于Android 4.0.4的设备需要在手机上显示一个Google帐户(截至2012年10月1日的Google平台统计信息,目前大约有75%的Android手机).要求用户在不相关的应用程序活动中设置Google帐户似乎不是一个好的体验.
是否有任何建议可以在Android平台上使用更通用的推送机制?例如,Amazon SNS的优点和缺点是什么?还有其他候选人?
android push-notification amazon-sns android-c2dm google-cloud-messaging
在我的JAVA应用程序中,我使用Amazon SNS向客户发送电子邮件; 一旦我订阅了一个客户(电子邮件ID)到我的SNS主题; 它要求客户确认订阅以接收电子邮件;
有没有办法在我们的应用程序中确认订阅(没有cusstomer的帮助)?
我在我的服务器上配置了postfix,只将@ gmail.com邮件发送到Amazon SES:
gmail.com smtp:email-smtp.eu-west-1.amazonaws.com:25
* :
Run Code Online (Sandbox Code Playgroud)
此外,我在Amazon SES控制台中配置了使用Amazon SNS接收邮件上的Bounces和Complains.问题是,如果我发送邮件到不存在的Gmail地址,我不会收到退回.
如果从mail.google.com发送邮件到地址dsadaerwer.lala-band-sucks.justin-is-a-beaver@gmail.com,我会收到:
Delivery to the following recipient failed permanently:
dsadaerwer.lala-band-sucks.justin-is-a-beaver@gmail.com
Run Code Online (Sandbox Code Playgroud)
但是如果从PHP脚本发送到同一个地址,postfix说:
E4E1A9F9CE: to=<dsadaerwer.lala-band-sucks.justin-is-a-beaver@gmail.com>, relay=email-smtp.eu-west-1.amazonaws.com[54.72.42.170]:25, delay=21, delays=0.02/0.04/11/10, dsn=2.0.0, status=sent (250 Ok 00000146d86bcc13-9fa1ac16-b1cd-476e-8398-31f406d47961-000000)
Run Code Online (Sandbox Code Playgroud)
因此,亚马逊SES接受邮件,但我没有收到有关失败的通知.有什么不对?
注意.发送到有效的电子邮件时,一切都按预期工作.
此外,当从AWS SES控制台向bounce@simulator.amazonses.com发送测试邮件时,我会立即通过电子邮件通知我,但是通过email-smtp.eu-west-1.amazonaws从PHP脚本发送到同一封电子邮件. com不会导致电子邮件通知.
我正在通过节点SDK从AWS发送短信.短信很顺利,我正在尝试获取交付信息.显然它不是那么容易,需要设置SNS将日志发送到Cloudwatch并解析CloudWatch以获取查询MessageId的交付信息:https://stackoverflow.com/a/40327061/2054629
如果我通过SNS Web界面发送短信,日志我会看到cloudwatch中的日志,但是当我通过节点SDK发送它们时.在从节点发送之前,我无法获得有关如何设置内容的信息.
理想情况下,我希望实现以下目标:
const sendSMS = async (message, number) => {
// send the SMS
// wait to get delivery info
// resolve with delivery info, or reject if failed
}
Run Code Online (Sandbox Code Playgroud)
目前我有:
import AWS from 'aws-sdk';
AWS.config.update({
accessKeyId: accessKey,
secretAccessKey: secretKey,
region: 'us-east-1',
});
const sns = new AWS.SNS();
const sendSMS = async (message, number) => {
return await new Promise((resolve, reject) => {
sns.publish({
Message: message,
MessageStructure: 'string',
PhoneNumber: number,
}, (err, res) => {
if …Run Code Online (Sandbox Code Playgroud) 我正在将AWS Mobile HUD与AWS SNS一起使用并遇到问题.
什么有效/已经完成了
以下代码应使用AWS SNS注册应用程序(设备):
pushManager = AWSPushManager(forKey: ServiceKey)
pushManager?.delegate = self
pushManager?.registerForPushNotifications()
Run Code Online (Sandbox Code Playgroud)
并且 - 足够大,func pushManagerDidRegister(_ pushManager: AWSPushManager)被称为成功.我func pushManagerDidRegister(_ pushManager: AWSPushManager)看起来像
func pushManagerDidRegister(_ pushManager: AWSPushManager) {
print("Successfully enabled Push Notifications on platform: \(pushManager.platformARN)")
// Subscribe the first topic among the configured topics (all-device topic)
if let defaultSubscribeTopic = pushManager.topicARNs?.first {
let topic = pushManager.topic(forTopicARN: defaultSubscribeTopic)
topic.subscribe()
}
}
Run Code Online (Sandbox Code Playgroud)
日志输出:
Successfully enabled Push Notifications on platform: …Run Code Online (Sandbox Code Playgroud) 我在调用 lambda 时收到此错误。
"errorType": "Runtime.ImportModuleError", "errorMessage": "错误: 找不到模块 '@aws-sdk/client-sns'\n需要堆栈:\n- /var/task/handler.js\n- /var /runtime/UserFunction.js\n- /var/runtime/index.js", "trace": [ "Runtime.ImportModuleError: 错误: 找不到模块 '@aws-sdk/client-sns'",
import * as AWS from '@aws-sdk/client-sns';
import { JamaSnsMessage } from './models/jama';
import { region, snsTopicArn } from './utils/constants';
import { log } from './utils/logger';
const client = new AWS.SNS({ region });
/**
* Publishes given SNS formatted Jama items to SNS topic
*
* @param {JamaSnsMessage[]} items
*/
export const publishItems = async (items: JamaSnsMessage[]): Promise<void> => {
if (!items …Run Code Online (Sandbox Code Playgroud)在RabbitMQ中,可以创建一个交换,然后将其绑定到多个队列,每个队列都有一个路由密钥.这使得消息传递体系结构如下所示:
message_x
/ | \
foo-msg_q bar-msg_q msg-logger_q
Run Code Online (Sandbox Code Playgroud)
客户端将消息发布到message_x交换机,该消息仅将具有路由密钥"foo"的消息路由到foo-msg_q队列,仅将具有路由密钥"bar"的消息路由到bar-msg_q队列,并将所有消息路由到msg-logger_q队列.
我无法确定如何在AWS中执行此操作.我的第一个想法是在各个队列上设置权限以接受基于主题的消息,但是权限条件的唯一可用字段是:
这些似乎都不会受到我发布到该message_x主题的任何消息的影响.
当使用Amazon Simple Notification Service扇出到多个简单队列服务队列时,是否可以做这样的事情,每个队列接收发布到该主题的消息子集?
有没有办法在本地实例化SNS才能运行单元测试?我知道dynamoDB可以使用DynamoDBLocal进行本地实例化,SNS是否也支持相同?如果是这样,任何人都可以提供文件吗?提前致谢.
我有一台运行在rackspace上的服务器,它托管一个PHP Web应用程序.
PHP Web应用程序将接受表单提交,然后需要根据表单字段条目执行任务.
任务(让我们称之为生成元数据任务)需要相当多的处理时间.我想知道如何允许表单提交直接保存到数据库,并在后台运行生成元数据任务时立即向用户显示成功页面.
我已将"aws/aws-sdk-php": "~3.11"使用composer 安装到同一个Web应用程序中.
我的计划最初是这样的:
处理表单提交的代码
$result = $model->save($_POST);
// this code will send the information to either SQS or SNS
$awsClient->sendsMessage($_POST);
if ($result) {
$this->redirect('success.html');
}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了AWS 所述的扇出架构.
我对扇出架构示例的问题(据我所知)是这样的:
我在这里找到了可能的解决方案
建议的解决方案是:
将消息发送到SNS主题.
SNS主题将同时发送SQS队列和我的Web应用程序.
我的Web应用程序在被触发后将轮询同一个SQS队列,该队列现在已连续排队消息,直到队列为空
我从中看到的缺点是我的Web应用程序将在队列本身有消息之前轮询队列.
使用AWS服务实现推送队列的最佳方法是什么?
在微服务之间协调任务的更好选择是什么?
例如,如果我有一个处理客户信息并需要通知其他微服务的微服务,那么在微服务之间创建工作流(AWS Steps)或使用SNS是否更好?
我认为AWS Steps将耦合我的lambda函数,而SNS不会.
amazon-sns ×10
amazon-sqs ×2
aws-sdk ×2
amazon-ses ×1
android ×1
android-c2dm ×1
ios ×1
node.js ×1
php ×1
sms ×1
swift ×1