公司在项目使用第三方的推送是百度推送 接下来学习一下
百度推送地址
第一章 生成AppKey
1.1 注册百度账号
1.2 创建应用
Snip20170330_76.png1.2.1 设置应用名称
Snip20170330_77.png1.2.2 应用配置
Snip20170330_80.png1.2.2 应用配置完成 得到API KEY
Snip20170330_81.png第二章 生成推送所需的pem证书
2.1 在开发者这种找到我们的应用对应的APPID
Snip20170330_82.png2.2 选择证书关联的APPID
Snip20170330_83.png2.3 选择电脑钥匙串办法的证书
Snip20170330_84.png2.4 同样的操作就会生成两个cer证书,双击安装到我们的钥匙串中
Snip20170330_85.png2.5 导出两个P12文件
2.6 将导出的P12通过命令导出百度需要的pem证书
Snip20170330_86.png2.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证书上传到我们百度创建的应用中
Snip20170330_87.png这样我们前期的配置工作就完成了。由于苹果APNS是加密过的,所以我们需要将证书传递给百度,接下来我们在我们项目中将DeviceToken
传递给百度,它会绑定生成一个对应的channel_ID
.
channel_id : channel_id是用于表示一台设备的唯一标识, 在推送消息时,用于指定消息的目标接收设备.
第三章 创建我们的iOS工程,集成百度SDK
3.1 下载百度SDK 地址
Snip20170330_88.png下载后的文件目录
Snip20170330_89.png3.2 将红色的部分拖进项目中去,test.caf不需要
Snip20170330_90.png3.3对于Xcode8.0配置
Snip20170330_91.png Snip20170330_92.png3.4 在AppDelegate中初始化百度推送
#import "AppDelegate.h"
#import <UserNotifications/UserNotifications.h>
#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在百度后台创建发送通知
Snip20170330_93.png3.6 查看推送列表
Snip20170330_94.png第三章 PHP集成百度推送
1.1下载PHP对应SDK
Snip20170330_95.png下载后的SDK目录
Snip20170330_97.png将项目拖拽到我们本地的服务器站点
Snip20170330_98.png1.2 配置项目
- 修改configure.php中的defaultapiKey及defaultsecurekey,填入在Setp 2中获得的apikey及secure key.
1.2 在hello_for_ios.php 中脚本中发送一个推送
Snip20170330_102.png推送消息的格式
网友评论