信鸽推送 push API

参考: push_api_v3

0. 基本 push

  1. const _ = require('lodash');
  2. const fetch = require('node-fetch');
  3. const CryptoJS = require('crypto-js');
  4. // zh/en android/ios authorization
  5. const XINGE_PARAMS = {
  6. zh: {
  7. android: {
  8. appId: '', // 需要替换成自己app的appId
  9. secretKey: '', // 需要替换成自己app的secretKey
  10. },
  11. ios: {
  12. appId: '',
  13. secretKey: '',
  14. },
  15. },
  16. en: {
  17. android: {
  18. appId: '',
  19. secretKey: '',
  20. },
  21. ios: {
  22. appId: '',
  23. secretKey: '',
  24. },
  25. },
  26. };
  27. const getAuthorization = (locale, platform) => {
  28. const { appId, secretKey } = XINGE_PARAMS[locale][platform];
  29. const str = `${appId}:${secretKey}`;
  30. const wordArray = CryptoJS.enc.Utf8.parse(str);
  31. const base64AuthString = CryptoJS.enc.Base64.stringify(wordArray);
  32. return base64AuthString;
  33. };
  34. const XINGE_AUTHORIZATIONS = ['zh', 'en'].reduce((authorizations, locale) => {
  35. const platforms = ['android', 'ios'].reduce((platformResult, platform) => {
  36. platformResult[platform] = getAuthorization(locale, platform);
  37. return platformResult;
  38. }, {});
  39. authorizations[locale] = platforms;
  40. return authorizations;
  41. }, {});
  42. // android/ios notification message;
  43. const formatMessageByPlatform = (platform, custom = {}) => {
  44. if (platform === 'android') {
  45. return {
  46. android: {
  47. action: {
  48. action_type: 1,
  49. },
  50. custom_content: custom, //用户自定义的键值对
  51. },
  52. };
  53. }
  54. return {
  55. ios: {
  56. aps: {
  57. alert: {},
  58. sound: 'default',
  59. },
  60. custom,
  61. }
  62. };
  63. };
  64. // common push, audience_type default value is all
  65. const push = (params, audienceOptions) => {
  66. const { locale, platform, title, content, custom, environment = 'product' } = params;
  67. const authorization = XINGE_AUTHORIZATIONS[locale][platform];
  68. const otherMessage = formatMessageByPlatform(platform, custom);
  69. const environmentObj = platform === 'ios' ? { environment } : {};
  70. const data = Object.assign({
  71. audience_type: 'all',
  72. platform,
  73. ...environmentObj,
  74. message_type: 'notify',
  75. message: {
  76. title,
  77. content,
  78. ...otherMessage,
  79. },
  80. },
  81. audienceOptions);
  82. return fetch('https://openapi.xg.qq.com/v3/push/app', {
  83. method: 'POST',
  84. headers: {
  85. 'Content-Type': 'application/json',
  86. Authorization: `Basic ${authorization}`,
  87. },
  88. body: JSON.stringify(data),
  89. })
  90. .then((res) => res.json())
  91. .then((res) => console.log(res));
  92. };
  93. exports.push = push;

1. 根据 token list,推送到android和ios

  1. function getTokensByPlatform(platform, tokens) {
  2. return tokens
  3. .filter((item) => item.platform === platform)
  4. .map((item) => item.token);
  5. }
  6. // 1. push to tokenList by tokens
  7. exports.xgPushByTokens= (params, tokens) => {
  8. const androidParams = { platform: 'android', ...params };
  9. const androidTokens = getTokensByPlatform('android', tokens);
  10. const androidAudience = {
  11. audience_type: 'token_list',
  12. token_list: androidTokens,
  13. };
  14. const iosParams = { platform: 'ios', ...params };
  15. const iosTokens = getTokensByPlatform('ios', tokens);
  16. const iosAudience = {
  17. audience_type: 'token_list',
  18. token_list: iosTokens,
  19. };
  20. return Promise.all([
  21. _.isEmpty(androidTokens) ? Promise.resolve() : push(androidParams, androidAudience),
  22. _.isEmpty(iosTokens) ? Promise.resolve() : push(iosParams, iosAudience),
  23. ]);
  24. };

2. 推送到android和ios 所有用户

  1. // 2. push to all
  2. exports.xgPushAll = (params) => {
  3. const androidParams = { platform: 'android', ...params };
  4. const iosParams = { platform: 'ios', ...params };
  5. return Promise.all([
  6. push(androidParams),
  7. push(iosParams),
  8. ]);
  9. };

信鸽推送Push API的更多相关文章

  1. 信鸽推送 .NET (C#) 服务端 SDK rest api 调用库(v1.2)

    信鸽推送 .NET  服务端 SDK rest api 调用库-介绍 该版本是基于信鸽推送v2版本的时候封装的,先拿出来与大家分享,封装还还凑合,不依赖其他http调用件,唯一依赖json序列化dll ...

  2. react-native 信鸽推送集成

    目录 一. git链接: react-native-xinge-push 1.1 安装 1.2. link 二. android配置 2.1. android/settings.gradle 2.2. ...

  3. 信鸽推送.NET SDK 开源

    github 地址 https://github.com/yeanzhi/XinGePushSDK.NET 传送门如何安装    建议使用nuget安装包,搜索"信鸽"即可    ...

  4. android app 集成 信鸽推送

    推送其实挺中意小米推送的,并经用户群占比还是比较大的,奈何拗不过php后端哥们的选型,就只好用信鸽推送了,期间接入过程中也是遇到不少问题,所以记录下来,以后如果还是用信鸽推送的话,估计看看以前的博客, ...

  5. iOS 关于信鸽推送点击推送通知的处理

    最近的项目中使用了推送模块,使用的是企鹅帝国的信鸽推送服务,关于具体怎么推送的,证书如何设置,我不再赘述,一来开发文档中已经讲的非常清楚,二来在网上一搜的话也能搜到一大堆:在这里主要写下关于推送的通知 ...

  6. 百度消息推送REST API探究

    一.百度云推送介绍 云推送(Push)是百度开放云向开发者提供的消息推送服务:通过利用云端与客户端之间建立稳定.可靠的长连接来为开发者提供向客户端应用推送实时消息服务. 百度云推送服务支持推送三种类型 ...

  7. 信鸽推送 10004,os文件配置出错,解决办法

    信鸽推送注册失败 返回码 10004 是 os  配置出现问题 经过询问客服,得到以下解决办法 将SDK中的so文件复制下来 新建文件夹jniLibs,并将 so 配置文件粘贴进去 便可完成注册

  8. Android 信鸽推送通知栏不显示推送的通知

    使用信鸽推送,却怎么也没反应.经过查看log发现确实是收到了推送过来的消息了,其中有这么一行: W/dalvikvm(23255): VFY: unable to resolve virtual me ...

  9. QQ信鸽推送

    闲来无事,看看腾讯的信鸽推送! 优点: 1.毕竟大腿出的东西,不会太差 2.集成快 3.推送效率高,功能强,APP后台被杀的情况下同样能接受到推送. 废话少说,直接上代码: 源代码.zip

随机推荐

  1. python经典面试算法题1.4:如何对链表进行重新排序

    本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.4 对链表按照如下要求重新排序 [微软笔试题] 难度系数: ...

  2. PHP 提交复选框数据

    PHP 提交复选框数据 前台,name要加 []: <input type="checkbox" name="cate[]" value="ca ...

  3. requests保存图片

    1.创建07_save_jpg.py文件 import requests #发送请求respone = requests.get("https://www.baidu.com/img/bd_ ...

  4. BootStrap中的collapse插件堆叠效果

    通过网络上的一系列查找,总结出的collapse插件堆叠效果(网上没有找到,只能自己弄了,帮助那些和我遇到一样状况的同学) 首先感谢一位网友的知识总结给了我灵感,在这里先帮他推荐一波(https:// ...

  5. react一写工具

    动画库:React-transition-group ui框架:Ant Design

  6. python2中的SSL:CERTIFICATE_VERIFY_FAILED错误的解决办法

    在使用urllib2访问一个自签名的https链接时,对于python2.6以下版本,TLS握手期间是不会检查服务器X509的证书签名是否是CA的可信任根证书.不过python2.7以后改变了这种情况 ...

  7. 【Linux系列】配置Centos 7的软件源(二)

    目的 本文主要介绍以下内容: 设置centos的国内软件源,默认源都是国外的下载软件超级麻烦. ssh登录 下载一个shell或者cmder ssh root@192.168.10.18 #上篇设置的 ...

  8. API更新#图书信息查询ISBN2.0

    ISBN图书查询     自2019年5月8日公布isbn查询接口1.0至今,该图书数据查询服务已被调用八万余次,查得图书11653本,感谢一直使用和关心这个接口的朋友们! 目前网站域名将于2019年 ...

  9. python--BMI

    #bmi height,weight = eval(input("请输入身高(m) 体重(kg),以逗号隔开\n")) bmi = weight/pow(weight,2) pri ...

  10. selenium常用命令之操作页面元素及获取元素内容的事件整理

    /**id <input type="text" id="phone" name="phone" class="LoginT ...