首先mac下有很多现在的测试iOS推送软件,为什么要用java程序测试呢;

因为大多数后台推送服务可能是JAVA开发的,那么为了验证我们在MAC上导出的推送证书文件是否正确;

制作开发证书的iOS开发人员,应当用JAVA自测来保证导出的p12推送证书文件是正确的;

1. iOS开发人员从mac钥匙串导出p12格式的推送证书;

2. mac环境配置java

首先安装java,很简单从官方下载dmg格式的java sdk,安装即可;

测试程序需要一些java的库,即jar包;以下我测试ok用到的jar包,

可直接百度对就的名字下载,或从对应的官网下载:大致用到 jackson,javapns,log4j 这三个包

  jackson-core-2.9.9.jar

  javapns-jdk16-2.4.0.jar

  apache-log4j-2.12.0.jar(这个可能是好几个log4j的jar)

3. 安装依赖的jar包

mac下java的包安装目录在  /Library/Java/Extensions/

我们把上面下载的jar包 放在上面目录即可;

4. 测试的java程序代码

import java.util.ArrayList;
import java.util.List;
import javapns.devices.Device;
import javapns.devices.implementations.basic.BasicDevice;
import javapns.notification.AppleNotificationServerBasicImpl;
import javapns.notification.PushNotificationManager;
import javapns.notification.PushNotificationPayload;
import javapns.notification.PushedNotification; /***
* 依赖的jar包有
jackson-core-2.9.9.jar
javapns-jdk16-2.4.0.jar
apache-log4j-2.12.0.jar
*
* //mac下安装的路径到 /Library/Java/Extensions/目录下
*
* //测试 javac PushMsg.java java PushMsg
*
*/ public class PushMsg {
public static void main(String[] args) throws Exception { System.out.println("zsl==========开始推送消息");
int badge = 1; // 图标小红圈的数值
String sound = "default"; // 铃音
// 要推送的,手机设备token号
String deviceToken = "753c86b495613089f02dcd3f735f0ada9e2d40f84c0a6360802ea57e55f43b8x";
// 这里是要推送的测试消息
String message = "test push message to ios device"; List<String> tokens = new ArrayList<String>();
tokens.add(deviceToken); // java必须要用导出p12文件 ,php的话是pem文件
// 注意证书是生产环境还是测试环境
String certificatePath = "./APNS_iOS_3.p12";
// 从mac钥匙串,导出证书时设置的密码
String msgCertificatePassword = "1"; boolean sendCount = true; PushNotificationPayload payload = new PushNotificationPayload();
payload.addAlert(message); // 消息内容
payload.addBadge(badge);
payload.addCustomDictionary("uid", "haahi");
payload.addCustomDictionary("type", 12);
payload.addCustomDictionary("title", "haahi");
payload.addSound("default.caf");// 铃音 PushNotificationManager pushManager = new PushNotificationManager();
// true:对应iOS生产环境推送 false:对应iOS测试环境推送
pushManager.initializeConnection(new AppleNotificationServerBasicImpl(certificatePath, msgCertificatePassword, true));
List<PushedNotification> notifications = new ArrayList<PushedNotification>();
// 开始推送消息
if (sendCount) {
Device device = new BasicDevice();
device.setToken(deviceToken);
PushedNotification notification = pushManager.sendNotification(device, payload, false);
notifications.add(notification);
} else {
List<Device> devices = new ArrayList<Device>();
for (String token : tokens) {
devices.add(new BasicDevice(token));
}
notifications = pushManager.sendNotifications(payload, devices);
} List<PushedNotification> failedNotification = PushedNotification.findFailedNotifications(notifications);
List<PushedNotification> successfulNotification = PushedNotification
.findSuccessfulNotifications(notifications);
int failed = failedNotification.size();
int successful = successfulNotification.size();
System.out.println("zsl==========成功数:" + successful);
System.out.println("zsl==========失败数:" + failed);
pushManager.stopConnection();
System.out.println("zsl==========消息推送完毕");
}
}

  

代码里面都有注释

需要的注意的是 上面推送手机的token,推送证书的路径,推送证书的密码,推送证书类型生产还是测试;

5. 运行测试

在mac终端下先用javac编译

javac PushMsg.java

然后运行生成的PushMsg.class

java PushMsg

在终端看日志,以及手机接收到通知来验证;

ccMBP:20190726javaPush cc$ javac PushMsg.java
ccMBP:20190726javaPush cc$ java PushMsg
zsl==========开始推送消息
ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
zsl==========成功数:1
zsl==========失败数:0
zsl==========消息推送完毕

  

推送代码参考:https://www.jianshu.com/p/7a9f544a1ae3

mac下使用java测试iOS推送的更多相关文章

  1. phonegap + Framework7 之 ios 推送跳转测试

    先说说项目情况:使用phonegap创建的ios项目,然后在使用html + css开发网页中又使用了一个框架Framework7(Framework7是一个构建仿原生ios和android应用的框架 ...

  2. IOS 推送消息 php做推送服务端

    IOS推送消息是许多IOS应用都具备的功能,最近也在研究这个功能,参考了很多资料终于搞定了,下面就把步骤拿出来分享下: iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPh ...

  3. “iOS 推送通知”详解:从创建到设置到运行

    这是一篇编译的文章,内容均出自Parse.com的iOS开发教程,同时作者还提供了视频讲解.本文将带领开发者一步一步向着iOS推送通知的深处探寻,掌握如何配置iOS推送通知的奥义. 介绍一点点背景资料 ...

  4. iOS推送 再备

    这是一篇编译的文章,内容均出自Parse.com的iOS开发教程,同时作者还提供了视频讲解.本文将带领开发者一步一步向着iOS推送通知的深处探寻,掌握如何配置iOS推送通知的奥义. 介绍一点点背景资料 ...

  5. 一步一步教你做ios推送

    最近在研究ios的推送问题,遇到了一些问题,最终整理了一下.放在这里和大家分享 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 Provider就是我们自己程序的后台服 ...

  6. 手把手教你搞定个推iOS推送SDK集成

    以下是一位开发者在集成个推iOS推送SDK过程中的真实经历. 作者:Ezreallp 一次偶然的机会,公司的项目要用到推送,我自己本来就很懒,不愿意去弄整套APNS的流程,刚好之前跟朋友聊起过他们的产 ...

  7. 友盟iOS推送配置(从真机调试到推送)

    下面我来讲解一下友盟iOS的推送配置,其实友盟只是一个示例,换做其余的第三方推送服务也会适用,只是第三方的后面服务变了而已. iOS推送(包括真机调试)所需要的步骤和文件如下: 备注:这里我将省略掉一 ...

  8. 利用pyapns进行ios推送

    ios客户端的同事提供了2个证书,分别是aps_development.cer  和 pushdevelopment.p12, 我最终目的就是把这2个证书合并成1个pem证书,然后通过pyapns进行 ...

  9. iOS 推送证书的制作

    关于iOS推送证书的P12文件,并非直接从KeyChain导出来的证书文件.而是须要经过openSSL工具制作的.(好在Mac OS 默认就有openSSL命令) 针对不同的Server平台,须要的证 ...

随机推荐

  1. SAP CDS重定向视图和直接读这两者场景的性能比较

    A very rough performance comparison is performed in ER9/001. Comparison scenario The two below opera ...

  2. Kafka Streams开发入门(5)

    1. 背景 上一篇演示了split操作算子的用法.今天展示一下split的逆操作:merge.Merge算子的作用是把多股实时消息流合并到一个单一的流中. 2. 功能演示说明 假设我们有多个Kafka ...

  3. Golang: 并发抓取网页内容

    在上一篇中,我们根据命令行的 URL 参数输入,抓取对应的网页内容并保存到本地磁盘,今天来记录一下如何利用并发,来抓取多个站点的网页内容. 首先,我们在上一次代码的基础上稍作改造,使它能够获取多个站点 ...

  4. .Net Core 2.2 发布IIS遇到的那些坑

    这两天在研究.Net Core 发布iis总结一下. 我主要是参照官方文档: https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/ ...

  5. rest framework 之序列化

    一.示例 restful work 的序列号就类似于 Django 的 Form 表单. 1.api/urls.py from django.urls import path, re_path fro ...

  6. Java httpclent请求httpclentUtils工具类

    第一种写法: import java.io.IOException; import java.io.InterruptedIOException; import java.io.Unsupported ...

  7. jmeter 实现登录参数化

    业务场景 在测试过程中,一般需要模拟不同的用户登录,这样压测的数据比较平均,也能更好的模拟真实的压力情况. 如果使用同一个用户账号进行测试,那么比如在查询代办的时候,此人的待办太多,也不符合实际的情况 ...

  8. 联想ideapad-330C 在Ubuntu18.04 上安装Realtek 8821CE无线网卡驱动

    在新买的联想ideapad-330C笔记本上,安装Ubuntu 18.04后,悲催的发现,没有无线网络,幸好有线还能用,然后网上搜一波,发现不少人遇到这种问题,也有人给出解决方案 参考的链接: Thi ...

  9. kubelet 预留system、kube资源

    kubelet 预留system.kube资源 Kubernetes 的节点可以按照 Capacity 调度.默认情况下 pod 能够使用节点全部可用容量.这是个问题,因为节点自己通常运行了不少驱动 ...

  10. Buuctf-------WEB之easy_tornado

    1.给了三个提示 flag在/fllllllllllllag这里 Render+tornado这两个东西,显然是python web 根据提示flag所在文件夹,加上路径去访问,发现无法访问,被跳转到 ...