【问题标题】:APNS push notification from server来自服务器的 APNS 推送通知
【发布时间】:2014-04-23 21:44:33
【问题描述】:

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

  1. 如何获得此令牌?

编辑: 我没有精确的一件事。无需任何本机解决方案即可获得设备的令牌。例如平板电脑连接到外部站点,做某事,我们想使用通知来回答。以及如何获取发送此消息的令牌。

【问题讨论】:

    标签: java ios apple-push-notifications


    【解决方案1】:

    很遗憾,如果没有 iOS 设备上的本机应用程序,就无法使用 APNS。推送通知令牌对于每个设备上的每个应用程序都是唯一的 - 因此从一个应用程序获得的令牌不能与同一设备上的另一个应用程序一起使用(但有一个例外,来自同一开发人员的应用程序可以共享一个令牌)。

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

    最后,当推送通知发送到 iOS 设备时,实际上是传递到相应的应用程序进行处理 - 所以如果设备上没有原生应用程序,则没有任何东西可以处理通知。

    您可以在Apple's programming guide获取有关APNS编程的详细信息

    【讨论】:

    • 那么该设备不可能获取令牌并发送到服务器和服务器使用此令牌发送通知?一切都没有原生 iOS 应用程序。
    • 没有。 APNS 需要与 iOS 设备上的本机应用程序通信。如果没有应用程序,则无需注册通知,也无需接收通知。
    【解决方案2】:

    为了获得这个设备令牌,iOS 应用程序必须请求注册推送通知服务,这将导致一个对话框询问是否允许该应用程序向您发送通知,如果 iOS 用户说是,那么设备将注册推送通知,并将提供一个设备令牌。

    此设备令牌必须由 ios 应用程序开发人员发送到服务器,然后只有服务器才能使用此设备令牌并将其发送到 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];
    
    }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 哦,我没有说清楚。我必须在没有任何本机解决方案的情况下得到这个。这一切都必须通过浏览器和http来解决。
      • 表示你不想使用这个方法。我认为除了它之外没有其他方法可以获取设备令牌。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      相关资源
      最近更新 更多