android极光推送no bit-32,iOS极光推送详解以及碰到问题和解决方式

前言:

极光推送作为较成熟的推送平台,通过集成基础操作。为客户端以及服务端节省了大量时间来实现推送效果。

就iOS端来说要注意整体流程,首先,iOS端推送时分为两个状态,开发环境与生产环境,每个环境在app

development里应做好相应的证书​并导出(极光集成时需要用到p12文件),开发环境与生产环境需要在极光控制台设置。

集成过程在极光开发文档里有详细步骤,​

http://docs.jiguang.cn/client/ios_sdk/#ios-sdk_1

很详细。这里就不再阐述了,​有问题可以留言问我。

其次​,推送包括两种形式和两种方法。两种方法包括api推送(即后台推送)和极光web控制台推送。两种形式指的是推送包含推送通知以及推送消息,注意:通知会在苹果通知中心显示,但是消息并不会走apns,即app在后台或者未运行时不会以通知的形式显示到手机页面上,但是每次app启动并运行的时候会通过回调方法调用获得推送消息。

​往往我们需要针对个人推送,这里需要用到极光推送中的别名,或者标签。

其原理是用户在登陆成功时,通过用户唯一身份ID进行别名或者标签注册,在下次需要针对个人推送时,增加通过别名或者标签推送。

友情提示:用户注销登陆时记得清除别名。

集成极光遇到问题:​

iOS 9集成

iOS 9变动影响SDK部分:

增加了bitCode编码格式,当SDK不支持bitCode时,用户集成时无法开启bitCode选项.

现象:用户集成SDK后无法编译通过,错误日志里包含了bitCode的相关错误信息

默认使用https连接,如果请求为http,需要手动配置plist来支持http服务,当前我们的服务器请求都走http服务。

现象:用户集成SDK后,所有JPush相关的http服务都提示连接错误或者连接超时,可能是此问题。

bitCode解决方式

JPush iOS SDK v1.8.7 及以上版本的SDK,已经增加对 iOS 9 新特性 bitCode

的支持.JMessage iOS SDK v2.0.0 及以上版本支持bitCode。

Https解决方式

SDK未提供https地址版本时

需要用户主动在当前项目的Info.plist中添加NSAppTransportSecurity类型Dictionary。

在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES

iOS 如何推送自定义声音

客户端需要将声音文件导入工程里,选中工程Target -> Build Phrases

-> Copy Bundle Resources

服务端推送时,需要指定iOS 平台下的sound参数,具体传入的值是声音文件名+后缀。

为什么iOS收不到推送消息?

如果你确认 appKey 在 SDK 客户端与 Portal

上设置是一致,其他环节也按照文档正确地操作。但还是收不到推送消息。那么,有一定的可能性,是你在 Portal 上上传的证书,不是

APNs (Push) 证书。推送时指定的iOS推送环境和应用证书是同一个环境。

请参考iOS 证书设置指南

再次检查证书选择是否正确。

请注意:iOS能接受消息的必要条件是:应用程序的证书要和你上传到jpush

portal上的证书对应,如果你的程序是直接在xcode上运行的,你的应用部署环境必须是开发状态才能收到APNS消息。

温馨提示:目前api推送的时候可以通过参数apns_production可以指定推送环境,false为开发环境,true为生产环境。V3

api不带此参数则默认为生产环境,V3 api封装的sdk

默认为开发环境。如果api有传apns_production则以此值为准,否则以应用详情的部署环境为准。

为什么启动的时候出现 Did Fail To Register For Remote

Notifications With Error的错误

程序运行的时候出现下面的错误信息:

did Fail To Register For Remote Notifications With Error: Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的权利字符串" UserInfo=0x1c55e000 {NSLocalizedDescription=未找到应用程序的“aps-environment”的权利字符串}

这个是由于你的Provisioning Profile文件,不具备APNS功能导致的。请登陆Apple Developer

网站设置好证书,更新Provisioning Profile,重新导入Xcode。

或参考:http://blog.csdn.net/stefzeus/article/details/7418552

如何在接收到 APN 的时候获取 APN 消息内容并进行跳转或做出响应处理?

获取 APNs 推送内容

如何关闭 APN 推送?

可通过调用代码 [[UIApplication sharedApplication] openURL:[NSURL

URLWithString:@"prefs:root=NOTIFICATIONS_ID&&path=当前应用的bundleid"]]

进入您的应用的通知设置页面,引导用户手动变更“允许通知”的状态。

App badge number(角标)如何更改与清空?

JPush 网站上推送 iOS 通知时,可在[可选设置]里面指定 badge 参数的值,如:1或"+1"。

api上指定badge的参数请看:Push-API-v3#API-v3-ios

客户端上报badge到JPush服务器的接口请看:设置badge

关于badge +1的介绍,请看APNs Notification badge

Icon Badge number 的清空方法:

APN 推送内容指定 badge number 为 0;

在代码中使用如下代码清空 badge number: [[UIApplication sharedApplication]

setApplicationIconBadgeNumber:0];

注意

badge累加只能通过v3 api推送,且只有1.7.4版本以上才能支持。

为何推送一条 APN 后,点击通知中心的 APN 通知打开 App,可是 APN

通知在通知中心依然存在而未被删除?

如果推送 APN 时,Badge number 被指定为0 ,则可能出现 APN 消息在通知中心被点击后,尽管调用了

[[UIApplication sharedApplication]

setApplicationIconBadgeNumber:0]; 但 APN 消息在通知中心不会被删除的情况。

这种情况可以按如下代码调用以清除通知中心的 APN 通知。

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

如果仍有其他消息,则考虑清除 local notification 通知。( [[UIApplication

sharedApplication] cancelAllLocalNotifications] )

出现Not get deviceToken yet. Maybe: your certificate not

configured APNs?...错误日志时如何排除问题?

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

确认你的app配置了apns权限,如果未配置apns权限,则应该会出现此错误提示。

确认你的app运行在ios真机而非模拟器上,且通知中心中对应app的通知权限没有完全关闭(alert/sound/badge至少有一个权限是打开的)。

确认你的网络状况,与apple的服务器的连接是通过tcp的

5223端口连接,确认你网络的对应端口是否可用,可通过下列命令来确认这点:

telnet 1-courier.push.apple.com 5223

在代码中可在以下两个函数中断点以确认device token的获取状态。

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

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

如果app运行进入 didFailToRegisterForRemoteNotificationsWithError

则说明app的APNS权限问题或者app运行在模拟器,参考 证书设置文档。

如果app运行进入didRegisterForRemoteNotificationsWithDeviceToken

则说明运行正常,请确认你在此函数中的代码中有将token传递给jpush的调用:

[JPUSHService registerDeviceToken:deviceToken];

如果以上两个registerRemoteNotification的函数都未进入,

请确认你的代码中有注册申请apns的函数调用:

[JPUSHService registerForRemoteNotificationTypes:];

如果上述情况都已确认且未进入第4步的任意回调函数,则可以判断无法获取token的原因在于设备与apple的网络连通性问题(注:一个设备只有在未申请过token的情况下才会需要与apple的网络交互来获取token,已经获取过某一环境token的设备在无网络的情况下也能获取到对应环境的token(环境分为

开发/生产)),这种情况下切换网络能够在大部分情况下解决此问题。

如果仍然有问题,请将上述步骤的结果以邮件附件的形式发送到JPush支持邮箱,我们将协助你解决此问题。

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

请确认xcode选择的生产证书和上传的证书的bundleid一致;

如果是在jpush网站上推送,请确认新建通知时推送对象是否选择了生产环境;

如果是v3

api推送,请确认是否使用了apns_production参数,值是否为:true;如果没有使用apns_production参数请确认jpush网站上该应用的部署环境是否已经切换到生产环境。

iOS 平台上传证书一直为未通过状态

证书上传未通过的原因一般有:

密码错误;

上传的apns证书环境不一致;

上传到控制台必须是apns证书,非apns证书会带来错误,还有其他的原因可能是开发者证书也可能是apns证书那里导出来的私钥

具体请看上传后显示的错误输出内容。

为什么日志里面会打印:You've implemented -[

application:didReceiveRemoteNotification:fetchCompletionHandler:],

but you still need to add "remote-notification" to the list of your

supported UIBackgroundModes in your Info.plist.

这个主要是提示开发者如果要支持UIBackgroundModes,需要开启Remote

notifications,具体操作可以看:iOS 7 Background Remote

Notification

REST API 服务器

请选用 v3 版本 API。 v1 版本已经停止使用,v2版本会将在2015不再维护。

v3 API 调试指南

不用登录JPush的portal界面,在APP的面板中直接发送通知可以吗?

可以。直接封装JPush的 V3 API就可以了,具体可参考 Push API

v3

1004 Authen failed

详情请看:调用验证

v2 API 调试指南

Library 选择

如果 API 调用使用 Java,则建议使用 JPush 提供的 JPush API Library。

避免自己写代码组装 JSON 字符串,而使用一些成熟的第三方 library 来生成。

具体问题

拼接verification_code的最后一个参数master_secret如何获取

请登陆portal,在你所创建应用的应用详情界面可以获取到。

1002:app_key doesn't exist

可能有两个原因:

没有传appkey或key填写无效(如多了空格)

没有按照要求post:HTTP Post 的Content-Type 需采用

application/x-www-form-urlencoded

只有msg_content的内容是json,其它的参数都是post的键值

1003 msg_content should be JSON format

大多数时候是由于自己写代码拼装 JSON,而 JSON 的特殊字符没有做转义引起的。建议使用第三方 JSON 库来生成 JSON

字符串。

另外一个常见的原因是,字符串不是 utf-8 编码。

1004 verification_code is incorrect

拼接verification_code的参数不对:由 sendno, receiver_type,

receiver_value, master_secret 4个值拼接起来(直接拼接字符串)

md5有问题,需要32位大写

你的编码不是utf-8

具体看Push API v2

中的verification_code参数

官方帮助

当出现问题时,建议仔细阅读官方文档,看看有没有什么遗漏信息。如果还是无法解决,建议在极光社区

搜索类似问题

如果还是无法解决,可以通过以下途径寻求帮助

官方社区网站 http://community.jpush.cn/

给我们的support发邮件

(如果有敏感信息,建议使用support邮箱) support@jpush.cn

为了更高效,快速的解决问题,在寻求帮助时,请提供下列信息:

使用的什么 API 的接口, 比如:https://api.jpush.cn/v3/push

提供appkey,message id信息

提供调用 API 出现问题时的时间

如果是 SDK 问题请提供对应的 SDK 版本和完整的日志记录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值