`

APNs服务客户端与Java服务端搭建

阅读更多

[iPhone ]APNs 服务

APNs --Apple Push Notification Service
(图片来源--apple 开发文档

要对做IOSAPP的码农特别推荐这个服务,相对于其它第三方框架更易于调用。

标注:APNs 苹果推送服务器
Device 安装带有推送服务程序的iPhone手机
Provider 程序服务器,把需要推送的信息发给 APNs
DeviceToken  在Device第一次连接APNs时,由APNs生成的经过加密的连接认证信息。在以后的连接中,无论时Provider到APNs还是APNs到Device 都需要 DeviceToken作为认证。
Payload  需要推送的消息的主体内容。alert-alert消息的消息体,按键标题等badge-显示在程序icon右上角的数字,sound-声音提示文件的文件名,该声音资源文件要在程序包中。

整体流程大体分为五个步骤:
1: Device --> 连接-->  APNs  获取 DeviceToken
2: Device -->连接-->  Provider 提供DeviceToken                                     
3: Provider侦测需要push的消息生成Notification信息
4:  Provider侦把要push的消息推送到APNs
5:   APNs把该消息推送到手机
     


使用方法:
为了获取deviceToken
第一步:获取认证书Certificates.p12   [注释:.p12 文件,文件名可以随便取]
该Certificates.p12 认证书 是用于服务器与APNs服务器SSL 连接时的认证,而获取p12的前提是获取APNs Assistant

1:每个程序都要在apple开发中心生成  App ID.

2:单击app id 的后面的 Configure

3: 在新的页面中,勾选Enable Push Notification Services , 而后点击Configure ,随后出现APNs Assistant,APNs助手会引导生成你的程序与APNs服务器进行SSL连接的认证书App ID specific Client SSL certificate[注释:一般文件名为“aps_developer_identity.cer” 可修改]

4:APNs助手会引导你保存SSL certificate到你的硬盘,保存好后双击,安装到你的keychain

5:  执行完以上四步,可以点击Done,关闭APNs助手。

6:启动Keychain Access程序,查看刚才安装的认证,name 为apple Development/Production  push Services。。。
导出--即获得Certificates.p12 保存好给Provider 服务器使用


第二步:iPhone 端
iPhone provisioning  以开启了PUSH功能App ID 生成相应的provisioning。

iPhone需要用到的方法函数如下:

//注册启用 push
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge /*|UIRemoteNotificationTypeSound*/)];

//用该判断 程序是不是通过push消息启动的
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

//iPhone 从APNs服务器获取deviceToken后激活该方法
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

//注册push功能失败 后 返回错误信息,执行相应的处理
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err



注意:
deviceToken的处理
[[devToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]

调测试方法:
Device
调试运行iPhone端程序,以获取deviceToken 为成功标志。

Provider
网上有个共开发测试的Provider程序:
PushMeBaby
使用的方法是,
1;拷贝注册获取的SSL certificate文件【.cer文件】重命名为 apns.cer 添加到PushMeBaby资源文件夹中
2: 运行,输入 iPhone端获取的deviceToken
3: 推送
以Device 程序获得相应消息为成功标志。
From:http://hi.baidu.com/hh20040410/item/fb6d3f9a2287448a59146177
 
服务端jar包:
bcprov-jdk16-145-1.jar
commons-io-2.0.1.jar
commons-lang-2.5.jar
javapns-jdk16-163.jar
log4j-1.2.16.jar
 
服务端代码:

import javapns.back.PushNotificationManager;
import javapns.back.SSLConnectionHelper;
import javapns.data.Device;
import javapns.data.PayLoad;

public class MainSend {
    public static void main(String[] args) throws Exception {
        try {
            // 从客户端获取的deviceToken
            String deviceToken = "3a20764942e9cb4c4f6249274f12891946bed26131b686b8aa95322faff0ad46";
            System.out.println("Push Start deviceToken:" + deviceToken);
            // 定义消息模式
            PayLoad payLoad = new PayLoad();
            payLoad.addAlert("消息推送测试!");
            payLoad.addBadge(4);
            payLoad.addSound("default");
            // 注册deviceToken
            PushNotificationManager pushManager = PushNotificationManager
                    .getInstance();
            pushManager.addDevice("iPhone", deviceToken);
            // 连接APNS
            String host = "gateway.sandbox.push.apple.com";
            int port = 2195;
            String path = "/home/pencho/workspace/apns_iphone/";
            String certificatePath = (path + "test.p12");
            // certificatePath 步骤一中生成的*.p12文件位置
            String certificatePassword = "maya";
            pushManager.initializeConnection(host, port, certificatePath,
                    certificatePassword,
                    SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
            // 发送推送
            Device client = pushManager.getDevice("iPhone");
            pushManager.sendNotification(client, payLoad);
            // 停止连接APNS
            pushManager.stopConnection();
            // 删除deviceToken
            pushManager.removeDevice("iPhone");
            System.out.println("Push End");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
分享到:
评论

相关推荐

    关于IOS_APNS推送消息(iphone端+服务端)

    总的来说,iOS APNs推送消息涉及到客户端和服务端的协同工作,需要正确配置证书,处理设备Token,以及构建和发送有效的推送消息。通过理解这个过程,开发者可以确保他们的应用能够及时、准确地向用户推送通知。

    最新java整合APNS推送服务

    Java整合APNS推送服务是将Java应用程序与Apple Push Notification Service(APNS)相结合,以便能够向iOS和tvOS设备发送即时消息。APNS是苹果公司提供的一个服务,它允许开发者在用户不打开应用的情况下,向他们的...

    Java向苹果服务器推送消息(Java实现HTTP/2协议发送APNS)

    这些库提供了与APNs交互所需的HTTP/2客户端功能。 3. **构建推送通知**:APNs通知由JSON对象组成,包含设备令牌(Device Token)、通知类型、标题、正文等字段。必须正确设置这些字段,以确保消息能够成功送达。 ...

    APNS消息推送服务端

    APNS(Apple Push ...总的来说,实现APNS消息推送服务端需要理解SSL/TLS通信、JSON格式化、错误处理以及与苹果服务器的交互规则。此外,还需要关注性能优化和用户体验设计,确保推送服务既高效又对用户友好。

    ios推送java服务端

    3. **服务端配置**: 在Java服务端,首先需要准备APNS所需的证书。这通常是一个`.p12`文件,包含了私钥和APNS证书。这个证书可以在Apple Developer Portal中创建并下载。证书文件的密码也是必要的,用于连接APNS...

    java调用apns推送的实现

    Java调用APNs(Apple Push Notification service)推送是iOS应用开发者在进行远程通知服务时常见的需求。APNs是苹果提供的一项服务,允许开发者将实时消息推送到用户的iOS设备上,如应用更新、消息提醒等。在Java...

    notnoop-java-apns.zip_com.notnoop.apns_java apns_notnoop apns_no

    在Java开发环境中,当需要构建一个能够向Apple Push Notification Service (APNS)发送推送通知的服务时,`notnoop-java-apns`是一个常用的第三方库。这个压缩包`notnoop-java-apns.zip`包含了开发者用于实现这一功能...

    java服务端推送给IOS源码

    java服务端推送消息给ios客户端,有兴趣的朋友可以看下

    IOS 消息推送 java服务端和客户端源码

    本资源提供了一个完整的Java服务端和iOS客户端的源码实现,帮助开发者理解并实践iOS消息推送的全过程。 首先,我们要了解的是苹果的Push Notification Service(APNs),这是苹果公司提供的用于向iOS、watchOS、...

    Apple推送服务(APNs)Java客户端zpush.zip

    基于netty4实现的苹果通知推送服务Java客户端。 特点: 支持第三版通知推送,即command = 2。目前的绝大部分Java客户端都只支持command = 1,即第二版。 支持SSL握手成功才返回,可以调用 ...

    dbay-apns-for-java:适用于APNS的高性能Java客户端(Apple Push Notification Service)

    因此,我决定为APNS开发一个新的Java客户端。 然后dbay-apns4j来了。 我认为这是最好的。特征高性能且易于使用快速入门演示支持连接池中英双语注释,英语小白阅读起来也没问题支持错误后重新发送通知空闲时自动创建...

    苹果ios推送java服务端耗码demo

    本篇文章将深入探讨如何在Java服务端实现与APNs的集成,为iOS应用提供推送功能。 首先,我们需要理解APNs的工作原理。APNs是苹果提供的一个基于TCP/IP协议的推送服务,它允许服务器将消息推送到已注册的iOS设备。...

    ios push java 服务端程序

    本文将深入探讨如何使用Java在服务端构建一个与APNs交互的程序,以便向iOS设备发送推送通知。 一、Apple Push Notification Service (APNs) APNs是苹果公司提供的一个服务,允许应用程序在后台向用户发送通知,即使...

    苹果Push消息Java服务端示例代码

    Javapns是一个开源的Java库,它简化了与APNs接口交互的过程。要使用Javapns,首先需要在项目中添加其依赖。如果你使用Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;com.notnoop.apns&lt;/groupId&gt; ...

    php实现的APNs服务端

    总结,通过PHP实现APNs服务端,你需要掌握证书的管理和转换、设备Token的处理、APNs的连接与消息构建、错误处理以及可能的优化策略。这个过程虽然涉及多个环节,但是一旦实现,就能为iOS用户提供实时的推送通知,...

    IOS推送JAVA服务端文档

    本文档主要关注的是如何在Java服务端实现与iOS PNS的交互,特别使用了`javaPNS2.2`这个库。 `javaPNS2.2`是一个开源的Java库,专门用于简化与Apple Push Notification Service的交互。它提供了一种方便的方式来构建...

    陌陌客户端+服务端ios源代码.zip

    - 推送服务:为了实现消息实时推送,服务端可能集成第三方推送服务如APNs(Apple Push Notification service)。 通过研究这些源代码,开发者可以学习到如何构建大规模社交应用,包括用户认证流程、数据同步机制、...

    C#实现即时通讯功能(包含客户端与服务端

    通过使用推送服务,如Apple Push Notification Service (APNS) 或者Google Firebase Cloud Messaging (FCM),可以在用户离线时通知他们新的消息。 综上所述,"MiniCommunication"项目提供了一个全面的C#即时通讯...

    IM聊服务器+客户端java源码

    - **推送通知**:对于离线消息,服务器可能需要通过推送服务(如Firebase Cloud Messaging, APNS等)将消息推送到客户端。 4. **其他技术**: - **数据库**:IM系统可能需要存储用户信息、聊天记录等,因此数据库...

    APNS通知接受客户端

    Apple Push Notification Service(APNS)是苹果公司提供的一项服务,允许开发者向其iOS、iPadOS、watchOS、macOS以及tvOS设备推送消息。APNS是应用与用户间交互的重要桥梁,尤其对于那些需要实时更新内容的应用,如...

Global site tag (gtag.js) - Google Analytics