import java.io.*;
import java.net.Socket;
import java.security.*;
import java.util.regex.Pattern;
import javax.net.ssl.*;
public class mainAPNS
{
public static void main(String[] args) {
String keyPath = "E:/etf_workspaces/etf/WebRoot/pushSource/aps_development_biz.p12";
String ksType = "PKCS12";
String ksPassword = "111111";
String ksAlgorithm = "SunX509";
//788701ef6c507b46bf09418757f63805a0f445c282e03d3054ecc61846d944f2
//cd2845988dba10064e11b0c38a91a2b8fff8e6604d58990c104f0b38ba7f894a
//String deviceToken = "788701ef6c507b46bf09418757f63805a0f445c282e03d3054ecc61846d944f2";
String deviceToken = "086947c12a637b18b3fe42deaee2297541dfd41a1b5922c71058df5af8d962f4";
String serverHost = "gateway.sandbox.push.apple.com"; //���Ի�����ַΪgateway.sandbox.push.apple.com
//�����ַΪgateway.push.apple.com
int serverPort = 2195;
try {
InputStream certInput = new FileInputStream(keyPath);
KeyStore keyStore = KeyStore.getInstance(ksType);
keyStore.load(certInput, ksPassword.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance(ksAlgorithm);
kmf.init(keyStore, ksPassword.toCharArray());
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), null, null);
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
Socket socket = socketFactory.createSocket(serverHost, serverPort);
StringBuilder content = new StringBuilder();
String text = "您关注的房子岭南雅苑65号210室这周上涨了1.5%,现在就去看一下吧!";
content.append("{\"aps\":");
content.append("{\"alert\":\"").append(text)
.append("\",\"badge\":1,\"sound\":\"")
.append("ping1").append("\"}");
content.append(",\"cpn\":{\"t0\":")
.append(System.currentTimeMillis()).append("}");
content.append("}");
byte[] msgByte = makebyte((byte)1, deviceToken, content.toString(), 10000001);
System.out.println(msgByte);
socket.getOutputStream().write(msgByte);
socket.getOutputStream().flush();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* ��װapns�涨���ֽ����� ʹ����ǿ��
*
* @param command
* @param deviceToken
* @param payload
* @return
* @throws IOException
*/
private static byte[] makebyte(byte command, String deviceToken, String payload, int identifer) {
byte[] deviceTokenb = decodeHex(deviceToken);
byte[] payloadBytes = null;
ByteArrayOutputStream boas = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(boas);
try {
payloadBytes = payload.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
try {
dos.writeByte(command);
dos.writeInt(identifer);//identifer
dos.writeInt(Integer.MAX_VALUE);
dos.writeShort(deviceTokenb.length);
dos.write(deviceTokenb);
dos.writeShort(payloadBytes.length);
dos.write(payloadBytes);
return boas.toByteArray();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
private static final Pattern pattern = Pattern.compile("[ -]");
private static byte[] decodeHex(String deviceToken) {
String hex = pattern.matcher(deviceToken).replaceAll("");
byte[] bts = new byte[hex.length() / 2];
for (int i = 0; i < bts.length; i++) {
bts[i] = (byte) (charval(hex.charAt(2*i)) * 16 + charval(hex.charAt(2*i + 1)));
}
return bts;
}
private static int charval(char a) {
if ('0' <= a && a <= '9')
return (a - '0');
else if ('a' <= a && a <= 'f')
return (a - 'a') + 10;
else if ('A' <= a && a <= 'F')
return (a - 'A') + 10;
else{
throw new RuntimeException("Invalid hex character: " + a);
}
}
}
相关推荐
在iOS应用开发中,消息推送是一项重要的功能,它允许服务器向设备发送通知,即使应用程序在后台运行或完全关闭。这个“ios 消息推送 java后端demo”是为开发者提供的一个示例,帮助理解如何使用Java后端实现对iOS...
1. **基于官方API的直接推送**:这种推送方式直接使用Apple提供的APNs API,通过SSL/TLS连接将消息推送到目标设备。开发者需要处理证书管理、连接维护以及错误处理等复杂逻辑。这种方式对服务器性能和网络条件要求较...
在iOS应用开发中,苹果提供了Apple Push Notification service (APNs) 来实现远程通知功能,即我们常说的消息推送服务。本资源提供的是一个基于C#语言实现的iOS消息推送服务后台,它允许开发者通过服务器端向iOS设备...
在iOS应用开发中,苹果提供了Apple Push Notification service (APNs) 来实现实时的消息推送功能,让应用程序在后台状态下也能接收到服务器的通知。本文将详细介绍如何使用Java编写后端来实现iOS的推送服务。 首先...
在iOS应用开发中,苹果提供了Apple Push Notification service(APNs),这是一个用于向运行iOS、iPadOS、watchOS和tvOS的设备发送推送通知的服务。本资源包含的是在Windows环境下实现APNs服务程序及其安装包的代码...
在iOS平台上,服务器推送是应用开发中的重要组成部分,它允许应用程序在后台接收来自服务器的通知,即使应用程序未处于活动状态。这种技术称为Apple Push Notification Service(APNS),它使用JSON格式的推送消息,...
3. **构建推送消息**:推送消息包含一个设备令牌(Device Token),这是每个安装了应用的iOS设备的唯一标识。还需要指定通知类型(如声音、图标角标等)、通知标题、正文以及其他自定义数据。 4. **封装请求**:将推...
本资源“IOS信息推送.NET”显然是一个使用.NET框架实现的APNs推送解决方案。这个解决方案允许开发者通过.NET代码来与APNs交互,向iOS设备发送通知。 首先,我们要理解.NET框架。这是一个由微软开发的开源、跨平台的...
在iOS开发中,为了实现应用的远程推送通知功能,开发者通常需要借助于原生推送服务。这个过程涉及到苹果的Apple Push Notification service (APNs)以及相关的库文件集成。标题"IOS原生推送依赖jar加载"指出,我们...
在iOS设备上,为了实现实时的消息推送服务,Apple提供了名为Apple Push Notification Service (APNS) 的服务。本文将深入探讨如何使用ASP.NET技术来构建iOS推送服务器端代码。 首先,理解APNS的工作原理至关重要。...
在iOS应用开发中,为了实现实时的消息推送功能,开发者通常会使用苹果的Push Notification Service(简称APNs)。APNs允许应用程序在用户未与设备交互时接收消息,例如新邮件通知、即时消息或者游戏更新等。Java开发...
在iOS应用开发中,远程推送通知(Remote Push Notification)是一项重要的功能,它允许开发者在用户不使用应用时向他们发送消息或更新。本资源“IOS远程推送php测试--ApnsPHP-master”提供了一套基于PHP的远程推送...
最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL...
在iOS应用开发中,集成MQTT(Message Queuing Telemetry Transport)协议可以帮助实现服务器与设备间的实时双向通信,尤其适用于推送消息。以下是对标题“ios手机端集成mqtt接受服务器推送消息源码”以及描述中涉及...
Java进行苹果APNS(Apple Push Notification Service)消息推送是一项在iOS和macOS应用程序中实现远程通知功能的关键技术。本文将详细介绍如何使用Java实现这一过程,同时关注`javapns`库和`bcprov-jdk`加密组件的...
在iOS应用开发中,向设备推送消息是一项关键功能,它可以让用户即使不在应用程序中也能收到新消息、通知或活动的提醒。本篇文章将详细介绍如何使用Java实现iOS的远程推送服务,主要涉及Apple Push Notification ...
APNs是苹果提供的服务,它允许开发者向运行iOS、iPadOS、watchOS、tvOS等系统的设备发送即时推送通知。当应用在后台或完全关闭时,APNs能确保用户接收到信息。 要使用C#进行APNs推送,我们需要以下几个步骤: 1. *...
在iOS开发中,推送服务是应用与用户保持互动的关键组件,尤其对于那些需要实时更新或者消息提醒的应用来说更是如此。"修改后的ios 推送源码"可能涉及到Apple的Push Notification Service (APNS)的自定义实现或者优化...
在iOS应用开发中,为了实现远程通知推送服务,开发者通常会使用Apple的Push Notification Service (APNs)。然而,对于Java后端开发者来说,与APNs进行交互并不是一个直接的过程,因为APNs使用的是二进制协议。为了...
### IOS推送(APNS)知识点详解 #### 一、概述 苹果推送通知服务(Apple Push Notification service,简称APNs)是苹果公司为iOS设备提供的一种实时推送通知服务。它允许开发者向用户的iOS设备(如iPhone、iPad和...