Sprinkfield: Amazon Appstore for Android

Posted by | · · · · · · · | Webstar Works | Nincs hozzászólás a(z) Sprinkfield: Amazon Appstore for Android bejegyzéshez

Elérkezett az idő, hogy a Sprinkfield játékunk a Google Play után az Amazon saját alkalmazásboltjában is megjelenjen. A 2011-es évben induló, hazánkban még viszonylag ismeretlen Amazon Appstore számos extra szolgáltatással próbálja meg kiegészíteni a Google saját boltjának hiányosságait. Ilyenek például a vásárlás előtt, a böngészőben kipróbálható alkalmazások, az exkluzív Amazon Appstore tartalmak, a napi ingyenes alkalmazások.

Ezeken túl az Amazonnál (az Apple App Store-hoz hasonlóan), csak a saját tesztelőik által jóváhagyott termékek kerülhetnek publikálásra. Így próbálják meg kiszűrni a Google Play-ben megjelenő sok hibás vagy “gagyi” tartalmat. Egyelőre sajnos csak az USA-ban, Egyesült Királyságban, Németországban, Franciaországban, Olaszországban és Spanyolországban élő lakosok tudnak regisztrálni a boltba de, szerencsére pár hete érkezett a jó hír az Amazon-tól, hogy hamarosan közel 200 országból lesz elérhető az Amazone Store.

A Google Play-el ellentétben az Amazon Appstore-ba már most is lehet Magyarországról fizetős alkalmazásokat publikálni, ezért a Sprinkfield iOS verziójához hasonló, reklámmentes és megvásárolható pályacsomagokkal szeretnénk megjelenni. A vásárlás biztosításához a Sprinkfield és Amazon In-App Purchasing API integrálása szükséges. Az API felépítéséről és használatáról minden fontos információt innen lehet beszerezni.

Az iOS verzióból a vásárláshoz kapcsolódó részek is portolva lettek, ezért túl sok kódolásra nem volt szükség. Lényegében a vásárlást, visszaállítást és árak lekérdezését indító függvényeket és a visszaérkező válaszokat kellett beilleszteni a megfelelő helyre.

A kéréseket a com.amazon.inapp.purchasing.PurchasingManager

  • initiatePurchaseRequest()
  • initiatePurchaseUpdatesRequest()
  • initiateItemDataRequest()

függvényei indítják, a válaszok a com.amazon.inapp.purchasing.BasePurchasingObserver -ből leszármazott frissen létrehozott osztályunk
  • onPurchaseResponse()
  • onPurchaseUpdatesResponse()
  • onItemDataResponse()

metódusaiban érkeznek.

Problémák

Az integrálás során két komolyabb problémával találkoztam. Egyrészt a pályavásárlás után, másrészt a vásárolt pályák visszaállítása után meghívott képernyőfrissítések nem működtek tökéletesen, a cache-ben még nem szereplő textúrák hiányoztak, hibásan jelentek meg.

texturafail

A log-ban minden egyes új textúra betöltésénél egy 0x501-es és 0x505-ös OpenGL hiba volt látható. Ezek a hibakódok hibás OpenGL paraméterre és a memória elfogyására utalnak. A nem túl bőbeszédű hibaüzenetek miatt hosszabb nyomozásra volt szükség, hogy kiderítsem mi a probléma. Végül a most már egyértelműnek tűnő Cocos2dxActivity osztály runOnGLThread függvénye hozta a megoldást. Az Amazon-tól érkezett aszinkron válaszok feldolgozása után a képernyőfrissítéseket végző függvényeket az OpenGL szálban kell elindítani.

public class CocosActivity extends Cocos2dxActivity {

    ...

    public static void kulonSzalbolHelyesen() {
        runOnGLThread(new Runnable() {
            @Override
            public void run() {
                //képernyő frissítése
            }
        });
    }

    ...

}

Ezzel csak az egyik hiba – a visszaállítás utáni probléma – oldódott meg, a sikeres vásárlás után a legtöbb esetben még mindig hiányoztak a szükséges új textúrák. A szál problémán kívül itt a válasz érkezésének idejére is oda kellett figyelni. A vásárlás eredményét tartalmazó válasz gyakran előbb megérkezett, mint hogy a fő Activity vissza kapta volna a fókuszt a vásárlást irányító Amazon dialógus ablaktól. Itt a megfelelő szálban történő frissítés mellett a fő Activity állapotára is oda kellett figyelni.

public class CocosActivity extends Cocos2dxActivity {

    ...

    @Override
    public void onResume() {
        super.onResume();

        if(vasarlasUtanErkezunkIde){
            runOnGLThread(new Runnable() {
                @Override
                public void run() {
                    //képernyő frissítése
                }
            });

        }

    }

    ...

}

Ezzel az apró módosítással értük el, hogy a képernyőfrissítés mindig jó ütemben induljon el.

Az említett két problémán kívül zökkenőmentesen ment a “Google Play -> Amazon Appstore” portolás, az alkalmazás készen áll a publikálásra.


No Comments

Leave a comment