极光推送开发环境可以收到,生产环境收不到推送
初次发现这个问题的时候 首先排查的就是证书配置。
绿色的表示没什么问题。
开发环境的证书跟生产环境的证书 都已经配置完成,
下面我们看看极光官网的配置
这个也没有问题。 然后看代码
//极光植入
[JPUSHService setBadge:0]; //JPush服务器角标置为0
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];//app角标置为0
//极光推送
//notice: 3.0.0及以后版本注册可以这样写,也可以继续用之前的注册方式
JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound;
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
// 可以添加自定义categories
// NSSet<UNNotificationCategory *> *categories for iOS10 or later
// NSSet<UIUserNotificationCategory *> *categories for iOS8 and iOS9
}
[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
//JAppKey : 极光推送申请下来的appKey Jchannel : 可以直接设置默认值即可 Publish channel
//是否是开启的
BOOL JPush = NO;
if ([kMemberLoginProductFlag isEqualToString:@"YES"])
{
JPush = YES;
}
else{
JPush = NO;
}
[JPUSHService setupWithOption:launchOptions appKey:JiGuangAppKey
channel:nil apsForProduction:JPush]; //如果是生产环境应该设置为YES
#pragma mark - 向服务器上报Device Token 极光代理
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// Required - 注册 DeviceToken
[JPUSHService registerDeviceToken:deviceToken];
}
#pragma mark - 极光推送代理
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
NSDictionary * userInfo = notification.request.content.userInfo;
DLog(@"@@@@@@@进来了进来了 %@",userInfo);
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置
}
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
NSDictionary * userInfo = response.notification.request.content.userInfo;
DLog(@"@@@@@@@进来了进来了 %@",userInfo);
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(); // 系统要求执行这个方法
[JPUSHService setBadge:0]; //JPush服务器角标置为0
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];//app角标置为0
//这里是自定义了 。。。。。。
if([UIApplication sharedApplication].applicationState == UIApplicationStateActive || [UIApplication sharedApplication].applicationState == UIApplicationStateBackground)
{
DLog(@"@@@@@@@进来了");
[self pushViewControllerWith:userInfo];
}else
{
// if (![USER_DEFAULT valueForKey:kNotificationPushDictionary])
// {
// [self pushViewControllerWith:userInfo];
// }
DLog(@"@@@@@@@进来了进来了");
[self pushViewControllerWith:userInfo];
}
}
代码看了半天也没啥问题。最后发现是打包的问题,测试环境直接打包就行。
但是生产的 必须一定要adhoc打包才能测试 其他方式打包安装不行。坑啊 。
其次,前后台所有的sdk版本要可以对的上的。版本不统一也可能出现推送收不到的问题。瞎忙了2天,快上线了,头都大了。