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工作室(来自应用内计费示例)