2014-12-10 2 views
0

Я реализовал биллинг IAP. Но проблема, которую я получил, - это после покупки продукта, приложение падает. Высказывание ошибки Invalidkeyspecification. Но оплата прошла успешно. Когда я занимаюсь серфингом через Интернет, я узнал, что есть некоторые проблемы с ключом. вот код, где появляется ошибка, что я прошел через трассировку выхода.Биллинг в приложении In-App Invalidkeyspecification Crash

Здесь я предоставить base64EncodedPublicKey (MIIBI ************** и так далее), что я получил от страницы рынка

PublicKey key = BillingSecurity.generatePublicKey(base64EncodedPublicKey); 
     verified = BillingSecurity.verify(key, signedData, signature); 
     if (!verified) { 
      Log.w(TAG, "signature does not match data."); 
      return null; 
     } 




try { 
     byte[] decodedKey = Base64.decode(encodedPublicKey); 
     KeyFactory keyFactory = KeyFactory.getInstance(KEY_FACTORY_ALGORITHM); 
     return keyFactory.generatePublic(new X509EncodedKeySpec(decodedKey)); 
    } catch (NoSuchAlgorithmException e) { 
     throw new RuntimeException(e); 
    } catch (InvalidKeySpecException e) { 
     Log.e(TAG, "Invalid key specification."); 
     throw new IllegalArgumentException(e); 
    } catch (Base64DecoderException e) { 
     Log.e(TAG, "Base64DecoderException.", e); 
     return null; 
    } catch (Exception g) 
    { 
     Log.e(TAG, "Exception generate Public key.", g); 
     return null; 
    } 

ПРИМЕЧАНИЕ: Я мог бы в состоянии после получения информации о покупке продукта и сбое приложения.

Пожалуйста, помогите мне здесь. заранее спасибо.

ответ

0
/** 
* Generates a PublicKey instance from a string containing the 
* Base64-encoded public key. 
* 
* @param encodedPublicKey Base64-encoded public key 
* @throws IllegalArgumentException if encodedPublicKey is invalid 
*/ 
public static PublicKey generatePublicKey(String encodedPublicKey) { 
    try { 
     String str = new String(Base64.decode(encodedPublicKey)); 
     byte[] decodedKey = Base64.decode(str); 
     KeyFactory keyFactory = KeyFactory.getInstance(KEY_FACTORY_ALGORITHM); 
     return keyFactory.generatePublic(new X509EncodedKeySpec(decodedKey)); 
    } catch (NoSuchAlgorithmException e) { 
     throw new RuntimeException(e); 
    } catch (InvalidKeySpecException e) { 
     e.printStackTrace(); 
     Log.e(TAG, "Invalid key specification."); 
     throw new IllegalArgumentException(e); 
    } catch (Base64DecoderException e) { 
     Log.e(TAG, "Base64 decoding failed."); 
     throw new IllegalArgumentException(e); 
    } 
}