信鸽推送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
随机推荐
- javascript 字符串转化成函数执行
javascript 字符串转化成函数执行<pre>function func_abc(){ alert('a');}var str = "func_abc";eval ...
- python 快速发送大量邮件
因为公司需求,需要发送千万封级别邮件. # coding:utf-8 import csv import smtplib from email.mime.text import MIMEText im ...
- ASP.NET Core 1.0: 指定Static File中的文件作为default page
指定一个网站的default page是很容易的事情.譬如IIS Management中,可以通过default page来指定,而默认的index.html, index.htm之类,则早已经被设置 ...
- 分享使用PHP开发留言板
首先我不是一名开发人员,只是一名小小的运维工程师,PHP是我自己喜欢的一门开发语言,所以我偶尔也会敲一些代码,写一些案例.今天我给大家分享的是使用PHP开发的留言板,留言板功能不全所以请大家见谅,也不 ...
- 易语言 史诗级Json处理 烁_Json模块!!!!
大家好,我是键盘上的魔手 * “************************”* “** 欢迎使用烁Json模块 **”* “** 作者:键盘上的魔手 **”* “** 微信号:codervip ...
- nyoj 113-字符串替换 (python replace, try ... except)
113-字符串替换 内存限制:64MB 时间限制:3000ms 特判: No 通过数:31 提交数:71 难度:2 题目描述: 编写一个程序实现将字符串中的所有"you"替换成&q ...
- [UWP]用Win2D实现镂空文字
1. 前言 之前用PointLight做了一个番茄钟,效果还不错,具体可见这篇文章: [UWP]使用PointLight并实现动画效果 后来试玩了Win2D,这次就用Win2D实现文字的镂空效果,配合 ...
- flexpaper跨服务器访问swf不显示问题
在项目中使用flexpaper.html在线预览时,发现文件存放在本地localhost能访问,在服务器上的无法访问,通常报错“loadswf() is not defined” 研究发现是跨域问题导 ...
- Linux配置SSH和Xshell连接服务器
>>>>>Ubuntu安装和配置ssh教程 SSH分为客户端 openssh-client 和服务器 openssh-server,可以利用以下命令确认电脑 上是否安装了 ...
- 剑指Offer-27.字符串的排列(C++/Java)
题目: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输入 ...