信鸽推送 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. hashMapp

    原文链接:https://www.iteye.com/topic/539465 Hashmap是一种非常常用的.应用广泛的数据类型,最近研究到相关的内容,就正好复习一下.网上关于hashmap的文章很 ...

  2. thinkphp6.0 开启调试模式以及Driver [Think] not supported

    thinkphp6.0 开启调试模式 首先确认自己是通过 composer 进行的下载,然后修改系统目录下的 .example.env 为 .env 文件 修改 config->app.php ...

  3. Kali Rolling 系统配置总结 (Updateing)

    主系统Kali Linux确实好用,继<Kali~2018安装后的配置>之后,自己又全面详细的总结了关于Kali Linux系统安装后的配置,<Kali Rolling 系统配置总结 ...

  4. Java的String类详解

    Java的String类 String类是除了Java的基本类型之外用的最多的类, 甚至用的比基本类型还多. 同样jdk中对Java类也有很多的优化 类的定义 public final class S ...

  5. 更换JDK

    1.更换JDK 1).卸载原有jdk 检查一下系统中的jdk版本 java -version 显示 java version "1.6.0_24" OpenJDK Runtime ...

  6. Js获取宽高度的归纳总结

    首先,先吓唬一下我们的小白们!在js中的描述宽高的可以细分有22种. window.innerWidth //除去菜单栏的窗口宽度 window.innerHeight//除去菜单栏的窗口高度 win ...

  7. vue—自定义指令

    今日分享—自定义指令 需要学习的点: modifiers属性的具体实例就是v-on:click.stop=”handClick” 一样,为指令添加一个修饰符. 全局指令:新建一个newDir.js i ...

  8. PHP中Redis扩展无法加载问题

    问题: 在重启php-fpm的过程中,发生了如下的错误,redis.so无法载入 1 2 3 4 [root@brand009 modules]# /usr/sbin/php-fpm /usr/sbi ...

  9. Mysql 添加字段 修改字段 删除字段

    1.添加字段(alter.add) mysql> alter table users add name varchar(30) not null after id; 2.修改字段(alter.m ...

  10. IT人该如何未雨绸缪,不断提升自己的竞争力?同时尽量避免风险?

    人会慢慢变老,变老后精力,记忆力乃至身体会慢慢变差,这是无法逆转的自然规律.随之会产生的是对中年危机的忧虑乃至恐惧,比如担心能力精力不及年轻人,从而导致收入锐减乃至失业. 对此我有如下三点不解.第一, ...