信鸽推送Push API
信鸽推送 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的更多相关文章
- 信鸽推送 .NET (C#) 服务端 SDK rest api 调用库(v1.2)
信鸽推送 .NET 服务端 SDK rest api 调用库-介绍 该版本是基于信鸽推送v2版本的时候封装的,先拿出来与大家分享,封装还还凑合,不依赖其他http调用件,唯一依赖json序列化dll ...
- react-native 信鸽推送集成
目录 一. git链接: react-native-xinge-push 1.1 安装 1.2. link 二. android配置 2.1. android/settings.gradle 2.2. ...
- 信鸽推送.NET SDK 开源
github 地址 https://github.com/yeanzhi/XinGePushSDK.NET 传送门如何安装 建议使用nuget安装包,搜索"信鸽"即可 ...
- android app 集成 信鸽推送
推送其实挺中意小米推送的,并经用户群占比还是比较大的,奈何拗不过php后端哥们的选型,就只好用信鸽推送了,期间接入过程中也是遇到不少问题,所以记录下来,以后如果还是用信鸽推送的话,估计看看以前的博客, ...
- iOS 关于信鸽推送点击推送通知的处理
最近的项目中使用了推送模块,使用的是企鹅帝国的信鸽推送服务,关于具体怎么推送的,证书如何设置,我不再赘述,一来开发文档中已经讲的非常清楚,二来在网上一搜的话也能搜到一大堆:在这里主要写下关于推送的通知 ...
- 百度消息推送REST API探究
一.百度云推送介绍 云推送(Push)是百度开放云向开发者提供的消息推送服务:通过利用云端与客户端之间建立稳定.可靠的长连接来为开发者提供向客户端应用推送实时消息服务. 百度云推送服务支持推送三种类型 ...
- 信鸽推送 10004,os文件配置出错,解决办法
信鸽推送注册失败 返回码 10004 是 os 配置出现问题 经过询问客服,得到以下解决办法 将SDK中的so文件复制下来 新建文件夹jniLibs,并将 so 配置文件粘贴进去 便可完成注册
- Android 信鸽推送通知栏不显示推送的通知
使用信鸽推送,却怎么也没反应.经过查看log发现确实是收到了推送过来的消息了,其中有这么一行: W/dalvikvm(23255): VFY: unable to resolve virtual me ...
- QQ信鸽推送
闲来无事,看看腾讯的信鸽推送! 优点: 1.毕竟大腿出的东西,不会太差 2.集成快 3.推送效率高,功能强,APP后台被杀的情况下同样能接受到推送. 废话少说,直接上代码: 源代码.zip
随机推荐
- linux中dd相关命令骚操作
一.dd如何快速将磁盘写满 方法一: dd if=/dev/zero of=/tmp/file bs=1G count=10 # 参数解释 1. if=文件名:输入文件名,缺省为标准输入.即指定源文件 ...
- Angular 2的HTML5 pushState在ASP.NET Core上的解决思路
Angular 2的HTML5 pushState在ASP.NET Core上的解决思路 正如Angular 2在Routing & Navigation中所提及的那样,Angular 2是推 ...
- hdu 1166 敌兵布阵 (线段树、单点更新)
敌兵布阵Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- gitbook 入门教程之一招彻底解决 favicon 图标失效问题
favicon-absolute 项目 favicon-absolute 插件采用绝对路径设置网站 favicon 图标,相对于相对路径来说更加简单方便.
- (线段树)A Corrupt Mayor's Performance Art
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 题意: 区间更新, 区间询问: 题解: 区间更新, 区间询问, 一共30种颜色, 可用int 来 ...
- win10添加启动项目
Win10启动文件夹一般位于C:\ProgramData\Microsoft\Windows\Start Menu(开始菜单)\Programs(程序)\StartUp(启动)目录,我们主要讲希望添加 ...
- 成员函数指针,动态绑定(vc平台)
上一篇介绍了gcc对成员函数指针做了thunk的处理,本篇介绍vc对成员函数指针如何处理,还有动态绑定相关的处理. 同样用回上一篇的例子: struct point {float x,y;}; str ...
- opencv 5 图像转换(3 重映射 仿射变换 直方图均衡化)
重映射 实现重映射(remap函数) 基础示例程序:基本重映射 //---------------------------------[头文件.命名空间包含部分]------------------- ...
- NIO流的学习以及Buffer的相关操作
NIO的使用 一).什么叫NIO? 定义:是一套新的Java I/O标准, 在java1.4中被纳入JDK中. 二).NIO的实现方法 NIO是基于块的, 以块为基本单位处理数据. 标准的I/O是基于 ...
- Java程序性能优化之性能概述
性能的基本概念 一).什么叫程序的性能? 程序运行所需的内存和时间. 二).性能的表现形式: 1).执行速度: 程序的反应是否迅速,响应时间是否足够短. 2).启动时间:程序从运行到可以处理正常业务所 ...