APNs 是 Apple 的推送通知服务,它使第三方开发人员能够向安装在 Apple 设备上的App发送消息通知。
此文主要介绍如何让App支持 APNs。
开启推送功能
App ID 支持推送
登录苹果开发者网站,进入 Certificates, Identifiers & Profiles 页面,点击侧边栏中的 Identifiers,然后在列表中找到项目对应的 App ID(即 Xcode 项目中的 Bundle Identifier),点击并进入配置编辑页面,然后选择 Push Notifications 旁边的复选框,最后点击右上的 Save(保存)按钮,结果如下图所示:
App 工程配置推送功能
要在App中添加推送权限,请在 Xcode 项目中启用推送通知功能。
打开 Xcode 项目,在 Project > Target > Capabilities 页面中点击红框中的加号按钮,然后选择并添加 Push Notifications,添加后的结果如图中黄框所示:
App 代码设置流程
客户端App基本流程
- 注册通知;
- 向苹果APNs服务请求deviceToken;
- 把拿到的deviceToken发给消息推送服务器;(三方的or自己的)
- 处理通知相关回调方法;
关于deviceToken
- 同手机不同App, deviceToken不同;
- 同一个App删除, 重新安装deviceToken会变化;
(以上结论由实测验证得出)
注册通知
App Code
Podfile
pod 'LeanCloudObjc' # 集成所有服务模块
#import <UserNotifications/UserNotifications.h>
#import <LeanCloudObjc/Foundation.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
/// necessary code ignore...
[self setNormalPushNotification];
return YES;
}
#pragma mark -
#pragma mark APNs
/// 初始化普通推送
- (void)setNormalPushNotification {
[self initPushSrv];
if (@available(iOS 10.0, *)) {
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionBadge|UNAuthorizationOptionSound|UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
NSLog(@"是否允许通知: %d", granted);
}];
} else {
// Fallback on earlier versions
}
[[UIApplication sharedApplication] registerForRemoteNotifications];
// ⚠️注意: 如果不设置delegate,普通推送也会走didReceiveRemoteNotification
if (@available(iOS 10.0, *)) {
[[UNUserNotificationCenter currentNotificationCenter] setDelegate: