`

编写push notification之服务器端发送通知(转)

 
阅读更多

编写push notification之获取device token中拿到device token以后,需要把token字符串发送给应用的服务器端,即provider。

provider将token号、通知内容、通知形式(比如是否弹出提示窗口、是否发声等)发送给苹果的服务器(apns)。

最简单的provider实现,其实就是通过证书,和苹果服务器建立安全连接(tsl或ssl),通过认证建立连接后,向苹果服务器发送符合苹果要求的数据流。

获得证书

苹果提供两种接入方式的证书:

  • developer,用于测试
  • production,用于产品

 

如果是内部测试,使用developer方式即可。

下载证书,通过ios provisioning portal:

image

这要求:

  • 登录的apple developer program帐号必须是级别最高的agent(这是针对企业帐号来说的,如果是个人帐号就无所谓了),agent帐号即创始帐号,否则看不到configure链接;
  • 必须经过configure操作,已经enable了developer和product。

然后进入configure链接,点击download按钮即可:

image

 

 

处理证书

如果是编写在mac下跑的objc程序,无需对证书做处理,可跳过这一步。

如果是在java下使用,需要把打证书用的私有专用密钥和上述的支持通知的证书(注意,不是iphone developer证书)合并导出。

image

生成证书:

image

点击存储的时候,会提示生成一个文件密码:

image

当然可以密码为空。

之后会提示:

image

这里需要输入mac登录用户的密码。

文件生成。

编写发送通知的实例

 

 

如果是编写mac代码,有一个现成的项目可用:http://stefan.hafeneger.name/download/PushMeBabySource.zip

导入到xcode中,只需将:

image

deviceToken填写成设备的token字符串,另外,pathForResource改为上面图中的:

aps_developer_identity

另外,要把刚才获得证书步骤中下载的证书复制到xcode项目Resources目录下:

image

可以看到文件名和上面的pathForResource的参数一致。

之后运行程序就可以在设备上收到推送通知。

如果是用java编写,可以用第三方库,见:

http://code.google.com/p/javapns/

编写简单的发送通知代码:

import org.json.JSONException;

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

public class Main {

    /** 
     * @param args 
     * @throws Exception 
     */ 
    public static void main(String[] args) throws Exception { 
         PayLoad simplePayLoad = new PayLoad(); 
        // Get PushNotification Instance 
         PushNotificationManager pushManager = PushNotificationManager.getInstance(); 
         // Link iPhone’s UDID (64-char device token) to a stringName 
         pushManager.addDevice("iPhone", "00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 "); 
         simplePayLoad.addAlert("My alert message测试"); 
         simplePayLoad.addBadge(1); 
         simplePayLoad.addSound("default"); 
         Device client = PushNotificationManager.getInstance().getDevice("iPhone"); 
         PushNotificationManager.getInstance().initializeConnection("gateway.sandbox.push.apple.com", 2195, "/home/ubuntu/mypush.p12", "password", SSLConnectionHelper.KEYSTORE_TYPE_PKCS12); 
         PushNotificationManager.getInstance().sendNotification(client, simplePayLoad);

 

测试中文没有乱码问题。

编写比较复杂的使用示例(可以控制通知是否有提示窗口、是否有提醒声音):

  • aPayload.addBadge( 2),显示在手机应用图标上的数字
  • aPayload.addAlert("软件版本有更新"),显示提示窗口文字
  • aPayload.addSound("default.wav"),指定提示声音

另外,也可以使用php的第三方实现,比如:

http://code.google.com/p/php-apns

基本原理是启动一个php服务,监控memcacheq队列,如果有消息就发送给苹果服务器。

 

转载自:http://www.cnblogs.com/iphone-crash/archive/2011/08/13/2137431.html

分享到:
评论

相关推荐

    iOS push notification 文档

    本文档将详细介绍如何在iOS应用程序中使用Push Notification,包括工程的编写和服务器端的介绍。 一、创建SSL证书 为了使用Push Notification,需要创建一个App ID和关联的SSL证书。SSL证书是用于加密和身份验证的...

    苹果push的服务器端源码

    "苹果PUSH的服务器端源码"提供了实现这一功能的后端代码,主要使用Objective-C和C++语言编写。这个源码包可能包含以下关键知识点: 1. **苹果推送通知服务(APNs)**:Apple Push Notification service 是苹果提供...

    Laravel开发-laravel-push-notification

    "laravel-push-notification"项目是针对Laravel框架的一个扩展包,专门用于向移动设备发送推送通知,支持Apple Push Notification (APN)服务和Google Cloud Messaging (GCM)服务,这两种服务分别用于iOS和Android...

    ios移动社交app的客户端+webservice服务器端源码

    - **通知推送**:使用APNs(Apple Push Notification service)发送消息通知,保持用户互动。 4. **ColorsTrip相关**: - ColorsTrip可能是应用的名称,也可能代表某种特定功能,如多彩旅行分享、颜色主题等,...

    Android-Push-Notifications-master_androidnotification_

    9. **消息分发与推送**: 在服务器端,开发者需要编写代码来发送FCM消息。这通常通过调用FCM API或使用第三方库如Firebase Admin SDK完成,需要提供设备的FCM令牌和要发送的消息内容。 10. **测试与调试**: 使用...

    推送通知服务PushNotificationDem

    这种服务允许服务器端向客户端发送数据,即使应用在后台或完全关闭状态下也能接收到信息。这对于提供实时更新、提醒用户新消息或者活动的应用来说至关重要。 在Windows Phone 7平台上,微软提供了通知服务称为...

    Push Notifications by Tutorials (Swift 4.2)

    这种服务基于Apple Push Notification service (APNs),由服务器端发送,客户端接收。 在Swift 4.2中,实现推送通知涉及以下几个关键概念: 1. **注册推送通知**:应用必须先向APNs注册,获取设备令牌(Device ...

    simple Push

    3. **构建推送消息**:在服务器端,比如这里的“simplePush.php”,编写代码来构建推送消息,包括设备Token、通知内容、通知类型等。 4. **发送推送**:使用构建好的消息和证书,通过HTTP/2或WebSocket接口与APNs...

    Push Notifications by Tutorials v2.zip

    8. **远程通知的发送**:服务器端需要集成Apple Push Notification service (APNs)接口来发送推送通知。这通常涉及到获取设备的APNs令牌,并将其发送给服务器,以便服务器能够准确地向指定设备发送通知。 9. **静默...

    javapush消息推送

    4. **消息构建与分发**:在服务器端,开发者需要编写Java代码来构建推送消息,包括设置消息类型、标题、内容、目标设备等信息。然后,服务器会根据消息的目标设备类型选择对应的消息协议进行发送。 5. **客户端处理...

    E4A配合易语言服务器发送推送消息例子源码

    标题中的“E4A配合易语言服务器发送推送消息例子源码”揭示了这是一个关于使用E4A(Easy4Android)和易语言开发的服务器端配合实现消息推送的示例项目。这个项目的主要目的是教给开发者如何在Android应用程序中集成...

    uni-app 中使用uni push的demo

    (2) API推送:开发者也可以通过调用uni.push.send接口发送推送,例如在服务器端使用HTTP API或者在客户端通过uni.request发送请求。 4. 消息类型与格式: uni-push支持自定义消息(data message)和通知消息...

    php ios push 脚本

    在IT行业中,推送服务是移动应用开发者不可或缺的一部分,特别是对于iOS平台的应用,为了实时通知用户,需要使用苹果的Push Notification Service(简称APNs)。而PHP作为广泛应用的服务器端脚本语言,可以用来创建...

    push-notification-demo

    8. **推送服务器**:实际的推送消息通常由服务器端通过Web Push协议发送。这可能涉及到第三方服务,如Firebase Cloud Messaging (FCM) 或者VAPID (Verifier Applications are Publicly Identified) 机制。 在这个...

    Java_React Native本地和远程通知.zip

    2. **配置推送服务**:对于远程通知,开发者需要在服务器端配置推送证书和服务端接口,以便发送推送消息。 3. **事件处理**:无论本地还是远程通知,应用都需要处理用户交互,如点击通知后打开特定页面。这通常涉及...

    Push_Notifications_by_Tutorials_v1.0 (Ray Wenderlich 出品)

    **推送通知**是一种服务器端向客户端发送消息的技术。在iOS中,这通常涉及到Apple Push Notification Service (APNs)。对于开发者而言,正确地集成和管理推送通知是提升用户参与度、提高应用留存率的关键手段之一。 ...

    push-notification-demo:演示如何使用Firebase接收通知

    将此密钥添加到你的服务器端代码,以便当有新消息时,服务器可以发送消息到Firebase。 在React客户端,你需要监听FCM的事件以处理通知。这包括在用户设备上注册令牌,以及处理接收到的通知: ```javascript const ...

    app-push:该项目向移动应用程序发送通知

    例如,使用Java编写的服务器可以与Google的Firebase Cloud Messaging (FCM) 或Apple的Push Notification Service (APNs) 进行交互,发送消息到目标设备。 4. **使用Firebase Cloud Messaging (FCM)** FCM是Google...

    IOS消息推送总结

    在iOS平台上,Apple Push ...总之,iOS消息推送涉及多个环节,包括APNs服务的理解、证书的创建与管理,以及客户端代码的编写和服务器端的配合。掌握这些知识点,开发者就能够为iOS用户提供无缝、高效的推送通知体验。

    ios 推送通知(转载)

    这种服务由Apple Push Notification service (APNs) 提供,用于实时地将服务器端的消息传递到用户的iOS设备。本文将深入探讨iOS推送通知的工作原理、实现流程以及相关的开发工具。 1. **工作原理**: - APNs 是...

Global site tag (gtag.js) - Google Analytics