iOS推送集成

极光集成推送

需要注意

选择1:根据域名配置
在项目的info.plist中添加一个Key:NSAppTransportSecurity,类型为字典类型。
然后给它添加一个NSExceptionDomains,类型为字典类型;
把需要的支持的域添加給NSExceptionDomains。其中jpush.cn作为Key,类型为字典类型。
每个域下面需要设置2个属性:NSIncludesSubdomains、NSExceptionAllowsInsecureHTTPLoads。

为什么iOS收不到推送消息?
如果你确认 appKey 在 SDK 客户端与 Portal 上设置是一致,其他环节也按照文档正确地操作。但还是收不到推送消息。那么,有一定的可能性,是你在 Portal 上上传的证书,不是 APNs (Push) 证书。推送时指定的iOS推送环境和应用证书是同一个环境。

上传到appStore的版本为什么收不到推送?

请确认xcode选择的生产证书和上传的证书的bundleid一致;
如果是在jpush网站上推送,请确认新建通知时推送对象是否选择了生产环境;
如果是v3 api推送,请确认是否使用了apns_production参数,值是否为:true;如果没有使用apns_production参数请确认jpush网站上该应用的部署环境是否已经切换到生产环境。
iOS 平台上传证书一直为未通过状态
证书上传未通过的原因一般有:

密码错误;
上传的apns证书环境不一致;
上传到控制台必须是apns证书,非apns证书会带来错误,还有其他的原因可能是开发者证书也可能是apns证书那里导出来的私钥
具体请看上传后显示的错误输出内容。

出现Not get deviceToken yet. Maybe: your certificate not configured APNs?…错误日志时如何排除问题?

如果出现上述日志,则说明一段时间内都无法获取device token,那么:

确认你的app配置了apns权限,如果未配置apns权限,则应该会出现此错误提示。
确认你的app运行在ios真机而非模拟器上,且通知中心中对应app的通知权限没有完全关闭(alert/sound/badge至少有一个权限是打开的)。
确认你的网络状况,与apple的服务器的连接是通过tcp的 5223端口连接,确认你网络的对应端口是否可用,可通过下列命令来确认这点:

百度集成推送

当我们创建证书之后需要将证书添加到百度网站上,我们导出的证书p12文件,我们需要转换为pem证书

1
openssl pkcs12 -in MyApnsCert.p12 -out MyApnsCert.pem -nodes

提示需要输入密码,输入刚才导出 p12 时的密码即可。

  • 注意
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
//服务端推送的badge是几就会显示几,你只需要跟服务端同步消息数目,然后让服务端自己,该推送几,就推送几,比如你应用打开的时候,或者进入后台的时候跟服务端同步,这个点,需要你们自己去设计,应用没有消息的时候,服务端推送了1,当应用打开时候,告诉服务端,app没点击通知,那下次应用推送2,依次类推。
    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];
    }
    // 测试 开发环境 时需要修改BPushMode为BPushModeDevelopment 需要修改Apikey为自己的Apikey
    // 在 App 启动时注册百度云推送服务,需要提供 Apikey
    [BPush registerChannel:launchOptions apiKey:@"Apikey改成自己的" pushMode:BPushModeDevelopment withFirstAction:nil withSecondAction:nil withCategory:nil isDebug:YES];
    // App 是用户点击推送消息启动
    NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (userInfo) {
        NSLog(@"从消息启动:%@",userInfo);
        [BPush handleNotification:userInfo];
    }
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];//角标清0
}
  • 需要注意时,开发状态下 BPushModeDevelopment
  • 发布状态下是,BPushModeProduct,不然收不到消息