通过BES / BIS,黑莓手机推送通知(Push Notifications through BE

2019-08-21 19:33发布

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

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

为了记录在案,当我注册了这里推送通知我注册使用BIS选项。 现在,我其实是给黑莓我是它使用BES通知(我不认为虽然这是我要说明问题的根源..)。

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

无论我的电脑,其运行Tomcat服务器和我的手机连接到相同的WiFi。

我从设备浏览器试图连接到服务器,如https://196.84.32.112:8443/low-level-sample

并且打开浏览器的页面通常,这意味着我能够从移动连接到我的服务器。

现在,当我打从设备示例应用程序注册(我曾尝试上的设置都BIS / BES选项),我总是得到以下错误:

注册请求失败。 通过java.io.IOException的原因:网络运行[订阅]失败。 确保内容提供商URL访问。

在日志中我得到:

打开网址:我的服务器的URL附有喜欢的用户名/密码/模式/连接类型等内容提供商的网络命令信息[订阅]失败,造成无法连接到196.84.32.112:8443命令“注册”失败,出现错误:java.io .IOException:网络运行[订阅]失败。 确保内容提供商URL访问。

一个念头是,我应该为新推键再次注册和使用BIS / BES选项,而不是只BIS的,但这里的问题似乎是与本地服务器,而不是RIM服务器没有连接。 我已经尝试过,虽然注册和我在等待新的设置邮件。

另外我对BIS / BES选项有点糊涂了。 我不知道如果我的用户将有BIS或者BES启用所以不要我把什么在我的代码?! 在示例应用程序,它要求我,当应用程序将要生产的BIS或者BES但之间进行选择,我需要以编程方式做出这样的选择我会选择什么? 或者这种选择只对应用程序的评估/开发和生产上有另一台服务器做?

Answer 1:

我认为,所有正确的事情已经在这里说,但我希望我们能巩固一些问题的答案,并包裹了这个问题。

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

private static String getConnectionSuffix() {
    return ";deviceside=false;ConnectionType=mds-public";
}

我也看了猜这您的其他问题 。

通过这样做,你硬编码青苗的黑莓传输类型。 黑莓手机支持多种不同的传输 ,如BES,BIS,围兜,或WAP。 该青苗运输将从您的设备发送请求,出黑莓的服务器,在互联网上。 ( 注:这部分可能是混乱到iOS / Android开发人员,因为这些平台不提供苹果/谷歌的网络中介继电器正常的HTTP / S流量

然后,该请求被转发到你的服务器,这是在:

196.84.32.112:8443

我敢肯定,TCP / IP端点不是可从因特网(我不能达到它)。 所以,这就是为什么它不能给你。

你可以把这个网址

https://196.84.32.112:8443/low-level-sample

并将其粘贴到您的BlackBerry设备的浏览器,它会工作。 您的设备配置为BES,它使用贵公司的内部服务器。 这些内部服务器可以达到196.84.32.112:8443端点,因此它似乎为你工作。 但是,那是因为你还没有硬编码传输 ,为您在使用推送代码有getConnectionSuffix() 该设备的浏览器是足够聪明,想出一个可行的运输和BES的作品,达到内网服务器。

我们希望,这解释了混淆的部分。

解决方案

正如其他人所说,一个解决办法是让你的公司的IT人员通过他们的防火墙,使IP地址196.84.32.112和端口8443进行访问。 这将允许黑莓服务器顺利到达了。

另一种解决办法是改变PushUtils.java代码,以避免青苗运输:

private static String getConnectionSuffix() {
    return ";deviceside=false";
}

如果你想真正灵活的代码,那么我建议重写该PushUtils.java代码,因为它似乎在使用前5.0 HTTP连接逻辑。 连接工厂在OS 5.0+使得这个更容易,更强大的,支持多种传输时...

要回答你关于支持用户使用多个传输问题,看看这个blackberry.com例子 ,特别是MyConnectionFactory类。 它可以让你选择哪个传输您的应用程序允许,并且它首次尝试。

最终,为了让您的服务器公开与否的决定取决于它如何去使用,以及是否会有非企业网络的客户端尝试与您的企业服务器注册。



Answer 2:

让我先解释BB推演示了注册流程:

当你点击注册设备会

  1. 通知设备要注册您的Web应用程序。 对于这一点,将有关设备的信息发送到您的Web应用程序(所谓的ContentProvider)。 我们希望你在数据库中存储的信息。 这一步骤发生在ContentProviderProtocol.performCommand()推演示的方法。

  2. 通知装置需要从您的应用程序接收推送通知注册BB推送服务器。 这种情况发生在BpasProtocol.register()推SDK的方法。

如果你想知道谁所有注册了推送通知(也许如果你想单独推送通知给每个设备,而不是广播消息给所有注册用户)步骤1才是必需的。 在这种情况下,你可能会需要这样的用户的喜好等等反正定制推送等信息​​。

现在,你所得到的错误是从第1步1步成功,您的设备应该能够连接到您的网络应用程序,它是不能够。

为了解决这个问题,或者你必须让你的Web应用程序公开访问(并准备处理负载)或注释掉通过该应用使得步骤1 ContentProviderProtocol.performCommand()返回而不做任何事情。

PS:在步骤1中所使用的web应用程序不必是一样的推送发起。 web应用程序只是简单地用于跟踪所有谁注册了接收推,如果你想到了很多用户的最好应设在一个分布式架构云。



文章来源: Push Notifications through BES/BIS , BlackBerry