java 使用APNS 完成苹果推动 请教?

Friends8811 发布于 2014/06/21 18:16
阅读 855
收藏 0
就是苹果APNS服务器是通过deviceToke定位到要推送的苹果手机设备,但是苹果手机又是通过什么定位到 苹果手机上安装的app应用的,然后把消息推送到这个app应用上   这个很不明白,请哪个高手帮我解答一下,万分感谢。
加载中
0
0
自由之信
自由之信

刚做过类似的项目,所以看能不能帮到你:

1. 在app启动的时候,有一个register push notification的delegate,这个时候app向苹果手机APNS请求获得一个device token,如果APNS说,好的,然后app就得到了一个device token,实际上是一个多位的字节序列

2. 然后app就告诉你自己的push notification 服务器端代码说,嘿,我得到了一个device token,下次有消息告诉我哦,你的服务器端代码就把这个device token保存下来了

3. 然后,你的服务器push notification 代码觉得什么时间有必要告诉app什么事情的时候,就把这个信息用苹果要求的方式打包发给APNS,告诉APNS(苹果的通知服务)我想给device token是nnnnn的手机app发送一组信息

4. APNS验证一下你的certificate(这个是用你的developer ID在配置你的provision的时候申请的),确认你是合法用户,就把这个消息发送到指定的设备上

5. 这个设备上的iOS发现来了一个消息,一看device token,知道是给MMMM app的,它就显示一个通知在手机上(如果app允许接收通知),然后等用户的反应

6. 用户可以tap通知启动app,或者看完了忽略过去

7. app启动之后,开始看是不是接到了什么push notification,然后......

其实这里是使用device token来定位app的,还是使用provision certificate来确认app的?不知道apple实现的细节,不过理论上都有可能。

关于实现,其实很简单,找一个java的PNS库,为此app申请一个certificate,配置好之后,直接用就可以了,如果自己写的话,看下官方文档和例子,也很简单。

F
Friends8811
好吧,呵呵,谢谢你哦!
自由之信
自由之信
回复 @Friends8811 : 你不要担心,只要带上device token,就能够到达对方的手机,如果你的app是在前端,就可以收到一个通知给代码,代码可以相应处理,如果你的app在background,那么可能在通知中心获得通知信息,取决于用户是否打开app,还是忽略。如果用户打开app,你的app需要做一些处理
F
Friends8811
那你说我向苹果手机app应用推送数据的时候,我先从自己的服务器把要推送的数据打包并且携带deviceToken 然后发给苹果的APNS服务器,然后苹果的APNS服务器把数据推动到指定的app,是不是根据我传递的deviceToken定位到app的。
自由之信
自由之信
回复 @Friends8811 : 呵呵,是的,app每次启动都需要尝试链接APNS,然后获得一个token,然后这个token需要发给你java服务端,才能使用。
F
Friends8811
那是不是 每一个app启动的时候 都要到APNS服务器申请一个deviceToken,是吗?好像越深入理解就越理解不了。呵呵
下一页
0
自由之信
自由之信
看下这一段,https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW2,
An application must register with Apple Push Notification service for the operating systems on a device and on a computer to receive remote notifications sent by the application’s provider. Registration has three stages:

The app registers for remote notifications.
The system sets up remote notifications for the app and, if registration is successful, passes a device token to the app delegate.
The app sends its device token to the push provider.
The actions that take place during this sequence are illustrated by Figure 3-3 in “Token Generation and Dispersal.”

Device tokens can change. Your app needs to reregister every time it is launched—in iOS by calling the registerForRemoteNotificationTypes: method of UIApplication,

从官方的app的代码来看:

// Delegation methods
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
    const void *devTokenBytes = [devToken bytes];
    self.registered = YES;
    [self sendProviderDeviceToken:devTokenBytes]; // custom method
}
 
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
    NSLog(@"Error in registration. Error: %@", err);
}

这两个都是在app启动的时候,如果app调用了以下的方法来注册push notification,那么,第一个delegate,返回成功的token,第二个delegate告诉app,注册失败,而成功之后,就是把token发送到你的服务器端,通常而言,你可以用这样的处理方法,一旦app启动,那么应该从服务器端禁止push notification,一旦app转移到background状态,就在服务器端启动push notification,这个在app里面都有处理的delegate,需要服务器编写代码实现这一点。

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];


0
kakai
kakai
我前几天刚好做了,做成功了
F
Friends8811
你p12证书 是用什么做的 openssl?还是?
0
kakai
kakai
我是做服务器这边的,p12是客户端弄的
F
Friends8811
好的,谢谢这位兄弟。呵呵
kakai
kakai
就是客户端弄好后给我,我直接用的
F
Friends8811
可是消息推送给APNS服务器的时候,你需要p12证书的啊,就是客户端那边把p12证书 做好后 发给你的呗?
0
kakai
kakai
他也是照着网上的资料弄的
0
小哥2972605165
小哥2972605165
content-available  这个java代码是如何设置的呢
返回顶部
顶部