【问题标题】:Updating a BlackBerry application installed on a user's device更新安装在用户设备上的 BlackBerry 应用程序
【发布时间】:2010-06-10 01:40:59
【问题描述】:

如果 BlackBerry 应用程序通过 OTA (BIS) 安装到用户的设备,并且该应用程序具有“检查更新”按钮,一种简单的方法是使用 .jad 的地址启动浏览器然后会向用户显示“您已安装 1.0 版,您要下载并安装 1.1 版吗?”的文件。对话。但是即使没有更新,用户也会得到“你有 1.0,要不要用 1.0 替换它的对话框”,这很麻烦,没有意义。

有没有更好的方法可以更无缝地执行此操作?例如,应用程序是否有可接受的方式来检查服务器是否有更新(在用户许可的情况下),通知用户是否有可用更新,以及安装更新 OTA 而无需通过浏览器/jad/ota/replace/restart设备循环?

针对 RIM OS 4.1+

谢谢。

【问题讨论】:

    标签: blackberry


    【解决方案1】:

    一种方法是在您的应用程序中使用 HTTP 连接获取 JAD 文件,解析服务器上可用的版本,并仅在有更新的版本可用时启动浏览器,或者在另外询问用户是否升级是需要的。

    API 的某些元素还允许您获取 COD 文件并自行安装模块,但这似乎只是增加了潜在的错误空间,除非您确实需要避免使用浏览器 OTA 安装。

    【讨论】:

    • 您能提供一个代码示例吗?抱歉,我是 Blackberry Development 的新手,我知道在某些时候我需要这样做
    • 简短的回答是否定的。答案的原因是连接方法中有足够的变量(BES,BIS-B,APN),以及应用程序类型,最终,更好地让您学习如何执行每个步骤,然后放入它以一种有意义的方式与您的应用程序一起使用。如果您对 Blackberry Development 非常陌生,那么您可能希望将应用程序的这一部分放在一边,直到您做好更好的准备。
    【解决方案2】:

    一种类似的方法,但我发现它比 Richard 上面的想法要好一些,因为客户端不需要这种方式的硬编码 JAD 路径(很重要,因为不同 BB OS 版本的 JAD 文件可能不同):

    1. 创建一个接受应用名称和当前应用版本作为输入的简单网页(php、jsp、servlet、cgi 等);如果需要,还可以在输入中包含操作系统版本。

    2. 此 URL 将由客户端通过获取适当的数据(详细信息如下)并将其附加到已知的基本 URL 来构建。

    3. 网页将解析信息,并计算出要运行的正确版本。

      • 请注意,您可能不需要上述所有信息:如果您的应用程序只有一个可下载版本,您实际上只需要设备发送客户端软件版本,无需其他任何信息。正确版本的计算可以是简单的硬编码检查 (if ($version != LATEST_VERSION)) 或更复杂的东西,包括查找数据库或其他地方。
    4. 此页面将输出纯文本,非 HTML。它将写入三个值,每行一个:
      1. “y”如果需要更新,“n”如果不需要。
      2. 此客户端使用的最新版本。仅当您希望客户端显示它时才需要这样做。
      3. 正确 JAD 的下载 URL。
    5. 客户端应用程序将解析该数据,如果第一个标志为“Y”,将显示消息“当前版本为(第二行的内容)。您要更新吗?”选择更新时,它将启动第三行中提供的 URL。

    参考

    获取应用程序版本

    import net.rim.device.api.system.ApplicationDescriptor;
    ... 
    // Returns current app version in the format Major.Minor.Minor.Build, eg 1.5.1.123
    String version = ApplicationDescriptor.currentApplicationDescriptor().getVersion();
    

    获取硬件和平台信息

    import net.rim.device.api.system.ApplicationDescriptor;
    ... 
    // Obtain the platform version string in the format A.B.C.DDD, eg 5.0.0.464
    String softwareVersion = DeviceInfo.getSoftwareVersion(); 
    // Obtain the hardware name: 
    String hardwareName = DeviceInfo.getDeviceName();
    

    启动 HTTP 网址

    import net.rim.blackberry.api.browser.Browser;
    
    Browser.getDefaultSession().displayPage("http://example.com");
    

    读取 HTTP 文件

    String url = "full/url/assembled/with/data/above"
    // YOU assemble "url" value  - and include more error handling than is here in this sample: 
    HttpConnection conn;
    try {
    
        conn = ConnectionHelper.getHttpConnection(url);
        LineInputStream stream = new LineInputStream(conn.openInputStream());
        String lineOneYesNo = stream.readLine(true); 
        String lineTwoCurrentVersion = stream.readLine(true))
        String lineThreeDownloadURL = stream.readLine(true))
        // ***
        // * Parse the data above and handle as described.
        // ***
        return data;
    } catch (IOException e) {
                // Add appropriate erorro handling here
        return;
    }
    

    getHttpConnection 实现

    public static HttpConnection getHttpConnection(String URL) throws IOException {
        HttpConnection c = null;
        StringBuffer conn = new StringBuffer(URL);
    
                // *** IMPORTANT *** 
                // YOU must define this method below, as it will append 
                // values to the connection string based on connection 
                // type (MDS, TCP, WIFI, WAP2, etc)
                //
        configureConnectionString(conn);
    
        c = (HttpConnection) Connector.open(conn.toString());
        int rc = c.getResponseCode();
        if (rc != HttpConnection.HTTP_OK) {
            throw new IOException("HTTP Error: " + rc);
        }
        return c;
    }
    

    参考:简单的 LineInputStream 实现

    http://svn.bbssh.org/trunk/BBSSH_Common/src/org/bbssh/io/LineInputStream.java

    示例输入 URL 1 此 URL 由客户端构建并发送到服务器:

    http://example.com/versioncheck.do/app-name/hardware-name/os-version/app-version
    e.g. http://example.com/versioncheck.do/MyApplication/Bold9000/5.0.466/1.5.1.0
    

    示例输入 URL 2 同一事物的替代格式:

    http://example.com/versioncheck.php?appName=A&hardwareName=B&osVersion=C&appVersion=D
    e.g. http://example.com/versioncheck.php?appName=?MyApplication&hardwareName=Bold9000?osVersion=5.0.466&appVersion=1.5.1.0
    

    样本输出

    y
    1.3.1.125
    http://example.com/ota/5.0.0/MyApp.jad
    

    【讨论】:

    • Drat - 不知何故这对我来说显示为当前项目.. 没有意识到这是一年前的 :( 啊,好吧,它仍然是有用的信息;希望其他人会找到它路。
    • 事实上,我们确实实现了一个与您描述的系统非常相似的系统。
    • 酷;最后,这似乎是最不痛苦的管理方式——尤其是当你有多个 BB 配置/构建来管理部署二进制文件时。
    猜你喜欢
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 2017-04-21
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多