Apple Push Notification service

APNs : Apple Push Notification service 的简称,由苹果公司提供的推送通知服务

Apple Push Notification#

Remote Notification 远程推送#

申请推送证书#

首先确保已经申请好可用的APPID,然后在:
“Certificate界面”“Services” 栏目下,找到

  • iOS Apple Push Notification service SSL (Sandbox)
  • Apple Push Notification service SSL (Sandbox & Production)

前者是测试环境下的推送服务,后者是生产环境下的推送服务。

按提示步骤完成注册后,便可以将证书下载下来,在自己的电脑上双击安装,成功后会自动打开本地的“钥匙串”
,然后找到那个安装好的证书,右键导出为”.p12”文件,将这个文件交个后台的推送服务器。

接下来就是本地代码的事情了。

注册推送#

首先在Xcode ——> TARGETSCapabilities中找到Push Notifications,然后打开,并确保没有报错。

然后在AppDelegate.swiftapplication(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?)中,对推送进行注册.

1
2
3
4
5
6
 // 获取推送通知的权限
let settings = UIUserNotificationSettings.init(types: [.alert, .sound, .badge], categories: nil)
application.registerUserNotificationSettings(settings)

// 注册远程推送
application.registerForRemoteNotifications()

然后再完成UIApplicationDelegate中关于推送的协议

1
2
3
4
5
6
7
8
9
10
11
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
print("deviceToken:\(deviceToken)")
}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
print("userInfo:\(userInfo)")
}

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
print("error:\(error)")
}

OK,远程推送的代码就完成了。

Local Notification 本地推送#

前半部分和远程推送一样,都需要先获取推送权限

1
2
3
// 获取推送通知的权限
let settings = UIUserNotificationSettings.init(types: [.alert, .sound, .badge], categories: nil)
application.registerUserNotificationSettings(settings)

后面再根据需求在需要的地方写上推送代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
application.cancelAllLocalNotifications()

let notification = UILocalNotification()
notification.alertTitle = "notification"
notification.alertBody = "Hey"
notification.alertAction = "OK"
notification.soundName = UILocalNotificationDefaultSoundName
notification.applicationIconBadgeNumber = 1

// 推送时间
notification.fireDate = Date.init(timeIntervalSinceReferenceDate: 2)

// 按着firedate的时间来推送
application.scheduleLocalNotification(notification)

原理#

在远程推送中,要完成推送要分为几步:

  1. 首先在程序中,注册APNs(Apple Push Notification servers)推送。
  2. 在注册时,项目的bundleIDUDID等信息会发送给APNs
  3. APNs会生成一个Device Token作为设备令牌给我们。
  4. 然后我们将这个令牌给后台处理,方便消息推送。
  5. 当需要推送的时候,后台将消息按格式发送给APNsAPNs根据Device Token找到需要推送的设备对象,完成推送。

App 上架流程 计算机网络基础及应用

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×