2016-06-30 42 views
11

Ricevo molte eccezioni nel rapporto sugli arresti anomali per la mia app in Google Store. Qualcuno può capirmi cosa potrebbe causare questo? Sto usando Android: targetSdkVersion = 19Fatturazione InApp: java.lang.SecurityException Richiede READ_PHONE_STATE

java.lang.SecurityException: Requires READ_PHONE_STATE: Neither user 10131 nor current process has android.permission.READ_PHONE_STATE. 
    at android.os.Parcel.readException(Parcel.java:1546) 
    at android.os.Parcel.readException(Parcel.java:1499) 
    at com.android.vending.billing.IInAppBillingService$Stub$Proxy.getSkuDetails(IInAppBillingService.java:251) 
    at com.inapp.util.IabHelper.querySkuDetails(IabHelper.java:920) 
    at com.inapp.util.IabHelper.queryInventory(IabHelper.java:550) 
    at com.inapp.util.IabHelper.queryInventory(IabHelper.java:522) 
    at com.inapp.util.IabHelper$2.run(IabHelper.java:617) 
    at java.lang.Thread.run(Thread.java:818) 
+0

La sua probabilmente quello che dice l'eccezione, il vostro manca il permesso READ_PHONE_STATE –

+2

credo che sia più probabile è nel manifesto, ma non è stato concesso su dispositivi Marshmallow. https://developer.android.com/training/permissions/requesting.html – DeeV

+0

Ricorda che anche se hai come target Api-19, gli utenti su Marshmallow possono revocare manualmente l'autorizzazione dopo l'installazione. –

risposta

-7

aggiungere l'autorizzazione appropriato nel AndroidManifest.xml

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
2

Anche se Google ha confermato di aver spedito l'aggiornamento con la correzione, ma il seguente blocco try cattura almeno impedisce il crollo

int querySkuDetails(String itemType, Inventory inv, List<String> moreSkus) 
           throws RemoteException, JSONException { 
     logDebug("Querying SKU details."); 
     ArrayList<String> skuList = new ArrayList<String>(); 
     skuList.addAll(inv.getAllOwnedSkus(itemType)); 
     if (moreSkus != null) { 
      for (String sku : moreSkus) { 
       if (!skuList.contains(sku)) { 
        skuList.add(sku); 
       } 
      } 
     } 

     if (skuList.size() == 0) { 
      logDebug("queryPrices: nothing to do because there are no SKUs."); 
      return BILLING_RESPONSE_RESULT_OK; 
     } 

     // NullPointer crash reported through PlayStore forums 
     if (mService == null) { 
      return IABHELPER_SERVICE_UNAVAILABLE; 
     } 

     Bundle querySkus = new Bundle(); 
     querySkus.putStringArrayList(GET_SKU_DETAILS_ITEM_LIST, skuList); 

     try { 
        Bundle skuDetails = mService.getSkuDetails(3, mContext.getPackageName(), itemType, querySkus); 
        if (!skuDetails.containsKey(RESPONSE_GET_SKU_DETAILS_LIST)) { 
         int response = getResponseCodeFromBundle(skuDetails); 
         if (response != BILLING_RESPONSE_RESULT_OK) { 
          logDebug("getSkuDetails() failed: " + getResponseDesc(response)); 
          return response; 
         } 
         else { 
          logError("getSkuDetails() returned a bundle with neither an error nor a detail list."); 
          return IABHELPER_BAD_RESPONSE; 
         } 
        } 

        ArrayList<String> responseList = skuDetails.getStringArrayList(RESPONSE_GET_SKU_DETAILS_LIST); 

        for (String thisResponse : responseList) { 
         SkuDetails d = new SkuDetails(itemType, thisResponse); 
         logDebug("Got sku details: " + d); 
         inv.addSkuDetails(d); 
        } 
        return BILLING_RESPONSE_RESULT_OK; 
       } 
       // Security Exception due to missing permissions reported through PlayStore forums 
       catch (SecurityException e) 
       { 
        return IABHELPER_SERVICE_UNAVAILABLE; 
       } 
} 

Si prega di notare che l'unico cambiamento nelle querySkuDetails metodo int (Str ing itemType, Inventory inv, List moreSkus) è il blocco try catch dell'eccezione Security. Riposa tutto rimane uguale.