Avisos

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


 
Herramientas
  #1  
Viejo 13/08/14, 14:11:02
Avatar de Guixe94
Guixe94 Guixe94 no está en línea
Desarrollador
Mensajes: 900
 
Fecha de registro: abr 2012
Localización: Barcelona, Catalunya
Mensajes: 900
Modelo de smartphone: HTC ONE y Galaxy Note 3
Versión de ROM: Ultima Orange Stock
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
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!
Responder Con Cita


  #2  
Viejo 14/08/14, 02:16:57
Avatar de Dexafree
Dexafree Dexafree no está en línea
Mr. FAQMan
Mensajes: 8,021
Compra y venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Versión de ROM: Android 4.1.1 Jelly Bean
Versión de Radio: KF1
Tu operador: Movistar
Mencionado: 65 comentarios
Tagged: 2 hilos
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");
el cual devuelve un booleano según el usuario haya adquirido o no el producto:
  • true si lo ha adquirido
  • false si no lo ha adquirido

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
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 17/08/14, 13:24:35
Avatar de Guixe94
Guixe94 Guixe94 no está en línea
Desarrollador
Mensajes: 900
 
Fecha de registro: abr 2012
Localización: Barcelona, Catalunya
Mensajes: 900
Modelo de smartphone: HTC ONE y Galaxy Note 3
Versión de ROM: Ultima Orange Stock
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
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.
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 23:19:00 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007