2011-05-22 36 views
1

我最近在Android Market上發佈了一個應用程序,並收到了一些我無法弄清楚的錯誤報告。我的應用程序的功能可以「激活」,只需支付1美元的費用,而且它基於Google的Dungeons示例應用程序。Android應用內結算示例中的嚴重問題?

這個示例應用程序存在兩個主要問題,我認爲這會給很多開發者帶來問題。

1)它在BillingService中使用了不推薦的方法。 BillingService是應用程序特定的,並處理與Android Market應用程序的RPC通信。即使你的Acitivty不是,它也需要在身邊。它實現了這個方法。

@覆蓋 公共無效在onStart(意向意圖,詮釋startId){}

取而代之的是新的

公衆詮釋onStartCommand的(意向意圖,詮釋旗幟,INT startId){}

2)更嚴重的是,在onStart/onstartCommand調用中,Intent us null爲空的情況導致了NPE,因爲代碼

String action = intent.getAction();

已在示例應用程序中執行,未進行任何空檢查。

據商務部 http://developer.android.com/reference/android/app/Service.html#onStart(android.content.Intent,INT)

「如果它的進程已經走了之後正在重新啓動該服務,它以前只是START_STICKY_COMPATIBILITY返回任何東西,這可能是空的。」

由於我是新手Android開發人員,我不想哭狼。任何人都可以告訴我Dungeons示例應用程序是否損壞,或者我在這裏誤解了某些東西?

+0

如果你想要另一個視點,你可以查看這個應用教程以及http://www.anddev.org/advanced-tutorials-f21/simple-inapp-billing-payment-t52060.html :-) – Blundell 2011-05-22 21:16:26

回答

2

這些應用程序的設計不是沒有缺陷且對情況有彈性,只是爲了展示一個方面。其他例子中我注意到很多怪癖。

難道你只是添加一個測試,當意圖爲空?

正如你所暗示的,你的應用應該使用onStartCommand()而不是onStart(),這與Dungeon例子不同。

+0

謝謝。我想我只是很確定谷歌選擇了這樣一個「非現實」的例子(魔藥和劍),而且他們提供的示例應用程序包含2.0以前的代碼。 – 2011-05-22 19:53:47

+0

最好使用pre 2.0代碼來啓用向後兼容的代碼。仍然有大約10%的用戶正在使用<2.0 – Blundell 2011-05-22 21:15:01

+2

我仍然認爲Google有責任爲大多數情況下的例子提供一個無缺陷的和有彈性的。至少,這符合他們的利益。但是,我猜他們很匆忙。並祝願他們能夠在前幾天添加99個新的國家:-) – 2011-05-24 19:06:13