![]() |
|
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
«
Tema Anterior
|
Siguiente tema
»
|
|
Herramientas |
|
#1
|
|
comprobar licencia al iniciar
Hola,
en mi app tengo una "version pro" que se desbloquea al comprar un producto dentro de la misma app (utilizo InAppBilling). La compra del producto se realiza en un fragment cuando este se compra en el mismo fragment aparece las funciones pro (son dos LinearLayout, al comprar el primero cambia su visibilidad a "gone" y el segundo a "visible"). Como podria hacer para que al iniciar la app directamente se cambiasen las visibilidades si las el producto esta comprado? o si eso es muy complicado (ya que esta en un fragment y eso) pues que se cambiase al iniciar el fragment. el codigo de compra es este: [PHP]private void startBuyProcess(){ String clave = "MIIBIjANBgkqhkiG90uX2SMTlh50JXLVKabCPODOiH1AW00lE nBkYSCF5be1jQIDAQAB"; billingHelper = new IabHelper(this, clave); billingHelper.startSetup(this); } @Override public void onIabSetupFinished(IabResult result) { if (result.isSuccess()) { try{ if(billingHelper.queryInventory(true, null).hasPurchase(MainActivity.SKU)){ Toast.makeText(this, "Licencia Correcta", Toast.LENGTH_SHORT).show(); getSupportFragmentManager().findFragmentById(R.id. content_frame); scrollpro1 = (ScrollView)findViewById(R.id.scrollpro1); scrollpro2 = (ScrollView)findViewById(R.id.scrollpro2); scrollpro1.setVisibility(View.GONE); scrollpro2.setVisibility(View.VISIBLE); // startActivity(new Intent(MainActivity.this,Pro.class)); compraCorrecta(); } else { compraElemento(); } } catch(IabException e){ e.printStackTrace(); } } else { errorAlIniciar(); } } protected void errorAlIniciar() { Toast.makeText(MainActivity.this, "Error al intentar iniciar la compra", Toast.LENGTH_SHORT).show(); } protected void compraElemento() { purchaseItem(MainActivity.SKU); } protected void purchaseItem(String sku) { billingHelper.launchPurchaseFlow(this, sku, 123, this); } @Override public void onIabPurchaseFinished(IabResult result, Purchase info) { if (result.isFailure()) { compraFallida(); } else if (MainActivity.SKU.equals(info.getSku())) { compraCorrecta(); // Consumimos los elementos a fin de poder probar varias compras billingHelper.consumeAsync(info, null); } } /* * COSAS QUE QUERAMOS HACER CUANDO SE HAYA * ADQUIRIDO EL PRODUCTO CON EXITO * protected void compraCorrecta() { getSupportFragmentManager().findFragmentById(R.id. content_frame); scrollpro1 = (ScrollView)findViewById(R.id.scrollpro1); scrollpro2 = (ScrollView)findViewById(R.id.scrollpro2); scrollpro1.setVisibility(View.GONE); scrollpro2.setVisibility(View.VISIBLE); } /* * COSAS QUE QUERAMOS HACER CUANDO EL PRODUCTO * NO HAYA SIDO ADQUIRIDO * protected void compraFallida(){ } //LIMPIAMOS @Override protected void onDestroy() { disposeBillingHelper(); super.onDestroy(); } private void disposeBillingHelper() { if (billingHelper != null) { billingHelper.dispose(); } billingHelper = null; } private Boolean isUpgrade(Context context) { SharedPreferences prefs = context.getSharedPreferences("prefs", Context.MODE_PRIVATE); return prefs.getBoolean("upgrade", false); } private void setUpgrade(Context context, Boolean value) { SharedPreferences prefs = context.getSharedPreferences("prefs", Context.MODE_PRIVATE); SharedPreferences.Editor edit = prefs.edit(); edit.putBoolean("upgrade", value); edit.commit(); } ///// Fin compras[/PHP] Y el fragment lo llamo des de el NavigationDrawer lateral con el siguiente codigo: [PHP]private void MostrarFragment(int position) { // update the main content by replacing fragments Fragment fragment = null; switch (position) { case 1: fragment = new HomeFragment(); break; case 2: fragment = new ProfileFragment(); break; case 3: fragment = new Redstone(); break; case 4: fragment = new ComandosIDS(); break; case 5: fragment = new Tutoriales(); break; case 6: fragment = new Trucos(); break; case 7: fragment = new Youtubers(); break; case 8: fragment = new PurchaseActivity(); break; case 9: fragment = new AcercaDe(); break; [/PHP] GRACIAS! |
|
|
|
#2
|
||||
|
||||
|
Un par de cosillas....
1.- QUITA TU CLAVE PRIVADA, POR EL AMOR DE DIOS 2.- Guardar el SKU de un item en MainActivity... ![]() 3.- Veo que seguiste cierto tutorial que cierta persona hizo en cierta web (http://www.dexa-dev.com/android-in-a...-el-codigo-iv) Ahí tienes explicado en detalle todo el proceso de compra, para que se pueda entender qué hace cada paso y cada llamada. En el apartado Iniciando la comunicación se nombra el uso del método Código:
billingHelper.queryInventory(true, null).hasPurchase("SKU");
En caso de que no quieras hacer esa query cada vez que inicias la aplicación, puedes guardarlo de alguna forma "secreta", como por ejemplo guardando alguna cadena de texto propia de cada dispositivo, añadiéndole algun identificador propio y cifrandolo con alguna clave secreta. Un ejemplo puede ser IMEI+"PREMIUM" Lo cifras con una clave secreta (ahi ya entra tu labor de esconder la clave en el código y crearte el cifrado/descifrado), y lo guardas en un archivo. Al iniciar la app, lo lees, si existe lo descifras y comparas el resultado con el que deberia ser Si son iguales, tiene la version premium, y si no, no Echale imaginación ![]() También recuerda que tienes que hacer la restauracion de compras, por si el usuario desinstala la aplicacion o cambia de dispositivo
|
| Gracias de parte de: | ||
|
#3
|
|
Muchas gracias! Si use ese tutorial jaja. No te preocupes no es mi clave no te has fijado que es muy corta? Jaja empece a dar cabezazos para que no quedase vacio..
Voy a ponerme a mirarmelo. |
| Respuesta |
Estás aquí
|
||||||
|
||||||
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 23:19:00 (GMT +1)
HTCMania: líderes desde el 2007







