首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过BES/BIS、BlackBerry推送通知

通过BES/BIS、BlackBerry推送通知
EN

Stack Overflow用户
提问于 2013-04-11 11:44:05
回答 2查看 1.4K关注 0票数 4

我试图对OS < 7.X使用推送通知。

我下载了示例服务器/客户端代码。我在我的设备上部署了客户机代码,在所提供的tomcat上部署了低级示例代码。

对于记录,当我在这里注册推送通知时,我使用BIS选项进行了注册。现在我收到了一部黑莓手机,我被告知它正在使用BES (我不认为这是我将要描述的问题的根源。)

在设备上,在示例应用程序中,我将从收到的电子邮件中提供的所有正确设置。

我的pc机运行着tomcat服务器,我的手机连接到同一个wifi上。

我正尝试从设备浏览器连接到服务器(如https://196.84.32.112:8443/low-level-sample )

浏览器通常会打开页面,这意味着我可以通过移动连接到服务器。

现在,当我从设备示例应用程序中点击寄存器(我在设置中尝试了BIS/BES选项)时,我总是会得到以下错误:

注册请求失败。由java.io.IOException引起:网络operationSubscribe失败。确保内容提供者URL是可访问的。

在日志里我得到:

打开URL:我的服务器url附加了用户名/密码/模型/连接类型等信息,内容提供者网络命令订阅失败,原因是无法连接到196.84.32.112:8443 命令“注册失败”,错误: java.io.IOException:网络operationSubscribe失败。确保内容提供者URL是可访问的。

一种想法是,我应该再次注册新的推送键,使用BIS/BES选项,而不是只使用BIS,但这里的问题似乎是与本地服务器的连接,而不是RIM服务器。不过,我已经试着注册了,我正在等待新设置的邮件。

另外,我对BIS / BES的选择有点困惑。我不知道我的用户是否会启用BIS或BES,所以我应该在代码中添加什么?!在样例应用程序中,它要求我在BIS或BES之间进行选择,但是当应用程序开始生产时,我需要以编程的方式做出选择,我将选择什么?!或者这个选择仅仅是为了评估/开发应用程序,而在生产中还有另一个服务器吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-17 08:00:02

我认为这里说的都是对的,但我希望我们能把一些答案合并起来,把这个问题总结一下。

您还没有共享代码,这使事情变得更加困难,但是许多人使用RIM/BlackBerry提供的PushDemo源代码,其中连接后缀是用/pushdemo/com/rim/samples/device/push/PushUtils.java硬编码的

代码语言:javascript
复制
private static String getConnectionSuffix() {
    return ";deviceside=false;ConnectionType=mds-public";
}

我也猜这是因为我读过你的另一个问题

通过这样做,您已经对BlackBerry传输类型的BIBS进行了硬编码。BlackBerry支持许多不同的传输,像BES,BIS,BIBS,或WAP。BIBS传输将从您的设备发送请求,到黑莓的服务器,这是在互联网上。(注意:这部分可能让iOS/Android开发人员感到困惑,因为这些平台不提供苹果/谷歌网络中介来中继正常的HTTP/S通信)

然后,将请求转发到服务器,服务器位于:

代码语言:javascript
复制
196.84.32.112:8443

我很确定TCP/IP端点在Internet上是不可用的(我无法到达它)。所以,这就是你失败的原因。

您可以接受这个URL

代码语言:javascript
复制
https://196.84.32.112:8443/low-level-sample

并粘贴到您的BlackBerry设备的浏览器,它将工作。您的设备配置为BES,BES使用公司的内部服务器。这些内部服务器可以到达196.84.32.112:8443端点,因此它似乎适合您。但是,这是因为您没有像在使用getConnectionSuffix()的push代码中那样硬编码传输。设备浏览器足够聪明,可以找到一个工作的传输,而BES工作到内联网服务器。

希望这解释了令人困惑的部分。

解决方案

正如其他人所说,一个解决方案是让您公司的IT人员通过防火墙访问IP地址196.84.32.112和端口8443。这将使BlackBerry服务器能够成功地到达它。

另一种解决方案是更改PushUtils.java代码以避免BIBS传输:

代码语言:javascript
复制
private static String getConnectionSuffix() {
    return ";deviceside=false";
}

如果您想要非常灵活的代码,那么我建议重写该PushUtils.java代码,因为它似乎使用了pre-5.0HTTP连接逻辑。当支持多个传输时,操作系统中的ConnectionFactory 5.0+使它更容易、更健壮.

要回答有关支持多个传输的用户的问题,请查看这个blackberry.com示例,特别是MyConnectionFactory类。它允许您选择您的应用程序允许的传输,以及它首先尝试的传输。

最终,让您的服务器公开与否的决定取决于它将如何使用,以及您是否会有非公司互联网客户端试图在您的公司服务器注册。

票数 3
EN

Stack Overflow用户

发布于 2013-04-17 07:48:21

让我首先解释BB Push Demo的注册流程:

当您单击“注册”时,设备将

  1. 通知您的web应用程序,该设备希望注册。为此,它将向您的Web (所谓的ContentProvider)发送有关该设备的信息。您应该将该信息存储在数据库中。这个步骤发生在push演示的ContentProviderProtocol.performCommand()方法中。
  2. 通知BB Push Server,设备希望注册以接收来自应用程序的推送通知。这种情况发生在push的BpasProtocol.register()方法中。

只有当您想知道推送通知的注册对象(可能是希望向每个设备发送单独的推送通知,而不是向所有注册用户广播消息时),第1步才是必要的。在这种情况下,您可能需要其他信息,如该用户的首选项等来定制推送。

现在,您正在获得的错误是从步骤1。要成功的步骤1,您的设备应该能够连接到您的web应用程序,它无法。

要解决这个问题,要么让您的web应用程序可以公开访问(并准备好处理加载),要么通过让ContentProviderProtocol.performCommand()返回而不做任何事情来注释掉应用程序的第一步。

PS:在步骤1中使用的webapp不需要与您的推送发起者相同。webapp只是用于跟踪所有注册接收推送的用户,如果您期望有很多用户,那么理想的位置应该是在分布式架构上的云中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15947917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档