android - 推送通知仅适用于国外第三方推送提供商服务?

标签 android firebase ionic-framework push-notification ionic3

我正在使用 Ionic 3 构建一个应用程序,并使用 Firebase 作为 Android 构建的推送提供者。下图显示了现在正在运行的架构(不是 GCM,而是 Firebase)

enter image description here

顺便说一句,我想知道是否有可能(以及如何)自己构建推送提供程序,我在哪里可以找到一些信息,我搜索了所有谷歌但我没有找到任何类型的响应。推送通知仅适用于我公司以外的推送提供商(Firebase、OneSignal 等)?

编辑:我的目的是不使用任何类型的第三方服务,如 firebase 或 APNS 或 OneSignal 等,我想自己构建它

抱歉,移动不是我的 IT 背景。 :)

最佳答案

您可以通过 Firebase 使用您自己的服务器发送推送通知。 请按照以下步骤操作。

  • 转到 Firebase 控制台并创建一个项目。
  • 转到项目设置中的云消息
  • 您将在项目凭据中看到服务器 key 旧版服务器 key 发件人 ID
  • 您唯一需要的是服务器 key 。复制服务器 key
  • 您需要向“https://fcm.googleapis.com/fcm/send”发送post 请求'.

发布请求的 header

需要设置两个header。

  1. 内容类型:'application/json'
  2. 授权:'key=服务器 key '

Server key 替换为您在项目设置中从 firebase 云消息传递中复制的内容。

有效负载

您必须根据 ionic push 插件更改您的有效载荷。(cordova-plugin-fcm,cordova-plugin-firebase)。

{
   "to" : 'Push Device Token',
   "notification" : {
        "title": 'Title for Push Message',
         "body" : 'Push Message'
    }
}

{
   "to" : 'Push Device Token',
   "content_available": boolean,
   "priority": "high",
   "data": {
       "show_in_foreground": boolean,
       "body": 'Push Message'
     }
}

代码示例

如果您正在使用 NodeJS,您可以使用 request npm 模块 发送 post 请求。

var request = require('request');
var PUSH_API_URL = 'https://fcm.googleapis.com/fcm/send';
var  AUTHORIZATION = 'key=XXXXXXXXX'; //Replace XXXXXXXXX with your Server key
var payload = {
   "to" : 'Push Device Token',
   "notification" : {
        "title": 'Title for Push Message',
         "body" : 'Push Message'
    }
};

request.post(
    PUSH_API_URL,
{
  json: payload,
  headers:{
    'Authorization' : AUTHORIZATION,
    'Content-Type' : 'application/json'
  }} , function(error, response, body){
  if (error) {
    // TODO: handle the error
  }
  else if(response.statusCode === 200){
    // TODO: handle the success response
  }
  else{

  }
});

希望对您有所帮助。如果您需要在下面澄清任何评论。从 Firebase Documentation 阅读更多内容.

关于android - 推送通知仅适用于国外第三方推送提供商服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50744914/

相关文章:

angular - 在根级别配置 ion-tabs 的选项卡

java - Jetty 服务器显示 System.err

android - 将 EasyTracker 与 FragmentActivity 和 ActionBarSherlock 结合使用

android - java.lang.NoClassDefFoundError : Failed resolution of: Lcom/google/firebase/iid/FirebaseInstanceId; React Native App

firebase - 如何在 Multi-Tenancy 设置中生成 Firebase 自定义 token

android - 根据Flavor文件夹的内容有条件地应用gradle插件

javascript - 如何增加图像的大小以使其可见?

android - 如何在 Android 代码中提前取消处理程序?

android - 为什么 Retrofit 向所有 URL 添加尾部斜杠?

javascript - ionic 2 使用 nav Push 在页面之间发送数据