1 创建 payloads

javaPNS提供了很多简单易用的通知方式(Push类里的alert,badges,sounds等)这些让你不用自己处理payload.但是我们的程序可能需要复杂的推送信息,因此我们可以通过payload来定制推送信息:


public void send (List<Device> devices, Object keystore, String password, boolean production) {
 
       /* Build a blank payload to customize */ 
        PushNotificationPayload payload = PushNotificationPayload.complex();

/* Customize the payload */ 
        payload.addAlert("Hello World!");
        payload.addCustomDictionary("mykey1", "My Value 1");
        payload.addCustomDictionary("mykey2", 2);
        // etc.
 
       /* Push your custom payload */ 
        List<PushedNotification> notifications = Push.payload(payload, keystore, password, production, devices);

}

2 发送大量通知(多线程)

javaPNS包含了用于安全高效的发送大量数据的多线程方法,通过下面的代码可以给大量设备发送推送消息


public void send (List<Device> devices, Object keystore, String password, boolean production) {
 
       /* 准备一个简单的通知 */ 
        PushNotificationPayload payload = PushNotificationPayload.alert("Hello World!");
 
       /* 指定需要多少线程发送 */ 
        int threads = 30;

/* 启动线程并发送 */ 
        List<PushedNotification> notifications = Push.payload(payload, keystore, password, production, threads, devices);
}

注意:上面的多线程发送方法只会在所有线程都发送完成后返回一次给notifications,如果你不想等待直到发送完毕,那么就新开一个线程执行上面的操作吧

3生成推送队列(连接池)

javaPNS支持使用队列(连接池)的方式。此队列是一个由多个连接至APNS服务器线程的集合,他们可以实时的将消息推送至APNS。下面是创建连接池的代码


public void send (String token, Object keystore, String password, boolean production) {
 
       /* 准备一条push信息 */ 
        PushNotificationPayload payload = PushNotificationPayload.alert("Hello World!");
 
       /* 指定线程数*/ 
        int threads = 30;

/* 建立队列 */ 
        PushQueue queue = Push.queue(keystore, password, production, threads);
 
       /* Start the queue (所有的线程和连接将被初始化) */ 
        queue.start();
 
       /* 添加一个推送信息 */ 
        queue.add(payload, token);
}

我们可以通过PushQueue的getPushedNotifications() 方法来获取返回信息。

如果你不手动启动此队列,它将会在第一次调用add方式时自动启动

4更灵活的发送方式

 javaPNS可以使用下面这种更灵活的方式发送通知:


public void send (List<Device> devices, Object keystore, String password, String appleHost, int applePort) {
 
       /* 指定服务器信息 */ 
        AppleNotificationServer customServer = new AppleNotificationServerBasicImpl(keystore, password, ConnectionToAppleServer.KEYSTORE_TYPE_PKCS12, appleHost, applePort);

/* 创建一个简单的payload */ 
        PushNotificationPayload payload = PushNotificationPayload.alert("Hello World!");
 
       /* 创建一个 push notification manager */ 
        PushNotificationManager pushManager = new PushNotificationManager();

/* 初始化连接 */ 
        pushManager.initializeConnection(customServer);
 
       /* 推送消息并获得结果*/ 
        List<PushedNotification> notifications = pushManager.sendNotifications(payload, devices);
 
}

javaPNS进阶-高级推送技巧的更多相关文章

  1. iOS原生推送(APNS)进阶iOS10推送图片、视频、音乐

    代码地址如下:http://www.demodashi.com/demo/13208.html 前言 我们首先要在AppDelegate里面进行iOS的适配,可以参考这篇文章 iOS原生推送(APNS ...

  2. Android推送进阶课程学习笔记

    今天在慕课网学习了Android进阶课程推送的server端处理回执的消息 . 这集课程主要介绍了,当server往client推送消息的时候,client须要发送一个回执回来确认收到了推送消息才算一 ...

  3. iOS 10 消息推送(UserNotifications)秘籍总结(一)

    前言 之前说会单独整理消息通知的内容,但是因为工(就)作(是)的(很)事(懒)没有更新文章,违背了自己的学习的初衷.因为互联网一定要有危机意识,说不定眼一睁,我们就out丢了饭碗. 图片来源网络.jp ...

  4. hbuilder APP服务器端(C#)推送

     实现推送有多种方法和技术手段,我这边是使用三方“个推”去实现对特定用户的推送.我自己是关联业务,对下一步任务代办人进行消息通知.   1 .个推账号申请和配置 1.1.IOS需要推送证书 参考网址: ...

  5. 利用javapns对IOS进行推送

    start package com.jynine.javapns; import java.io.FileNotFoundException; import java.io.IOException; ...

  6. 【技巧】解决win10的1803版本下,无法收到1809推送、从而无法更新到1903版本的问题。

    figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...

  7. Github学习进阶-初露锋芒,通过命令行将本地git仓库推送到Github上面的仓库

    前提: 1. 需要安装git 客户端.  能打开 git  bash 命令行窗口. 2. 生成了ssh 秘钥,并添加到了Github上面. 一.在Github上面建立一个git仓库. 点击 + 号,在 ...

  8. dotnet core使用IO合并技巧轻松实现千万级消息推送

    之前讲述过多路复用实现单服百万级别RPS吞吐,但在文中有一点是没有说的就是消息IO合并,如果缺少了消息IO合并即使怎样多路复用也很难达到百万级别的请求响毕竟所有应用层面的网络IO读写都是非常损耗性能的 ...

  9. iOS 进阶---推送通知之本地通知

    1.推送通知的2种方式 1)本地推送通知(Local Notification) 2)远程推送通知(Remote Notification) 2.通知的作用 可以让不在前台运行的app,告知用户app ...

随机推荐

  1. Java-DES算法加密解密工具类

    import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import ...

  2. [翻译]在Django项目中添加谷歌统计(Google Analytics)

    原文:<Google Analytics tracking code into Django projects, the easy way> 对我来说,制作一个可扩展的Django应用随时 ...

  3. Grub启动配置文件

    和许多其他linux发行版一样,Fedora使用Grub作为32位和64位X86系统的启动加载器(bootloader).grub的配置文件主要是/boot/grub/grub.conf,而/boot ...

  4. 淘宝code

    淘宝code 相信大家都听说过GitHub,也有很多人在用,但是GitHub毕竟在国外,速度不是很给力,而且安装过程也是很漫长.今天来给大家介绍一个国内的免费的开源项目平台,当然也是一个SVN版本控制 ...

  5. leetcode[159] Longest Substring with At Most Two Distinct Characters

    找到最多含有两个不同字符的子串的最长长度.例如:eoeabc,最长的是eoe为3,其他都为2. 思路: 用p1,p2表示两种字符串的最后一个出现的下标位置.初始p1为0. p2为-1.start初始化 ...

  6. 异步陷阱之IO

    异步陷阱之IO篇 很多教程和资料都强调流畅的用户体验需要异步来辅助,核心思想就是保证用户前端的交互永远有最高的优先级,让一切费时的逻辑通通放到后台,等到诸事完备,通知一下前端给个提示或者继续下一步.随 ...

  7. java在string和int相互转化

    1 如何串 String 转换成整数 int? A. 有两种方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([St ...

  8. Android借助Application重写App的Crash(简易版)

    MainActivity如下: package cn.testcrash; import android.app.Activity; import android.os.Bundle; /** * D ...

  9. ThoughtWorks Merchant's Guide To The Galaxy

    ThoughtWorks笔试题之Merchant's Guide To The Galaxy解析 一.背景 在某网站上看到ThoughtWorks在武汉招人,待遇在本地还算不错,就投递了简历.第二天H ...

  10. PHP中判断输入验证码是否一致

    首先用session将随机生成的验证码的值传到页面,然后获取当前文本框中输入的值  进行对比:代码如下: 生成的随机数,把它传到session里面 <? session_start();   必 ...