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. 我的MYSQL学习心得(十三)

    原文:我的MYSQL学习心得(十三) 我的MYSQL学习心得(十三) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYS ...

  2. ACM-光滑最小生成树project——hdu1863

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  3. leetcode第36题--Sudoku Solver

    题目: Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated b ...

  4. JCronTab 定时调用

    习惯使用 unix/linux 的开发者应该对 crontab 都不陌生.Crontab 是一个很方便的用于 unix/linux 系统的任务调度命令.JCronTab 则是一款全然依照 cronta ...

  5. LinQ—扩展方法

    概述 本节主要解说扩展方法,涉及LinQ的详细知识不多. 扩展方法的描写叙述 .net framework为编程人员提供了非常多的类,非常多的方法,可是,不论.net framework在类中为我们提 ...

  6. C#如何将Build成功的程序集Copy到上一层目录

    C#Build成功后,会把Build好的程序集放到bin\Debug的目录下,如何将目录放到特定目录 例如放到bin目录下,copy "$(TargetFileName)" &qu ...

  7. KMP算法简单回顾

    前言 虽从事企业应用的设计与开发,闲暇之时,还是偶尔涉猎数学和算法的东西,本篇根据个人角度来写一点关于KMP串匹配的东西,一方面向伟人致敬,另一方面也是练练手,头脑风暴.我在自娱自乐,路过的朋友别太认 ...

  8. asp.net mvc使用validate.js验证 若name属性包含特殊字符则加上双引号即可

    rules: {                    "Can.CName": {                        required: true,          ...

  9. Apple Swift中英文开发资源

    Apple Swift中英文开发资源集锦[apple swift resources] 找到的一些Apple Swift中英文资源原文链接,希望对大家有所帮助.欢迎大家补充,原始资源链接最好! The ...

  10. Java编程思想笔记(第二章)

    第二章  一切都是对象 尽管Java是基于C++的,但相比之下,Java是一种更纯粹的面向对象程序设计语言. c++和Java都是杂合型语言(hybird language) 用引用(referenc ...