草庐IT

android - 带有 AWS SNS 的 FCM

coder 2023-05-07 原文

我正在为我的 android 项目使用 AWS 资源,我计划使用 AWS SNS 为我的项目添加推送通知服务。很少有问题困扰着我。我没有发现任何关于这些的问题,除了一两个但解释不清楚的问题。

1.AWS是否支持FCMSNSGCM 一起使用。但 Google 建议使用 FCM 而不是 GCM。我没有找到支持 FCMAWS

2.即使在发送推送通知之后,AWS 是否会将消息(或数据)存储到他们的数据库中?

3.我尝试将FCM api key放入SNS应用平台,为什么显示无效参数?

最佳答案

FCM 向后兼容 GCM。在 AWS 上设置 FCM 的步骤与 GCM set up procedure 相同。并且(至少目前)FCM 在服务器端配置方面与 GCM 和 SNS 透明地工作。

然而,如果您将 data 负载发送到 Android 设备,除非您实现 client side service,否则它们不会被处理。扩展了 FirebaseMessagingService。 AWS 控制台中的默认 JSON 消息生成器发送 data 消息,除非实现上述服务,否则您的应用程序将忽略这些消息。为了在初始测试中解决这个问题,您可以提供一个自定义的 notification 有效负载,您的设备将接收该有效负载(只要您的应用不在前台)

GCM-FCM migration instructions由 Google 提供,但您需要进行的更改主要在应用端。

使用 SNS 在您的应用上测试 GCM/FCM 需要遵循的步骤是:

  1. 创建 Platform Application in SNS ,选择 Google Cloud Messaging (GCM) 作为推送通知平台,并提供您的 Server API keyAPI key 字段中。
  2. 选择平台应用程序并点击创建平台端点按钮。
  3. 提供您的应用生成的 InstanceID(设备 token )。您必须扩展 FirebaseInstanceIDService 并覆盖 onTokenRefresh 方法才能在您的 Android 应用程序中看到这一点。一旦你have done this ,卸载并重新安装您的应用,您的 token 应在首次启动时打印到 Android Studio 中的调试控制台。
  4. 点击添加端点按钮。
  5. 点击您的平台应用程序的 ARN 链接。
  6. 为您的设备选择新创建的端点,然后点击发布到端点按钮。
  7. 选择 JSON 消息格式,然后点击 JSON 消息生成器按钮。
  8. 输入测试消息并点击Generate JSON按钮
  9. 现在是“陷阱部分”。

SNS 生成的消息格式如下:

{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}

正如我们之前提到的,如果没有实现接收它们的服务,data 有效负载将被忽略。我们想在不编写太多代码的情况下进行测试,因此我们应该发送一个 notification 有效载荷。为此,只需将 JSON 消息更改为:

{
"GCM": "{ \"notification\": { \"title\": \"test title\", \"body\": \"test body\" } }"
}

(有关 FCM 消息的 JSON 格式的更多信息,请参阅 FCM documentation。)

完成此操作后,请确保您的应用未在设备上运行,然后点击发布消息按钮。您现在应该会在您的设备上看到一个弹出通知。

您当然可以通过 Amazon SNS API 以编程方式完成所有这些操作,但是所有示例似乎都使用 data 负载,因此您需要牢记这一点并生成适合您使用的负载案例。

关于android - 带有 AWS SNS 的 FCM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38300450/

有关android - 带有 AWS SNS 的 FCM的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby-on-rails - 带有 Zeus 的 RSpec 3.1,我应该在 spec_helper 中要求 'rspec/rails' 吗? - 2

    使用rspec-rails3.0+,测试设置分为spec_helper和rails_helper我注意到生成的spec_helper不需要'rspec/rails'。这会导致zeus崩溃:spec_helper.rb:5:in`':undefinedmethod`configure'forRSpec:Module(NoMethodError)对thisissue最常见的回应是需要'rspec/rails'。但这是否会破坏仅使用spec_helper拆分rails规范和PORO规范的全部目的?或者这无关紧要,因为Zeus无论如何都会预加载Rails?我应该在我的spec_helper中做

  3. Ruby:如何使用带有散列的 'send' 方法调用方法? - 2

    假设我有一个类A,里面有一些方法。假设stringmethodName是这些方法之一,我已经知道我想给它什么参数。它们在散列中{'param1'=>value1,'param2'=>value2}所以我有:params={'param1'=>value1,'param2'=>value2}a=A.new()a.send(methodName,value1,value2)#callmethodnamewithbothparams我希望能够通过传递我的哈希以某种方式调用该方法。这可能吗? 最佳答案 确保methodName是一个符号,而

  4. ruby-on-rails - 带有 Pry 的 Rails 控制台 - 2

    当我进入Rails控制台时,我已将pry设置为加载代替irb。我找不到该页面或不记得如何将其恢复为默认行为,因为它似乎干扰了我的Rubymine调试器。有什么建议吗? 最佳答案 我刚发现问题,pry-railsgem。忘记了它的目的是让“railsconsole”打开pry。 关于ruby-on-rails-带有Pry的Rails控制台,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question

  5. 带有 attr_accessor 的类上的 Ruby instance_eval - 2

    我了解instance_eval和class_eval之间的基本区别。我在玩弄时发现的是一些涉及attr_accessor的奇怪东西。这是一个例子:A=Class.newA.class_eval{attr_accessor:x}a=A.newa.x="x"a.x=>"x"#...expectedA.instance_eval{attr_accessor:y}A.y="y"=>NoMethodError:undefinedmethod`y='forA:Classa.y="y"=>"y"#WHATTT?这是怎么回事:instance_eval没有访问我们的A类(对象)然后它实际上将它添加到

  6. ruby-on-rails - Rails 渲染带有驼峰命名法的 json 对象 - 2

    我在一个简单的RailsAPI中有以下Controller代码:classApi::V1::AccountsControllerehead:not_foundendendend问题在于,生成的json具有以下格式:{id:2,name:'Simpleaccount',cash_flows:[{id:1,amount:34.3,description:'simpledescription'},{id:2,amount:1.12,description:'otherdescription'}]}我需要我生成的json是camelCase('cashFlows'而不是'cash_flows'

  7. ruby-on-rails - 在 Ruby 或 Rails 中,hash.merge({ :order => 'asc' }) can return a new hash with a new key. 什么可以返回带有已删除键的新散列? - 2

    在Ruby(或Rails)中,我们可以做到new_params=params.merge({:order=>'asc'})现在new_params是一个带有添加键:order的散列。但是是否有一行可以返回带有已删除key的散列?线路new_params=params.delete(:order)不会工作,因为delete方法返回值,仅此而已。我们必须分3步完成吗?tmp_params=paramstmp_params.delete(:order)returntmp_params有没有更好的方法?因为我想做一个new_params=(params[:order].blank?||para

  8. ruby-on-rails - 从带有 ruby​​ on rails 的网站获取 html - 2

    如何使用ruby​​onrails获取网络上某处其他网站的页面数据? 最佳答案 您可以使用httparty只是获取数据示例代码(来自example):requireFile.join(dir,'httparty')require'pp'classGoogleincludeHTTPartyformat:htmlend#google.comredirectstowww.google.comsothisislivetestforredirectionppGoogle.get('http://google.com')puts'','*'*7

  9. ruby-on-rails - 使用模块扩展带有 "has_many"的插件中的模型 - 2

    我在引擎样式插件中有一些代码,其中包含一些模型。在我的应用程序中,我想扩展其中一个模型。通过在初始值设定项中包含一个模块,我已经设法将实例和类方法添加到相关模型中。但是我似乎无法添加关联、回调等。我收到“找不到方法”错误。/libs/qwerty/core.rbmoduleQwertymoduleCoremoduleExtensionsmoduleUser#InstanceMethodsGoHere#ClassMethodsmoduleClassMethodshas_many:hits,:uniq=>true#nomethodfoundbefore_validation_on_crea

  10. ruby-on-rails - 带有自定义处理器的 CarrierWave 未注册 - 2

    我正在使用carrierwave上传视频然后有一个名为thumb的版本,带有自定义处理器,可以获取视频并使用streamio-ffmpeg创建屏幕截图。视频和文件都已正确上传,但在调用uploader.url(:thumb)时我得到:ArgumentError:Versionthumbdoesn'texist!VideoUploader.rbrequire'carrierwave/processing/mime_types'require'streamio-ffmpeg'classVideoUploader5)File.renamethumb_path,current_pathendd

随机推荐