我怎样才能实现在iOS应用苹果推送通知服务?(How can I implement Apple P

2019-06-24 06:50发布

有没有说明如何整合所有样本项目APNSIPhone ,以及如何获得deviceToken?

Answer 1:

有你需要遵循几个简单的步骤:

  1. 在您的应用程序委托的didFinishLaunchingWithOptions您应该为远程注册通知。 注意到,苹果的单证表明每个应用程序运行,因为令牌可以随时改变时间注册。 通过调用做到这一点:

     [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound]; 
  2. 在应用程序委托将被调用这已经通过令牌登录远程通知的方法之后,你需要实现应用程序委托此方法并发送令牌到你的服务器(即会向您发送通知)。 该方法是这样的:

     - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ NSLog(@"device token is: %@",deviceToken); [server sendToken:deviceToken]; } 

你也应该实现这个还有:

    -(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{}
  1. 你需要,一旦你让他们来处理通知。 还有在你处理收到的通知(应用程序在后台或前台等),用于处理通知,如果应用程序是在前台当你收到它应该在应用程序的委托实施的方法,几个不同的方案。 就是这个:

     -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{ NSLog(@"received notification"); //handle the notification here } 

要了解更多有关用户信息结构和覆盖所有仔细阅读不同的场景http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html 。 这只是事情的要点:)



Answer 2:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 // Register for Push Notitications, if running on iOS 8
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0){
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
    [[UIApplication sharedApplication] registerForRemoteNotifications];
 }else{
    [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
}
  return YES;
}
#pragma mark
#pragma mark -- Push Notification Delegate Methods
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:   (UIUserNotificationSettings *)notificationSettings{
//register to receive notifications
[application registerForRemoteNotifications];
}
-(void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{
// Prepare the Device Token for Registration (remove spaces and < >)
 NSString* devToken = [[[[deviceToken description]
              stringByReplacingOccurrencesOfString:@"<"withString:@""]
             stringByReplacingOccurrencesOfString:@">" withString:@""]
            stringByReplacingOccurrencesOfString: @" " withString: @""];
NSLog(@"My token is: %@", devToken);
}
-(void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error{
//  NSLog(@"Failed to get token, error: %@", error);
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
NSLog(@"%s..userInfo=%@",__FUNCTION__,userInfo);
/**
 * Dump your code here according to your requirement after receiving push
 */
 }


Answer 3:

以下是有关简要文件 - 如何启用和iOS中发送推送通知。

启用推送通知

在建立推送通知的第一步是使在Xcode 8的功能为您的应用程序。 只要进入该项目的编辑为您的目标,然后单击功能选项卡上。 寻找推送通知和它的值切换至ON:

切换能力

Xcode中应显示两个复选标记表明该功能被成功启用。 在幕后,Xcode创建在开发者中心的应用程序ID并启用推送通知服务,为您的应用程序。

注册设备

设备需要被唯一标识,接收推送通知。

安装您的应用程序的每个设备是由您可以使用在任何给定的时间来推动它的APN分配一个唯一的设备令牌。 一旦设备已经被分配一个唯一令牌,它应该在你的后端数据库持久化。

样本设备令牌是这样的:

5810F4C8C2AF5F7 F7 D6AF71A 22745D0FB50DED 665E0E882 BC5370D9CF0A F19E16  

要请求设备标识当前设备,开放AppDelegate.swift并添加以下的didFinishLaunchingWithOptions回调函数,返回语句之前:

// iOS 10 support
if #available(iOS 10, *) {  
    UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]){ (granted, error) in }
    application.registerForRemoteNotifications()
}
// iOS 9 support
else if #available(iOS 9, *) {  
    UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil))
    UIApplication.shared.registerForRemoteNotifications()
}
// iOS 8 support
else if #available(iOS 8, *) {  
    UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil))
    UIApplication.shared.registerForRemoteNotifications()
}
// iOS 7 support
else {  
    application.registerForRemoteNotifications(matching: [.badge, .sound, .alert])
}

在iOS系统10,一个新的框架,叫做UserNotifications介绍并必须按顺序访问UNUserNotificationCenter类进口。

以下import语句添加到AppDelegate.swift的顶部:

import UserNotifications 

接下来,进入项目编辑器为你的目标,并在常规选项卡,查找链接的框架和库部分。

点击+并选择UserNotifications.framework:

接下来,添加在AppDelegate.swift以下回调时的APN已任一注册成功或失败的注册设备接收通知,这将被调用:

// Called when APNs has assigned the device a unique token
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {  
    // Convert token to string
    let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})

    // Print it to console
    print("APNs device token: \(deviceTokenString)")

    // Persist it in your backend in case it's new
}

// Called when APNs failed to register the device for push notifications
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {  
    // Print the error to console (you should alert the user that registration failed)
    print("APNs registration failed: \(error)")
}

它是由你来实现,这将持续令牌在应用程序后台逻辑。 后来本指南中,后台服务器将连接到的APN,并通过提供这种非常相同的设备令牌来指示设备(一个或多个)发送推送通知接收通知。

请注意,设备令牌可能在未来由于各种原因而改变,所以NSUserDefaults的使用,当地的key-value存储,本地持续令牌,只有当令牌已经改变更新您的后端,以避免不必要的请求。

运行在物理iOS设备上的应用程序进行必要的修改,以AppDelegate.swift后(在iPhone模拟器无法收到通知)。 查找下面的对话框,然后按确定以允许您的应用程序接收推送通知:

警报对话框

在一两秒钟,在Xcode控制台应显示设备的唯一标记。 将其复制并保存供以后使用。

准备接收通知

添加以下回调AppDelegate.swift当您的应用程序接收到后端服务器发送推送通知将被调用:

// Push notification received
func application(_ application: UIApplication, didReceiveRemoteNotification data: [AnyHashable : Any]) {  
    // Print notification payload data
    print("Push notification received: \(data)")
}

需要注意的是,每当用户无论点击或滑与从锁屏/通知中心的推送通知互动,或者如果你的应用程序时,已打开了设备接收到推送通知这个回调只会被调用。

这是给你发展的时候通知与互动时,被执行的实际逻辑。 举例来说,如果你有一个Messenger应用,一个“新邮件”推送通知应打开相关的聊天网页,并导致邮件列表从服务器更新。 利用数据对象将包含从您的应用程序后端发送,如聊天ID,在Messenger应用实例的所有数据。

需要注意的是在事件您的应用程序打开时收到一个推送通知时,用户将不会看到通知都非常重要,它是由你来通知以某种方式的用户。 这个问题StackOverflow上列出了一些可能的解决方法,比如显示类似股票的iOS通知横幅应用程序内的一面旗帜。

产生的APN验证密钥

在你的开发人员中心打开的APN验证密钥页面,点击+按钮来创建一个新的APN验证密钥 。

在接下来的页面中,选择苹果推送通知认证密钥(沙盒与生产),然后单击继续在页面的底部。

那么苹果将产生.p8包含你的APN验证密钥的密钥文件。

下载.p8密钥文件到您的计算机,并保存供以后使用。 另外,一定在某处写下密钥ID,因为你会连接到APNS时需要它更高版本。

发送推送通知

现在,看看这里了解,APNS流量: 如何iOS的推送通知工作?



文章来源: How can I implement Apple Push Notification Service on iOS Application?