114 远程推送

1.默认情况下,iOS设备在有网络连接的情况下都会和apple的APNs服务器建立一个长连接.
iOS系统会将当前应用的UDID + bundle id发送给APNs服务器,
APNs服务器会返回该设备的对应bundle id 对应的deviceToken

2.app会收集deviceToken发给服务器,服务器可以发送deviceToken给APNs服务器,由APNs服务器将消息推送给对应deviceToken的的设备的app.

3.制作证书,推送需要制作证书
1>先生成一个appID,这个appID是完整的不可以是模糊的
2>可以在证书里面配置证书,配置第一步生成的appID的推送证书(分为调试证书和上传证书),
也可以直接编辑appID配置证书
3>安装证书

4.实现以下代理方法:
1>注册远程推送:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if ([UIDevice currentDevice].systemVersion.doubleValue <= 8.0) {
        // 不是iOS8
        UIRemoteNotificationType type = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert;
        // 当用户第一次启动程序时就获取deviceToke
        // 该方法在iOS8以及过期了
        // 只要调用该方法, 系统就会自动发送UDID和当前程序的Bunle ID到苹果的APNs服务器
        [application registerForRemoteNotificationTypes:type];
    }else{
        // iOS8
        UIUserNotificationType type = UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound;

        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil];
        // 注册通知类型
        [application registerUserNotificationSettings:settings];

        // 申请试用通知
        [application registerForRemoteNotifications];
    }

    // 1.取出数据
    NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
    return YES;
}

2>取出deviceToken并发送给app的服务器:

/**
 *  获取到用户对应当前应用程序的deviceToken时就会调用
 */
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    NSLog(@"%@", deviceToken);//将deviceToken上传
}

3>接收到远程通知的并处理的代理方法:

1.iOS7之前的处理方法:
/*
 ios7以前苹果支持多任务, iOS7以前的多任务是假的多任务
 而iOS7开始苹果才真正的推出了多任务
 */
// 接收到远程服务器推送过来的内容就会调用
// 注意: 只有应用程序是打开状态(前台/后台), 才会调用该方法
/// 如果应用程序是关闭状态会调用didFinishLaunchingWithOptions
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    /*
     如果应用程序在后台 , 只有用户点击了通知之后才会调用
     如果应用程序在前台, 会直接调用该方法
     即便应用程序关闭也可以接收到远程通知
     */
    NSLog(@"%@", userInfo);
}


2.iOS7之后:
//接收到远程服务器推送过来的内容就会调用
// ios7以后用这个处理后台任务接收到得远程通知
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    /*
     UIBackgroundFetchResultNewData, 成功接收到数据
     UIBackgroundFetchResultNoData, 没有;接收到数据
     UIBackgroundFetchResultFailed 接收失败

     */
//    NSLog(@"%s",__func__);
//    NSLog(@"%@", userInfo);

    NSNumber *contentid =  userInfo[@"content-id"];
    if (contentid) {
        //注意: 在此方法中一定要调用这个调用block, 告诉系统是否处理成功.
        // 以便于系统在后台更新UI等操作
        completionHandler(UIBackgroundFetchResultNewData);
    }else{
        completionHandler(UIBackgroundFetchResultFailed);
    }
}

4.极光推送:
创建应用并将推送证书的.p12文件上传给极光,集成SDK,在极光中进行推送

5.关于证书:
首先是为appID创建两个apns证书
apns证书创建好就行(绑定好appID即可)不需要什么手机说明文件
然后再次创建该appID的真机测试证书(经验证非开发者账号不可以测试apns)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值