APNS从服务器推送通知

时间:2014-03-18 09:44:53

标签: java ios apple-push-notifications

我有用JAVA编写的网络应用程序,我想从我的服务推送通知。我无法使用来自浏览器的本地通知,因为我在iOS(平板电脑)上定位。所以我想使用APN。如果我想向设备发送消息,我需要来自此设备的令牌;)。所以我的问题是。

  1. 我如何获得此令牌?
  2. 编辑: 我不确定一件事。可以在没有任何本机解决方案的情况下获取设备的令牌。例如平板电脑连接到外部网站,做一些事情,我们想要回答使用通知。以及如何获取令牌以发送此消息。

3 个答案:

答案 0 :(得分:1)

不幸的是,在iOS设备上没有原生应用程序的情况下使用APNS是不可能的。推送通知令牌对于每个设备上的每个应用程序都是唯一的 - 因此从一个应用程序获取的令牌不能与同一设备上的另一个应用程序一起使用(此例外,来自同一开发人员的应用程序可以共享令牌)。

此外,推送通知服务依赖于开发人员使用Apple开发人员门户管理的数字证书。

最后,当推送通知发送到iOS设备时,它实际上会传送到相应的应用程序进行处理 - 因此,如果设备上没有本机应用程序,则无需处理通知。

您可以在Apple's programming guide

中详细了解APNS节目

答案 1 :(得分:0)

您可以从此方法获取设备令牌。将此方法放在appdelegate.m类中。如果您在虚拟设备(模拟器)中运行应用程序,请确保您在真实设备中运行iOS应用程序,然后找不到设备令牌,

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{
    NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSLog(@"content---%@", token);
} 

答案 2 :(得分:0)

为了获得此设备令牌ios应用程序将不得不请求注册推送通知服务,这将导致一个对话框,询问此应用程序想要向您发送通知的权限,如果iOS用户说是,则设备将注册推送通知并将提供设备令牌。

此设备令牌必须由ios app开发者发送到服务器,然后只有服务器可以使用此设备令牌并将其发送到APNS。

使用以下方法注册来自ios设备的推送通知,

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge];

如果ios用户允许说“是”,则会调用以下方法,该方法将为您提供需要发送到服务器的设备令牌,以便从服务器发布通知。

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
  NSString * deviceTokenstring = [[[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"device token :%@",deviceTokenstring);
NSURLConnection *urlConnection = [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:REMOTENOTIFICATION_URL,deviceTokenstring]]] delegate:self];
[urlConnection start];

}