iOS-百度推送

公司在项目使用第三方的推送是百度推送 接下来学习一下
百度推送地址

第一章 生成AppKey

1.1 注册百度账号

1.2 创建应用

iOS-百度推送_第1张图片
Snip20170330_76.png

1.2.1 设置应用名称

iOS-百度推送_第2张图片
Snip20170330_77.png

1.2.2 应用配置

iOS-百度推送_第3张图片
Snip20170330_80.png

1.2.2 应用配置完成 得到API KEY

iOS-百度推送_第4张图片
Snip20170330_81.png

第二章 生成推送所需的pem证书

2.1 在开发者这种找到我们的应用对应的APPID

iOS-百度推送_第5张图片
Snip20170330_82.png

2.2 选择证书关联的APPID

iOS-百度推送_第6张图片
Snip20170330_83.png

2.3 选择电脑钥匙串办法的证书

iOS-百度推送_第7张图片
Snip20170330_84.png

2.4 同样的操作就会生成两个cer证书,双击安装到我们的钥匙串中

iOS-百度推送_第8张图片
Snip20170330_85.png

2.5 导出两个P12文件

2.6 将导出的P12通过命令导出百度需要的pem证书

Snip20170330_86.png

2.7证书与证书校验

与 APNs 之间是加密的连接,因此需要使用证书来加密连接。每个的推送环境有自己单独的推送证书,即开发证书和生产证书。

在将证书最终转为 pem 格式后,可通过与 APNs 连接来测试证书是否有效。

开发环境:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert MyApnsDev.pem

生产环境:

openssl s_client -connect gateway.push.apple.com:2195 -cert MyApnsPro.pem

当输入完命令回车后,终端首先会输出很多相关信息。

当连接建立失败时,会直接关闭。

当连接建立成功时,终端会停止输出,并等待你输入,你可以随便输入一些字符后摁回车,然后连接才会关闭。�

2.8 通知的两种推送环境

在使用 iOS 远程推送功能时,有两种不同的环境。开发环境(Development)以及生产环境(Production)。

App 当前使用的推送环境与 Xcode - Build Settings - Code Signing - Provisioning Profile 文件的模式一致。

2.7 将pem证书上传到我们百度创建的应用中

iOS-百度推送_第9张图片
Snip20170330_87.png

这样我们前期的配置工作就完成了。由于苹果APNS是加密过的,所以我们需要将证书传递给百度,接下来我们在我们项目中将DeviceToken传递给百度,它会绑定生成一个对应的channel_ID.
channel_id : channel_id是用于表示一台设备的唯一标识, 在推送消息时,用于指定消息的目标接收设备.

第三章 创建我们的iOS工程,集成百度SDK

3.1 下载百度SDK 地址

iOS-百度推送_第10张图片
Snip20170330_88.png

下载后的文件目录

iOS-百度推送_第11张图片
Snip20170330_89.png

3.2 将红色的部分拖进项目中去,test.caf不需要

iOS-百度推送_第12张图片
Snip20170330_90.png

3.3对于Xcode8.0配置

iOS-百度推送_第13张图片
Snip20170330_91.png
iOS-百度推送_第14张图片
Snip20170330_92.png

3.4 在AppDelegate中初始化百度推送

#import "AppDelegate.h"
#import 
#import "BPush.h"
#import "ViewController.h"
@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    
    // iOS10 下需要使用新的 API
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
        UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
        
        [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert + UNAuthorizationOptionSound + UNAuthorizationOptionBadge)
                              completionHandler:^(BOOL granted, NSError * _Nullable error) {
                                  // Enable or disable features based on authorization.
                                  if (granted) {
                                      [application registerForRemoteNotifications];
                                  }
                              }];
#endif
    }
    else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
        UIUserNotificationType myTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
        
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:myTypes categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    }else {
        UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound;
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];
    }
    
    
    #warning 测试 开发环境 时需要修改BPushMode为BPushModeDevelopment 需要修改Apikey为自己的Apikey
    
     [BPush registerChannel:launchOptions apiKey:@"M4a6DvXbCnl7rgvLcVeIwSFw" pushMode:BPushModeDevelopment withFirstAction:@"打开" withSecondAction:@"关闭" withCategory:@"test" useBehaviorTextInput:YES isDebug:YES];
    
    // App 使用户点击推送消息启动
    NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (userInfo) {
        [BPush handleNotification:userInfo];
    }
    
    // 清除角标
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1.0];
        
    return YES;
}

#pragma Gegistnotification

// 在iOS8中,还需要添加这个方法。通过新的ApI 注册推送服务
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    [application registerForRemoteNotifications];
}



// 当 DeviceToken 获取失败时,系统会调用此回调方法
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
    NSLog(@"DeviceToken 获取失败, 原因是: %@", error);
}

// 当注册成功时候返回 deviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    NSLog(@"%@-----", deviceToken);
    [BPush registerDeviceToken:deviceToken];
    
    // 绑定Push服务通道 error_code为0是绑定成功 绑定成功后可以获取appid,channelid,userid等信息
    [BPush bindChannelWithCompleteHandler:^(id result, NSError *error) {
        
        if (result) {
            if ([result[@"error_code"] intValue] != 0) {
                return ;
            }
            
            // 获取channel_id
            NSString *myChange_id = [BPush getChannelId];
//            [BPush getAppId];
//            [BPush getUserId];
            NSLog(@"%@", myChange_id);
            
            [BPush setTag:@"MyTag" withCompleteHandler:^(id result, NSError *error) {
                if (result) {
                    // BPushCallBack中有设置标签结果的反馈,,error_code 为0时设置成功会得到设置结果。
                    NSLog(@"result==================%@", result);
                    
                }
            }];
            
        }
    }];
    
}



// 当用户点击了通知 应用在前台 或者开启后台并且应用在后台 是调用
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    
    NSLog(@"%@", userInfo);
    
    
    // 应用在前台 不跳转页面
    if (application.applicationState == UIApplicationStateActive) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"收到一条消息" message:userInfo[@"aps"][@"alert"] delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
        
        [alert show];
    }
    // 杀死情况下 直接跳转到页面
    if (application.applicationState == UIApplicationStateInactive) {
        
        /*
            SkipViewController *skipCtr = [[SkipViewController alloc] init];
            [_tabBarCtr.selectedViewController pushViewController:skipCtr animated: YES];
         */
    }
    
    // 应用在后台 当后台设置apps字段里的
    if(application.applicationState == UIApplicationStateBackground){
        
         ViewController *vc = (ViewController *)self.window.rootViewController;
        
        
        vc.textView.text = userInfo.description;
        
    }
}

3.5在百度后台创建发送通知

iOS-百度推送_第15张图片
Snip20170330_93.png

3.6 查看推送列表

iOS-百度推送_第16张图片
Snip20170330_94.png

第三章 PHP集成百度推送

1.1下载PHP对应SDK

iOS-百度推送_第17张图片
Snip20170330_95.png

下载后的SDK目录

iOS-百度推送_第18张图片
Snip20170330_97.png

将项目拖拽到我们本地的服务器站点

iOS-百度推送_第19张图片
Snip20170330_98.png

1.2 配置项目

  • 修改configure.php中的defaultapiKey及defaultsecurekey,填入在Setp 2中获得的apikey及secure key.
iOS-百度推送_第20张图片
Snip20170330_99.png

1.2 在hello_for_ios.php 中脚本中发送一个推送

iOS-百度推送_第21张图片
Snip20170330_102.png

推送消息的格式


iOS-百度推送_第22张图片

第四章 对于证书过期的处理

iOS-百度推送_第23张图片
Snip20170330_103.png

4.1到苹果开发者中心,找到对应的AppID

iOS-百度推送_第24张图片
Snip20170330_104.png

4.2选择过期的证书 重新生成对应的证书

iOS-百度推送_第25张图片
Snip20170330_105.png

4.3 按这上面的步骤上传到百度我们创建的应用中,就可以正常的发送通知了。

你可能感兴趣的:(iOS-百度推送)