2016-06-30 11 views
11

Tôi nhận được nhiều ngoại lệ trong báo cáo sự cố cho ứng dụng của mình trong cửa hàng google. Ai đó có thể cho tôi biết điều gì có thể gây ra điều này? Tôi đang sử dụng android: targetSdkVersion = 19InApp Billing: java.lang.SecurityException Yêu cầu 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

Đó có thể là những gì ngoại lệ cho biết, bạn thiếu quyền READ_PHONE_STATE –

+2

Tôi nghĩ có nhiều khả năng nó nằm trong Tệp kê khai nhưng chưa được cấp trên thiết bị Marshmallow. https://developer.android.com/training/permissions/requesting.html – DeeV

+0

Hãy nhớ rằng mặc dù bạn đang nhắm mục tiêu Api-19, người dùng trên Marshmallow có thể thu hồi quyền sau khi cài đặt theo cách thủ công. –

Trả lời

-7

Thêm sự cho phép thích hợp trong AndroidManifest.xml của bạn

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

Mặc dù Google đã xác nhận đã vận chuyển các bản cập nhật có sửa chữa, nhưng khối try catch theo sau ít nhất ngăn chặn sự sụp đổ

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; 
       } 
} 

Xin lưu ý rằng sự thay đổi duy nhất trong phương pháp int querySkuDetails (Str ing itemType, Invory inv, List moreSkus) là khối try try của ngoại lệ bảo mật. Phần còn lại mọi thứ vẫn giữ nguyên.

Các vấn đề liên quan