更新用户设备上安装的BlackBerry应用程序

时间:2009-07-16 15:28:11

标签: blackberry

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

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

针对RIM OS 4.1 +

谢谢。

2 个答案:

答案 0 :(得分:2)

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

API中有一些元素可以让你自己获取COD文件并安装模块,但这似乎只是增加了潜在的bug空间,除非你真的需要避免使用Browser OTA安装。 / p>

答案 1 :(得分: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的下载网址。
  5. 客户端应用程序将解析该数据,如果第一个标志为“Y”,则显示消息“当前版本为(第二行的内容)。是否要更新?”选择更新后,它将启动第三行中提供的URL。
  6. <强>参考

    获取应用程序版本

    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 Implementation

    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

    示例输入网址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
    

    示例输入网址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