更新安装在用户设备上的BlackBerry应用程序
在通过OTA(BIS)将BlackBerry应用程序安装到用户设备并且该应用程序具有“检查更新”按钮的情况下,一种简单的方法是启动带有.jad文件地址的浏览器会向用户显示“您已安装1.0版本,您想下载并安装1.1版本吗?”对话。但即使没有更新,用户也会得到“您有1.0,您是否想用1.0对话框替换它”,这很麻烦,而且毫无意义。更新安装在用户设备上的BlackBerry应用程序
有没有更好的方法以更无缝的方式做到这一点?例如,是否接受应用程序检查服务器是否有更新(通过用户权限)的方式,通知用户是否有更新可用,并在不通过浏览器/ jad/ota/replace/restart的情况下安装更新OTA设备循环?
瞄准RIM OS 4.1+
谢谢。
一种方法是在您的应用中使用HTTP连接来获取JAD文件,解析服务器上可用的版本,并且仅在可用的更新版本时才启动浏览器,或者在另外询问用户升级是期望的。
这些API的元素可以让你自己获取COD文件并安装模块,但是这似乎只是增加了潜在的错误空间,除非你真的需要避免使用浏览器OTA安装。
类似的方法,但一个,我觉得有点不是理查德的思想更好地上面,因为(因为JAD文件可能针对不同的BB OS版本不同重要),客户端不需要硬编码JAD路径是这样的:
创建一个接受应用程序名称和当前应用程序版本作为输入的简单网页(php,jsp,servlet,cgi,whatever);如果你需要它,在输入中也包括操作系统版本。
该URL将由客户端通过获取适当的数据(详细信息如下)并将其附加到已知的基本URL来构建。
-
该网页将解析信息,并计算出适当的版本运行。
- 请注意,你可能并不需要所有的上述信息:如果你只有您的应用程序的一个下载的版本,你真的只需要设备发送的客户端软件版本,没有别的。正确版本的计算可以是一个简单的硬编码检查(如果($ version!= LATEST_VERSION))或更复杂的查找数据库或其他地方。
- 此页面将输出纯文本,非HTML。它会写出三个值,每行一个:
- 如果需要更新,则为“y”,否则为“n”。
- 该客户端使用的最新版本。这只有在您希望客户端显示它时才是必需的。
- 正确JAD的下载URL。
- 客户端应用程序将解析该数据,如果第一个标志是“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 URL
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;
}
和借鉴E:简单LineInputStream实施
http://svn.bbssh.org/trunk/BBSSH_Common/src/org/bbssh/io/LineInputStream.java
采样输入URL 1 此网址由客户构建并发送至服务器:
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
你能不能提供这样的代码示例?对不起,我对Blackberry Development非常陌生,我知道在某些时候我需要这样做 – Chris 2010-06-09 14:00:45
简短的回答是否定的。答案的理由是,在连接方法(BES,BIS-B,APN)和应用类型方面有足够的变量,最终,更好地学习如何执行每一步,然后把它以一种合理的方式与您的应用程序一起使用。如果您对Blackberry Development非常陌生,那么您可能希望将这部分应用放在一边,直到您做好准备。 – Richard 2010-06-09 16:54:59