关于个推推送从集成到推送成功遇到的一些坑

本人因公司最近要求需要集成个推推送,现将个推从集成到成功集成推送流出中遇到的问题写出来,做个笔记,同时也希望帮助其他的遇到问题的人#

这里装个逼哈 引用一段经典名言#

痛苦留给的一切,请细加回味!苦难一经过去,苦难就变为甘美。 ——歌德

废话不说了 上图片代码


首先按照个推官网的详细文档集成到项目中,包括导一些依赖库等,这里不细说了。这一步一半都没啥问题

#import "GeTuiSdk.h"
@interface AppDelegate ()<UITabBarControllerDelegate,UIScrollViewDelegate,NetWebServiceRequestDelegate,UIApplicationDelegate, GeTuiSdkDelegate,UNUserNotificationCenterDelegate>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// [1]:使用APPID/APPKEY/APPSECRENT创建个推实例
//这里需要再个推官网申请的kAppId kAppKey kAppSecret
    [GeTuiSdk startSdkWithAppId:kAppId appKey:kAppKey appSecret:kAppSecret
                       delegate:self];

    [self registerRemoteNotification];
    [GeTuiSdk runBackgroundEnable:true];
    [GeTuiSdk setChannelId:@"GT-Channel"];
    //重置角标计数
 //重置角标代码本人是添加到整个工程项目中 只要打开程序 角标就置为0 这是比较笨的方法 目前没有最好方法 就先这样 希望大家看完有啥好方法可以附评价给我
    page=0;
    [GeTuiSdk resetBadge];
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:page];    
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    return  [UMSocialSnsService handleOpenURL:url];
}

/**   远程通知注册成功委托 */
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
//    UIRemoteNotificationType t = UIRemoteNotificationTypeNone|UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound;
//    
//    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:t];

    NSLog(@"\n>>>[DeviceToken Success]:%@\n\n", token);
    DeviceToken = token;
    //        deviceToken
    [GeTuiSdk registerDeviceToken:token];
}
/** 远程通知注册失败委托 */
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
    NSLog(@"\n>>>[DeviceToken Error]:%@\n\n", error.description);
}
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    /// Background Fetch   SDK
    [GeTuiSdk resume];
    completionHandler(UIBackgroundFetchResultNewData);
}
/** APP已经接收到“远程”通知(推送) - 透传推送消息  */
//处理APNs展示点击,统计有效用户点击数
// 处理APNs代码,通过userInfo可以取到推送的信息(包括内容,角标,自定义参数等)。如果需要弹窗等其他操作,则需要自行编码。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    page+=1;
    [GeTuiSdk setBadge:page];
    
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:page];  //可用全局变量累加消息
    // 将收到的APNs信息传给个推统计
    [GeTuiSdk handleRemoteNotification:userInfo];
    NSLog(@"\n>>>[Receive RemoteNotification - Background Fetch]:%@\n\n",userInfo);
    completionHandler(UIBackgroundFetchResultNewData);
}


#pragma mark - GeTuiSdkdelegate 注册回调,获取CID信息
/** SDK 启动成功返回 cid */
- (void)GeTuiSdkDidRegisterClient:(NSString *)clientId {
    //  SDK      clientId
    NSLog(@"\n>>>[GeTuiSdk RegisterClient]:%@\n\n", clientId);
    adduserID = clientId;
    [self adduserId];
}
/** SDK 遇到错误回调 */
- (void)GeTuiSdkDidOccurError:(NSError *)error {
    //
    NSLog(@"\n>>>[GexinSdk error]:%@\n\n", [error localizedDescription]);
}
//个推透传消息通道---在线
- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {
    
    // [4]: 收到个推消息
    NSString *payloadMsg = nil;
    if (payloadData) {
        payloadMsg = [[NSString alloc]
                      initWithBytes:payloadData.bytes
                            length:payloadData.length
                          encoding:NSUTF8StringEncoding];
    }
    NSString *msg = [NSString stringWithFormat:@"taskId=%@,messageId:%@,payloadMsg:%@%@", taskId, msgId, payloadMsg, offLine ? @"<离线消息>" : @""];
    NSLog(@"\n>>>[GexinSdk ReceivePayload]:%@\n\n", msg);
    
    [GeTuiSdk sendFeedbackMessage:90001 andTaskId:taskId andMsgId:msgId];
    NSString *payLoadMsgIndexone = [[NSString alloc]init];
    payLoadMsgIndexone = [payloadMsg substringToIndex:2];
//    NSLog(@"%@",payLoadMsgIndexone);
    //判断跳转页面的值
    NSDictionary *dic3 =[NSDictionary dictionaryWithObject:payLoadMsgIndexone forKey:@"message2"];//
    //
    [[NSNotificationCenter defaultCenter]postNotificationName:@"Message2" object:nil userInfo:dic3];
    NSString *payLoadMsgIndexone2 = [[NSString alloc]init];
    payLoadMsgIndexone2 = [payloadMsg substringFromIndex:2];
    
    NSDictionary *dic2 =[NSDictionary dictionaryWithObject:payLoadMsgIndexone2 forKey:@"message"];//
    //
    [[NSNotificationCenter defaultCenter]postNotificationName:@"Message" object:nil userInfo:dic2];
    
}

#pragma mark - APP运行中接收到通知(推送)处理
//====================For iOS 10====================
#这俩个方法是我自己做iOS适配的 可以不用添加
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{
    NSLog(@"Userinfo %@",notification.request.content.userInfo);
    
    //功能:可设置是否在应用内弹出通知
    completionHandler(UNNotificationPresentationOptionAlert);
}

//点击推送消息后回调
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{
    NSLog(@"Userinfo %@",response.notification.request.content.userInfo);
}
- (void)GeTuiSdkDidAliasAction:(NSString *)action result:(BOOL)isSuccess sequenceNum:(NSString *)aSn error:(NSError *)aError {
    if ([kGtResponseBindType isEqualToString:action]) {
        NSLog(@"绑定结果 :%@ !, sn : %@", isSuccess ? @"成功" : @"失败", aSn);
        if (!isSuccess) {
            NSLog(@"绑定失败原因: %@", aError);
        }
    } else if ([kGtResponseUnBindType isEqualToString:action]) {
        NSLog(@"解绑结果 :%@ !, sn : %@", isSuccess ? @"成功" : @"失败", aSn);
        if (!isSuccess) {
            NSLog(@"解绑失败原因: %@", aError);
        }
    }
}

好代码到这就配置差不多了 这一步官方文档很详细,据和个推技术人员联系知道个推官方最近会更新iOS10适配的新版本技术文档 总体来说官方文档还是很详细的。

之后我的痛苦就开始了#

事情是这样的,个推iOS推送只能使用透穿推送,每次推送消息,只能收到透穿消息,收不到通知消息,就是苹果通知中心不显示消息,在个推官网验证发现deviceToken和clientId 证书测试的时候报错 问题知道了,就是推送证书的错误,之后就是创建推送证书,发现创建了N次推送证书,推送还是出错。最后才发现在个推官网上传的P12文件证书在15分钟后才生效,并且必须和BUNDID绑定正确才能发送通知消息,最后坑了一天终于解决问题。下面我就吧包括创建证书 Xcode*证书配置以及个推官网证书测试详细流程附截图描述做下记录#


进入苹果开发者中心 选择ID#

屏幕快照 2016-11-12 下午4.32.36.png

俩个证书要依次创建 一个开发环境 一个生产环境证书 创建玩的样子

屏幕快照 2016-11-12 下午4.32.56.png

点击下载刚刚创建的证书 双击保持到钥匙串的样子#

35806FFB-569D-482D-ADA6-7E2122B41897.png

测试状态倒出第一个Development证书P12文件 上传到个推官网 之后等待15分钟之后在操作#

屏幕快照 2016-11-12 下午4.39.55.png

现在去配置Xcode8#

屏幕快照 2016-11-12 下午4.41.12.png

必须是和你刚刚配置过推送证书的一样 如果不一样 同样收不到消息 Xcode8要手动打开下边图上的按钮#

屏幕快照 2016-11-12 下午4.41.27.png
屏幕快照 2016-11-12 下午4.41.48.png

到这里Xcode8配置好了 接下来到官网去验证推送证书 在这里要真机连接电脑跑一下程序 并记录下deviceToken和clientId 值#

屏幕快照 2016-11-12 下午4.46.52.png

查看刚得到的deviceToken值是否和clientId 值绑定#

使用刚刚得到的deviceToken值测试证书是否正常使用#

屏幕快照 2016-11-12 下午4.45.09.png

如果手机收到通知,证明推送证书正确 个推推送配置成功#

之后就可以使用个推给手机推送通知了#

问题解决了之后,发现个推推送配置还是蛮简单的,因为粗心掉了坑里痛苦了一天才发现原来是一个简单的问题 特写此篇文章做一个记录#

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容