信鸽推送 push API

参考: push_api_v3

0. 基本 push

const _ = require('lodash');
const fetch = require('node-fetch');
const CryptoJS = require('crypto-js'); // zh/en android/ios authorization
const XINGE_PARAMS = {
zh: {
android: {
appId: '', // 需要替换成自己app的appId
secretKey: '', // 需要替换成自己app的secretKey
},
ios: {
appId: '',
secretKey: '',
},
},
en: {
android: {
appId: '',
secretKey: '',
},
ios: {
appId: '',
secretKey: '',
},
},
};
const getAuthorization = (locale, platform) => {
const { appId, secretKey } = XINGE_PARAMS[locale][platform];
const str = `${appId}:${secretKey}`;
const wordArray = CryptoJS.enc.Utf8.parse(str);
const base64AuthString = CryptoJS.enc.Base64.stringify(wordArray);
return base64AuthString;
};
const XINGE_AUTHORIZATIONS = ['zh', 'en'].reduce((authorizations, locale) => {
const platforms = ['android', 'ios'].reduce((platformResult, platform) => {
platformResult[platform] = getAuthorization(locale, platform);
return platformResult;
}, {});
authorizations[locale] = platforms;
return authorizations;
}, {}); // android/ios notification message;
const formatMessageByPlatform = (platform, custom = {}) => {
if (platform === 'android') {
return {
android: {
action: {
action_type: 1,
},
custom_content: custom, //用户自定义的键值对
},
};
} return {
ios: {
aps: {
alert: {},
sound: 'default',
},
custom,
}
};
}; // common push, audience_type default value is all
const push = (params, audienceOptions) => {
const { locale, platform, title, content, custom, environment = 'product' } = params;
const authorization = XINGE_AUTHORIZATIONS[locale][platform];
const otherMessage = formatMessageByPlatform(platform, custom);
const environmentObj = platform === 'ios' ? { environment } : {}; const data = Object.assign({
audience_type: 'all',
platform,
...environmentObj,
message_type: 'notify',
message: {
title,
content,
...otherMessage,
},
},
audienceOptions); return fetch('https://openapi.xg.qq.com/v3/push/app', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Basic ${authorization}`,
},
body: JSON.stringify(data),
})
.then((res) => res.json())
.then((res) => console.log(res));
};
exports.push = push;

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

function getTokensByPlatform(platform, tokens) {
return tokens
.filter((item) => item.platform === platform)
.map((item) => item.token);
} // 1. push to tokenList by tokens
exports.xgPushByTokens= (params, tokens) => {
const androidParams = { platform: 'android', ...params };
const androidTokens = getTokensByPlatform('android', tokens);
const androidAudience = {
audience_type: 'token_list',
token_list: androidTokens,
}; const iosParams = { platform: 'ios', ...params };
const iosTokens = getTokensByPlatform('ios', tokens);
const iosAudience = {
audience_type: 'token_list',
token_list: iosTokens,
}; return Promise.all([
_.isEmpty(androidTokens) ? Promise.resolve() : push(androidParams, androidAudience),
_.isEmpty(iosTokens) ? Promise.resolve() : push(iosParams, iosAudience),
]);
};

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

// 2. push to all
exports.xgPushAll = (params) => {
const androidParams = { platform: 'android', ...params };
const iosParams = { platform: 'ios', ...params }; return Promise.all([
push(androidParams),
push(iosParams),
]);
};

信鸽推送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. NuGet Package Explorer使用教程下载

    1.下载NuGet Package Explorer http://www.pc0359.cn/downinfo/91514.html 2.双击NuGet Package Explorer出现启动界面 ...

  2. linux下安装opencv3.0

    查版本gcc --version 需>4.8python 2.7+cmake --version numpy 以上是必须的 linux下安装opencv3.0<pre>https:/ ...

  3. 如何使用24行JavaScript代码实现Redux

    作者:Yazeed Bzadough 译者:小维FE 原文:freecodecamp 为了保证文章的可读性,本文采用意译而非直译. 90%的规约,10%的库. Redux是迄今为止创建的最重要的Jav ...

  4. VS2019打包WPF安装程序最新教程

    VS2019打包WPF安装程序最新教程,使用Visual Studio 2019开发的WPF程序如果想要打包为安装程序,除了在VS2019找到WPF项目类库直接右键发布之外,更常用的还是将其打包为ex ...

  5. 淘宝小练习#css

    * { margin: 0; padding: 0; } a { text-decoration: none; } .box { background: #f4f4f4; } /* 头部样式STAR ...

  6. lufylegend.js教程(1)

    1.图片元素如何缩小? 在LSprite类中,有两个属性:{scaleX,scaleY},这两个属性属于按比例缩放精灵对象,可以放大,可以缩小,注意这两个属性是在图片中心点位置开始缩放. 代码: Bo ...

  7. 后台服务器框架中的瑞士军刀——MCP

    上篇介绍了一个简单的UDP服务框架,但是面对海量的请求,同步框架显然有点力不从心.于是在我接手好友系统的接口服务的时候,就采用了一个强大的异步框架——MCP框架. MCP框架是一个多进程异步框架,支持 ...

  8. C语言1博客作业06

    这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://www.cnblogs.com/sanying/p/11771502.html 我在这个课程的目标是 端正态度,认真对待 ...

  9. Android ConstraintLayout

    对官方例子加上自己的容器即可调整ConstraintLayout实时运行中观察这种布局的变化

  10. 学习记录:《C++设计模式——李建忠主讲》1.设计模式

    1.学习目标 1)理解松耦合设计思想: 2)掌握面向对象设计原则: 3)掌握重构技法改善设计: 4)掌握GOF核心设计模式: 2.定义 每个设计模式描述了一个在我们周围不断重复发生的问题,以及该问题解 ...