Deve ser, não estou utilizando o IabHelper, escrevi o meu próprio código para IAB.
Lúcio Maciel
luciofm@gmail.com
luciofm@gmail.com
2014-09-10 18:03 GMT-03:00 Rudson Lima <rudsonlive@gmail.com>:
@Lucio seria esses carinhas getOriginalJson() e getSignature()?Em 10 de setembro de 2014 17:59, luciofm <luciofm@gmail.com> escreveu:Eu sugiro também fazer a verificação da compra no seu servidor.Quando o usuário faz uma compra com sucesso, o Google retorna um JSON com os dados da compra, e uma assinatura para esse JSON.O ideal é verificar se a assinatura bate com o JSON no seu servidor, assim você evita muitas fraudes.Tenho um app com IAP que tem aproximadamente 500 vendas e já registrei umas 150 tentativas de fraude validando a assinatura da venda.Lúcio Maciel
luciofm@gmail.com2014-09-10 17:46 GMT-03:00 dms <dms021@gmail.com>:Rudson,Veja o que o Google Diz: http://developer.android.com/training/in-app-billing/purchase-iab-products.html
- The fifth argument contains a 'developer payload' string that you can use to send supplemental information about an order (it can be an empty string). Typically, this is used to pass in a string token that uniquely identifies this purchase request. If you specify a string value, Google Play returns this string along with the purchase response. Subsequently, when you make queries about this purchase, Google Play returns this string together with the purchase details.
Security Recommendation: It's good practice to pass in a string that helps your application to identify the user who made the purchase, so that you can later verify that this is a legitimate purchase by that user. For consumable items, you can use a randomly generated string, but for non-consumable items you should use a string that uniquely identifies the user.
On Wednesday, September 10, 2014 2:42:15 PM UTC-3, Rudson Lima wrote:Aproveitando a thread..Duvida:@DMS o que você quer dizer com "Implemente um Payload"? Qual a finalidade dele?Em 2 de setembro de 2014 14:37, dms <dms...@gmail.com> escreveu:Jean,Este in-app Billing é uma complicação total. Tive muita dificuldade para implementar no meu app e não tive retorno satisfatório em vendas.Mas as dicas são:1) Implemente um Payload.2) No meu app, toda vez que é iniciado ele consulta a loja para verificar se comprou o produto ou não. Talvez usar uma shared preference seja mais rápido, mas tem o problema de você não saber se a pessoa devolveu o produto. Só se periodicamente você verificar se a pessoa ainda é "dona" do produto comprado.3) Os produtos de teste servem apenas para testar as rotinas de compra, eles sempre dão erro quando se tenta verificar a compra dos mesmos. Li que é um bug no código, não sei se já arrumaram nem a veracidade desta informação.4) Faça o teste de compra num aparelho real, no emulador não funcionou bem, com um cartão de crédito real.5) Cancele a compra do item, produto, o mais rápido possível após alguns testes. E se for o caso compre novamente. Pois se você cancela depois de 1 semana, o dinheiro é devolvido mas o usuário continua com a posse do produto. Fiz teste de devolução em 1 dia e não deu problema, após alguns horas o produto era retirado da posse do usuários.Espero ter ajudado.[]s Daniel
On Thursday, August 28, 2014 5:32:28 PM UTC-3, Jean Carlos Almeida wrote:...Pessoal implementei minha classe para in-app Billing e tudo ocorreu perfeitamente só que...Não consigo realizar compra pelo celular do desenvolvedor (O meu).Não consigo testar o aplicativo debugando, quando clico em comprar, aparece: "Esta versão do aplicativo não está configurada para faturamento....", pelo que entendi isto é por que o aplicativo não está na google play, porém ele está com a mesma versão, só que estou executando direto do eclipse.Instalando em um dispositivo terceiro, consegui realizar a compra, porém não ocorreu o fluxo que eu desejava após a conclusão da compra, porém como vou saber o que está dando errado se não consigo debugar?Por favor alguém sabe me ajudar?Segue código caso achem necessário:public class Compra extends ActivityBase{
private static String noAd = "";
private IabHelper mHelper;
private int codigoCompra = 1001;
private ProgressDialog progresso;
private ActivityBase tela;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.compra); //Criar this
noAd = "MINHA CHAVE"
mHelper = new IabHelper(this,"MEU PAYLOAD");
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
if (!result.isSuccess()) {
return;
}
if (mHelper == null) return;
mHelper.queryInventoryAsync(getInventarioListener);
}
});
tela = this;
String compra = getIntent().getStringExtra("Compra");
}
public void comprar(View v)
{
removerAnuncios();
}
IabHelper.QueryInventoryFinishedListener getInventarioListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
if (mHelper == null) return;
if (result.isFailure()) {
return;
}
consultarCompras();
// Produto comprado
Purchase noAdProduto = inventory.getPurchase(noAd);
boolean noAdComprado = (noAd != null &&
verifyDeveloperPayload(noAdProduto));
if (noAdComprado)
{
salvarCompra(tela.getString(R.string.noAd));
}
}
};
IabHelper.OnIabPurchaseFinishedListener compraFinalizadaListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
progresso.dismiss();
if (mHelper == null) return;
if (result.isFailure()) {
Suporte.alertar(tela, "Falha ao realizar compra!");
//EasyTracker.getInstance(tela).send(MapBuilder.createEvent("Compra",
//"Falha ao comprar", "Produto: "+purchase.getSku(), null).build());
return;
}
if (!verifyDeveloperPayload(purchase)) {
Suporte.alertar(tela.getApplicationContext(), "Falha ao realizar compra. Foi detectada uma tentativa de fraude!");
//EasyTracker.getInstance(tela).send(MapBuilder.createEvent("Compra",
//"Tentativa de fraude", "Produto: "+purchase.getSku()+" - Payload: "+purchase.getDeveloperPayload(), null).build());
return;
}
if (purchase.getSku().equals(noAd)) {
Suporte.alertar(tela, "Compra realizada com sucesso!");
salvarCompra(noAd);
//tela.desabilitarAdPosCompra();
}
}
};
private boolean verifyDeveloperPayload(Purchase p) {
return p != null && p.getDeveloperPayload().equals("MEU PAYLOAD");
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i("AA","onActivityResult(" + requestCode + "," + resultCode + "," + data);
// Pass on the activity result to the helper for handling
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
this.setOnActivityResultCompra(requestCode, resultCode, data);
}
else {
Log.i("BB", "onActivityResult handled by IABUtil.");
}
}
public void removerAnuncios() {
mostrarCarregando();
String<span style="color: #000;" class="styled-by-pTo unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
For more options, visit https://groups.google.com/d/optout.
--
--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.






0 comentários:
Postar um comentário