通过BES/BIS、BlackBerry推送通知

通过BES/BIS、BlackBerry推送通知,blackberry,push-notification,Blackberry,Push Notification,我正在尝试使用OS

我正在尝试使用OS<7.X的推送通知

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

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

在这个设备上,我在示例应用程序中输入了我收到的电子邮件中给出的所有正确设置

运行tomcat服务器的pc和手机都连接到同一个wifi

我正在尝试从设备浏览器连接到服务器,例如
https://196.84.32.112:8443/low-水平样品

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

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

注册请求失败。java.io.IOException原因:网络操作[Subscribe]失败。确保内容提供商URL可访问。

在日志中,我得到:

打开URL:我的服务器URL附加了用户名/密码/型号/连接类型等信息 内容提供商网络命令[Subscribe]失败,原因是无法连接到
196.84.32.112:8443
命令“register”失败,错误为:java.io.IOException:网络操作[Subscribe]失败。确保内容提供商URL可访问。

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


此外,我对BIS/BES选项有点困惑。我不知道我的用户是否会启用BIS或BES,那么我应该在代码中添加什么?!在示例应用程序中,它要求我在BIS或BES之间进行选择,但当应用程序即将投入生产时,我需要以编程方式进行选择,我将选择什么?!或者此选择仅用于应用程序的评估/开发,并且在生产过程中有另一台服务器?

首先让我解释BB推送演示的注册流程:

当您单击Register时,设备将

  • 通知您的web应用程序设备要注册。为此,它会将有关设备的信息发送到您的Web应用程序(所谓的ContentProvider)。您需要将该信息存储在数据库中。此步骤发生在推送演示的
    ContentProviderProtocol.performCommand()方法中

  • 通知BB推送服务器设备要注册以接收来自应用程序的推送通知。这发生在push sdk的
    BpasProtocol.register()方法中

  • 只有当您想知道谁都注册了推送通知时,才需要执行步骤1(如果您想向每个设备发送单独的推送通知,而不是向所有注册用户广播消息,则可能需要执行步骤1)。在这种情况下,您可能需要其他信息,如用户的首选项等,以自定义推送

    现在,您得到的错误来自步骤1。要使步骤1成功,您的设备应该能够连接到无法连接的web应用

    要解决此问题,您必须使web应用程序可公开访问(并准备好处理负载),或者通过使
    ContentProviderProtocol.performCommand()
    return而不做任何操作,从应用程序中注释掉步骤1


    PS:步骤1中使用的webapp不必与推送启动器相同。webapp只是用来跟踪所有注册接收推送的用户,如果你希望有很多用户,那么最好将其放置在分布式体系结构的云中。

    我认为这里说的都是对的,但我希望我们能够整合一些答案,并总结这个问题

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

    private静态字符串getConnectionSuffix(){
    返回“deviceside=false;ConnectionType=mds public”;
    }
    
    我也从阅读中猜到了这一点

    通过这样做,您已经硬编码了黑莓传输类型的围嘴,比如BES、BIS、BIBS或WAP。BIBS传输将请求从您的设备发送到黑莓的服务器,这些服务器位于互联网上。(注意:这一部分可能会让iOS/Android开发者感到困惑,因为这些平台不提供Apple/Google网络中介来中继正常的HTTP/S流量)

    然后,请求被中继到您的服务器,该服务器位于:

    196.84.32.112:8443
    
    我很确定TCP/IP端点在Internet上不可用(我无法访问它)。所以,这就是为什么它不适合你

    您可以使用此URL

    https://196.84.32.112:8443/low-水平样品
    
    并将其粘贴到黑莓设备的浏览器中,它就会工作。您的设备配置为BES,BES使用您公司的内部服务器。那些内部服务器可以到达
    196.84.32.112:8443
    端点,因此它似乎适合您。但是,这是因为您没有像使用
    getConnectionSuffix()
    的推送代码那样对传输进行硬编码。设备浏览器足够智能,可以找到一种有效的传输方式,BES可以到达该内部网服务器

    希望这能解释孔子的观点