Android 应用内计费示例中的严重问题?

Posted

技术标签:

【中文标题】Android 应用内计费示例中的严重问题?【英文标题】:Serious problem in the Android in-app billing example? 【发布时间】:2011-08-30 17:11:25 【问题描述】:

我最近在 android Market 上发布了一个应用程序,并收到了一些我无法弄清楚的错误报告。我的应用程序具有可以以 1 美元的费用“激活”的功能,它大致基于 Google 的 Dungeons 示例应用程序。

示例应用有两个主要问题,我认为这会给很多开发者带来问题。

1) 它在 BillingService 中使用了一个不推荐使用的方法。 BillingService 是特定于应用程序的,它处理与 Android Market 应用程序的 RPC 通信。即使您的 Acitivty 不在,它也必须存在。它实现了这个方法。

@覆盖 public void onStart(Intent intent, int startId)

而不是较新的

public int onStartCommand(Intent intent, int flags, int startId)

2) 更严重的是,在 onStart/onstartCommand 调用上 Intent us null 的极端情况会导致 NPE,因为代码

字符串动作 = intent.getAction();

在示例应用程序中执行,没有任何空值检查。

根据文档 http://developer.android.com/reference/android/app/Service.html#onStart(android.content.Intent, int)

“如果服务在其进程消失后重新启动,并且它之前返回了除 START_STICKY_COMPATIBILITY 之外的任何内容,则这可能为 null。”

由于我是一名新手 Android 开发人员,我不想大喊大叫。谁能告诉我地下城示例应用程序是否损坏,或者我在这里误解了什么?

【问题讨论】:

如果您想要其他观点,您也可以查看此应用内教程anddev.org/advanced-tutorials-f21/… :-) 【参考方案1】:

这些应用的设计初衷不是为了避免错误并能适应各种情况,而只是为了展示一个方面。我注意到其他示例中有很多怪癖。

你不能在意图为空时添加一个测试吗?

正如您所暗示的,您的应用应使用 onStartCommand() 而不是 onStart(),这与 Dungeon 示例不同。

【讨论】:

谢谢。我想我肯定很高兴 google 选择了这样一个“不现实”的示例(药水和剑),并且他们提供的示例应用程序包含 2.0 之前的代码。 最好使用pre 2.0 代码来启用向后兼容的代码。仍有约 10% 的用户在使用 我仍然认为 Google 有责任提供一个无错误且对大多数情况具有弹性的示例。至少,这符合他们的利益。但是,我猜他们很着急。感谢他们在前几天增加了 99 个新国家 :-)

以上是关于Android 应用内计费示例中的严重问题?的主要内容,如果未能解决你的问题,请参考以下文章

如何将aidl文件添加到Android工作室(来自应用内计费示例)

如何存储 Android 应用内计费的订阅数据?

Android 应用内计费:无法启动异步操作,因为另一个异步操作(正在进行中)

Android 应用内计费如何以及在何处指定付费功能费用

“找不到您尝试购买的商品” Android 应用内计费

Android 应用内计费响应列表为空