集成信鸽推送!!!

2015年9月17号,从上午11点开始,到下午6点06分,我发誓,这是我目前为止最最生气的一下午,所以我必须写一篇博客记录一下!!坑爹的腾讯,让我记住你!!!

我在外包公司干活,要做的就是集成个推送,原来用的都是百度啊,极光啊 这些三方推送,但是这回我们后台一定要用信鸽,我想反正都差不多嘛,用就用呗,结果各种坑爹。。。(怎么坑的 我就不说了。。心痛)

 

集成信鸽步骤:

1.而话不说 苹果官网 先弄俩证书 一个是development下的 一个是product的,注意一定要是带推送的那个证书奥。

2.添加手机设备,生成推送描述文件,这些步骤都和别的一样就不说了。

3.将生成的证书和配置文件都安装到自己的电脑上,然后在钥匙串导出.p12文件 一共俩 一个development 的 一个product的(注意前两次密码是给P12文件加密的,后一次是自己电脑的密码)

4.将.p12文件 转换为.pem文件 通过 终端命令行来执行:

openssl pkcs12 -in product.p12 -out product.pem -nodes

5.将生成的pem文件上传到 信鸽平台上(信鸽平台先申请一个应用)以上都有教程一步一步来不会有错(接下来就是见证坑爹的时刻)

6.代码集成,直接拷贝了啊 都是垃圾代码。

#pragma mark 信鸽推送

    //----------------------------------推送

    /**

     *  1. 向Apple Push Notification Service 发送UserId和AppId

     */

    if ([UIDevice currentDevice].systemVersion.doubleValue <= 8.0) { // 小于8.0的设备

        UIRemoteNotificationType type = UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound;

        [application registerForRemoteNotificationTypes:type];

        

    } else { // 高于8.0版本的设备

        

        

        //        // 通知类型声音 提示框

        //        UIUserNotificationType type = UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound;

        //

        //        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil];

        //

        //        // 注册通知类型

        //        [application registerUserNotificationSettings:settings];

        //

        //        // 向用户申请申请试用通知

        //        [application registerForRemoteNotifications];

        [self registerPushForIOS8];

    }

    //    //初始化XG push信息

    [XGPush startApp:2200148110 appKey:@"IRR94W6M12DR"];

    

 -----------------------------上面这段写在appDelegate 启动的那个方法里面------

 

#pragma mark - 推送事件

 

#pragma mark ios8推送

- (void)registerPushForIOS8{

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= _IPHONE80_

    

    //Types

    UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;

    

    //Actions

    UIMutableUserNotificationAction *acceptAction = [[UIMutableUserNotificationAction alloc] init];

    

    acceptAction.identifier = @"ACCEPT_IDENTIFIER";

    acceptAction.title = @"Accept";

    

    acceptAction.activationMode = UIUserNotificationActivationModeForeground;

    acceptAction.destructive = NO;

    acceptAction.authenticationRequired = NO;

    

    //Categories

    UIMutableUserNotificationCategory *inviteCategory = [[UIMutableUserNotificationCategory alloc] init];

    inviteCategory.identifier = @"INVITE_CATEGORY";

    [inviteCategory setActions:@[acceptAction] forContext:UIUserNotificationActionContextDefault];

    [inviteCategory setActions:@[acceptAction] forContext:UIUserNotificationActionContextMinimal];

    NSSet *categories = [NSSet setWithObjects:inviteCategory, nil];

    UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:categories];

    [[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];

    [[UIApplication sharedApplication] registerForRemoteNotifications];

#endif

}

#pragma mark  获得deviceToken时候调用

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{

    // 注册设备信息

    [XGPush registerDevice:deviceToken];

    NSLog(@"-----》deviceToken===%@", deviceToken);

}

#pragma mark 注册远程推送失败

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{

    NSLog(@"注册远程推送失败 ----> 错误%@",error);

}

#pragma mark  接收到远程推送

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

    NSLog(@"OK---->接收到=%@", [[userInfo objectForKey:@"aps"] objectForKey:@"content-available"]);

}

 #pragma mark  接收到远程推送(ios8以上)

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{

    NSLog(@"ios8---->%@", userInfo);

    if (userInfo) {

        completionHandler(UIBackgroundFetchResultNewData);

    }else

    {

        completionHandler(UIBackgroundFetchResultFailed);

    }

}

------------------拷贝完了吧?---------

按理说到此结束了,要我现在做 我也这么做,那就网页推吧 但是 你会发现推送的时候 偶尔会有apns cer error 这个就是腾讯那坑爹的网页的错误!!!!!!害死老子了  啥也不说了 想静静。。。。。

 

 

总结:如果以上都认认真真的配置好 千万别忘了所有依赖库的添加,然后推送的时候 一定要勾选 开发推送,主题要经常改变着推  你就会发现每条都成功了。

 

posted @ 2015-09-17 20:48  他们都叫我梁子  阅读(656)  评论(0编辑  收藏  举报