React-native-iap: IOS рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕реНрд╡рддрдГ рдирд╡реАрдиреАрдХрд░рдг рд╕рджрд╕реНрдпрддрд╛ рдЕрднреА рднреА рд╕рдХреНрд░рд┐рдп рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рд╕рд┐рддре░ 2018  ┬╖  61рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dooboolab/react-native-iap

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрд╢реА-рдЖрдИрдПрдкреА . рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг

2.2.2

рдЬрд┐рди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ (рдЖрдИрдУрдПрд╕ рдпрд╛ рдПрдВрдбреНрд░реЙрдЗрдб рдпрд╛ рджреЛрдиреЛрдВ?)

рдЖрдИрдУрдПрд╕

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

рдЖрд░рдПрдирдЖрдИрдПрдкреА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдСрдЯреЛ-рдирд╡реАрдиреАрдХрд░рдг рд╕рджрд╕реНрдпрддрд╛ рдЕрднреА рднреА рд╕рдХреНрд░рд┐рдп рд╣реИ рдпрд╛ рдирд╣реАрдВ

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░

рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

export const isUserSubscriptionActive = async (subscriptionId) =>{
    // Get all the items that the user has
    const availablePurchases = await getAvailablePurchases();
    if(availablePurchases !== null && availablePurchases.length > 0){
        const subscription = availablePurchases.find((element)=>{
            return subscriptionId === element.productId;
        });
        if(subscription){
             // check for the autoRenewingAndroid flag. If it is false the sub period is over
              return subscription["autoRenewingAndroid"] == true;
            }
        }else{
            return false;
        }
    }
}

ios рдкрд░ рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдзреНрд╡рдЬ рдирд╣реАрдВ рд╣реИ, рдФрд░ getAvailablePurchases рд╡рд┐рдзрд┐ рдХреА рдЧрдИ рд╕рднреА рдЦрд░реАрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреА рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡реЗ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рднреА рдЬреЛ рдЗрд╕ рд╕рдордп рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИрдВред

рдХреНрдпрд╛ рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рд╕рд╛рджрд░,
рдорд╛рд░реНрдХреЛрд╕

ЁЯУ▒ iOS ЁЯЪ╢ЁЯП╗ stale

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣рд╛рдВ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рдЖрдИрдУрдПрд╕ рджреЛрдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдИрдУрдПрд╕ рдкрд░ рдареАрдХ рд╕реЗ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд╡реАрдирддрдо рд░рд╕реАрдж рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИ:

import * as RNIap from 'react-native-iap';
import {ITUNES_CONNECT_SHARED_SECRET} from 'react-native-dotenv';

const SUBSCRIPTIONS = {
  // This is an example, we actually have this forked by iOS / Android environments
  ALL: ['monthlySubscriptionId', 'yearlySubscriptionId'],
}

async function isSubscriptionActive() {
  if (Platform.OS === 'ios') {
    const availablePurchases = await RNIap.getAvailablePurchases();
    const sortedAvailablePurchases = availablePurchases.sort(
      (a, b) => b.transactionDate - a.transactionDate
    );
    const latestAvailableReceipt = sortedAvailablePurchases[0].transactionReceipt;

    const isTestEnvironment = __DEV__;
    const decodedReceipt = await RNIap.validateReceiptIos(
      {
        'receipt-data': latestAvailableReceipt,
        password: ITUNES_CONNECT_SHARED_SECRET,
      },
      isTestEnvironment
    );
    const {latest_receipt_info: latestReceiptInfo} = decodedReceipt;
    const isSubValid = !!latestReceiptInfo.find(receipt => {
      const expirationInMilliseconds = Number(receipt.expires_date_ms);
      const nowInMilliseconds = Date.now();
      return expirationInMilliseconds > nowInMilliseconds;
    });
    return isSubValid;
  }

  if (Platform.OS === 'android') {
    // When an active subscription expires, it does not show up in
    // available purchases anymore, therefore we can use the length
    // of the availablePurchases array to determine whether or not
    // they have an active subscription.
    const availablePurchases = await RNIap.getAvailablePurchases();

    for (let i = 0; i < availablePurchases.length; i++) {
      if (SUBSCRIPTIONS.ALL.includes(availablePurchases[i].productId)) {
        return true;
      }
    }
    return false;
  }
} 

рд╕рднреА 61 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдЗрд╕рдХрд╛ рднреА рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЛ рдореИрдВ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕рд╕реЗ рдореИрдВ рдпрд╣ рдЗрдХрдЯреНрдард╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдИрдЯреНрдпреВрдиреНрд╕ рдХрдиреЗрдХреНрдЯ рдореЗрдВ "рд╕рд╛рдЭрд╛ рд░рд╣рд╕реНрдп" рдмрдирд╛рдХрд░ рдФрд░ рдЗрд╕реЗ 'рдкрд╛рд╕рд╡рд░реНрдб' рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд░рд┐рд╕реАрдкреНрдЯрд┐рдпреЛ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдПрдХ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдХреЛрдб рд╣реЛрдЧрд╛ рдЬреЛ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреА рд╕рддреНрдпрд╛рдкрди рд╕реНрдерд┐рддрд┐ рдФрд░ рдХреБрдВрдЬреА рдирд╡реАрдирддрдо_рд░рд╕реАрдж, рдирд╡реАрдирддрдо_рд░рд╕реАрдж_рдЗрдиреНрдлреЛ, рдФрд░ рдирд╡реАрдирддрдо_рдПрдХреНрд╕рдкрд╛рдпрд░реНрдб_рд░рд╕реАрдж рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рд╕рджрд╕реНрдпрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рд╕рдЪрдореБрдЪ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрднреА рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВ рдореБрджреНрджреЛрдВ рдФрд░ рдРрдкреНрдкрд▓ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рд╕реЗ рдПрдХ рд╕рд╛рде рд░рдЦ рд░рд╣рд╛ рд╣реВрдВред рдпрджрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрджреНрджреЛрдВ рдореЗрдВ рджрдлрди рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдВрдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВ:
https://developer.apple.com/library/archive/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html

203 #237

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдбреЙрдХреНрд╕ рдореЗрдВ рдЗрд╕рдХреА рдкреВрд░реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдРрдк рд▓реЙрдиреНрдЪ рдкрд░ рдРрд╕рд╛ рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░реВрдВрдЧрд╛:

RNIap.getPurchaseHistory()
        .then(purchases => {
                RNIap.validateReceiptIos({
                   //Get receipt for the latest purchase
                    'receipt-data': purchases[purchases.length - 1].transactionReceipt,
                    'password': 'whateveryourpasswordis'
                }, __DEV__)
                    .then(receipt => {
                       //latest_receipt_info returns an array of objects each representing a renewal of the most 
                       //recently purchased item. Kinda confusing terminology
                        const renewalHistory = receipt.latest_receipt_info
                       //This returns the expiration date of the latest renewal of the latest purchase
                        const expiration = renewalHistory[renewalHistory.length - 1].expires_date_ms
                       //Boolean for whether it has expired. Can use in your app to enable/disable subscription
                        console.log(expiration > Date.now())
                    })
                    .catch(error => console.log(`Error`))
        })

@рдХреЗрд╡рд┐рдирдПрд╢реЗрд░рд┐рдХ

рдкреНрд░рддрд┐рднрд╛рд╢рд╛рд▓реА!

рдмрд╕ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЬреЛ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрддрдиреА рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реИрдВ;

  1. рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдХреЙрдиреНрд╕реНрдЯ рд╕рдорд╛рдкреНрддрд┐ = рдирд╡реАрдиреАрдХрд░рдг рдЗрддрд┐рд╣рд╛рд╕ [рдирд╡реАрдХрд░рдг рдЗрддрд┐рд╣рд╛рд╕ред рд▓рдВрдмрд╛рдИ - 1]ред рд╕рдорд╛рдкреНрддрд┐_рдбреЗрдЯ_рдПрдордПрд╕

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп (рд╢рд╛рдпрдж рд╕рд┐рд░реНрдл рдПрдХ рдЯрд╛рдЗрдкреЛ)

рдХрд╛рд╕реНрдЯ рд╕рдорд╛рдкреНрддрд┐ =

2) рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ 'рдкрд╛рд╕рд╡рд░реНрдб' рдХреНрдпрд╛ рд╣реИ: 'рдЬреЛ рднреА рдЖрдкрдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб рд╣реИ':

рдЖрдк рдЕрдкрдиреЗ рдЗрди рдРрдк рдкреИрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕рд╛рдЭрд╛ рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдРрдк рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдЪрд░рдг рдпрд╣рд╛рдБ рд╣реИрдВ: https://www.appypie.com/faqs/how-can-i-get-shared-secret-key-for-in-app-purchase

+1 рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж @dooboolab рдЖрдк рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЕрд▓рдЧ рд╣реИрдВред рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдореИрдВ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд╕рд╛рджрд░

@рдХреЗрд╡рд┐рдирдПрд╢реЗрд░рд┐рдХ

рд╕реНрд╡рддрдГ рдирд╡реАрдиреАрдХрд░рдг рд╕рджрд╕реНрдпрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХреНрд╕рдкрд╛рдпрд░реА_рдбреЗрдЯ_рдПрдордПрд╕ рдкрд╣рд▓реА рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рд╣реИ, рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ:

  1. рдПрдХ рд╕рджрд╕реНрдпрддрд╛ рдЖрдЗрдЯрдо рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ
  2. рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рдЬрд╛рдВрдЪреЗрдВ (рдЬреИрд╕реЗ 5 рдорд┐рдирдЯ рдмрд╛рдж)
  3. 10 рдорд┐рдирдЯ рдЗрдВрддрдЬрд╛рд░
  4. рд╕рджрд╕реНрдпрддрд╛ рдЕрднреА рднреА рд╕рдХреНрд░рд┐рдп рд▓рдЧрддреА рд╣реИ рд╕реНрд╡рддрдГ рдирд╡реАрдиреАрдХрд░рдг рд╕рджрд╕реНрдпрддрд╛ рд╣реИ
  5. рдЕрдЧрд░ рдореИрдВ рдЬрд╛рдВрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдВрддрд┐рдо рдирд╡реАрдиреАрдХрд░рдг рд░рд╕реАрдж рдХреА рд╕рдорд╛рдкреНрддрд┐ рдЕрднреА рднреА рдмрд┐рдВрджреБ 2 рдХреЗ рд╕рдорд╛рди рд╣реИ

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдореЗрд░рд╛ рдмреБрд░рд╛, рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рдЕрдкрдбреЗрдЯ рдХреА рдЧрдИ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдпрд╣рд╛рдВ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рднреА рдЗрд╕реА рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рд╣реИред

рд╕рд╛рджрд░

  1. рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдХреЙрдиреНрд╕реНрдЯ рд╕рдорд╛рдкреНрддрд┐ = рдирд╡реАрдиреАрдХрд░рдг рдЗрддрд┐рд╣рд╛рд╕ [рдирд╡реАрдХрд░рдг рдЗрддрд┐рд╣рд╛рд╕ред рд▓рдВрдмрд╛рдИ - 1]ред рд╕рдорд╛рдкреНрддрд┐_рдбреЗрдЯ_рдПрдордПрд╕

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп (рд╢рд╛рдпрдж рд╕рд┐рд░реНрдл рдПрдХ рдЯрд╛рдЗрдкреЛ)

рдХрд╛рд╕реНрдЯ рд╕рдорд╛рдкреНрддрд┐ =

рдУрд╣ рд╣рд╛рдБ рдЖрдк рд╕рд╣реА рд╣реИрдВ, рд╡рд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЕрд░реНрде рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдмрджрд▓рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рджред

рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рдХреЗ рд╕рд╛рде рд╡рд╣ рд╕рдЯреАрдХ рдкрд░рд┐рджреГрд╢реНрдп рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рд╛рдорд╛рди рдерд╛ рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕реНрд╡рдд: рдирд╡реАрдиреАрдХрд░рдг рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрдкрдиреЗ рдЖрдк рд╣рд▓ рд╣реЛ рдЧрдпрд╛ (рдЬреЛ рдореБрдЭреЗ рдЪрд┐рдВрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрддрдиреА рдЖрдИрдбреА рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ)ред рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреЛ рдореБрджреНрджрд╛ рдерд╛ рд╡рд╣ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдРрдкреНрдкрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рдирд╡реАрдиреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдлрд░ рдЕрд╡рдзрд┐ рдЫреЛрдбрд╝рдиреА рдЪрд╛рд╣рд┐рдПред SO рдкрд░ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рддреА рд╣реИ: https://stackoverflow.com/questions/42158460/autorenewable-subscription-iap-renewing-after-expiry-date-in-sandbox

рдзрдиреНрдпрд╡рд╛рдж! рдмрдврд╝рд┐рдпрд╛ рдЬрд╛рдирдХрд╛рд░реА, рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @kevinEsherick рдХреЛрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╣

рд╣рд╛рдВред рдпрджрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХреЛрдИ PR рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рддреЛ рдореИрдВ readme рдореЗрдВ рдПрдХ рд╕рд╛рдл-рд╕реБрдерд░реЗ рдбреЙрдХреНрдЯрд░ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реВрдВрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рджред

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВред рдореИрдВрдиреЗ рд░реАрдбрдореА рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрддреНрддрд░ рдЕрдиреБрднрд╛рдЧ рдЬреЛрдбрд╝рд╛ рд╣реИред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП PR рджреЗ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдЕрдЧрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдкреАрдЖрд░ рдмрдирд╛рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ :)

рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рджреЛрдиреЛрдВред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рддрд░реАрдХреЗ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░рдирд╛ рдХрд┐ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рд╡реИрдз рд╕рджрд╕реНрдпрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред рдореИрдВ

рдпрджрд┐ рдЖрдк рдорд╛рдзреНрдпрдо рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрддреЗ рд╣реИрдВ рддреЛ @curiousdustin рдЗрд╕ рдкрд░ Apple рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрдпрд╛рдирдХ рд╣реИред рдЪреВрдВрдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдмреИрдХрдПрдВрдб рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЗрд╕рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд╕рдХреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рд╣рдорд╛рд░реА рдкрджреНрдзрддрд┐ getAvailablePurchases рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Android рдореЗрдВ availablePurchases рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ ios рд╕рджрд╕реНрдпрддрд╛ рдЙрддреНрдкрд╛рдж рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рддреЛ рдХреНрдпрд╛ рдЖрдк рд╕рдорд╛рдзрд╛рди рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ @marcosmartinez7 рдФрд░ @kevinEsherick рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ Apple рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ iOS рд╕рджрд╕реНрдпрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ?

Apple рдбреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдорд╛рдзреНрдпрдо рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рд╕рджрд╕реНрдпрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдХрд┐ рдореЗрд░реЗ рд▓реЗрдЦрди рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдЫреВрдЯ рдЧрдИ рд╣реИред рдореИрдВ рдЕрдм рдЗрд╕реЗ рдореИрдиреЗрдЬ рдХрд░ рд▓реВрдВрдЧрд╛ред
Apple рдордзреНрдп рд╣рдорд▓реЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдореЗрдВ receipt рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдк рдмрд╛рдж рдореЗрдВ рдЙрд╕ рд░рд╕реАрдж рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░рд╕реАрдж рд╡реИрдз рд╣реИ рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рдЕрднреА рднреА рдЙрдкрд▓рдмреНрдз рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрднреА рднреА react-native-iap рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕реНрд╡рдпрдВ рдХреЗ Apple рд╕рд░реНрд╡рд░ (рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдФрд░ рдкреНрд░реЛрдбрдХреНрд╢рди) рдХреЛ рд╕рддреНрдпрд╛рдкрди рд░рд╕реАрдж рдХрд╛ рд╕реАрдзрд╛ рдлрд╝реЗрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╢реБрдХреНрд░ рд╣реИ рдХрд┐ @ marcosmartinez7 рдФрд░ @kevinEsherick рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ ios рд╕рджрд╕реНрдпрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред

рд╣реЗ рджреЛрд╕реНрддреЛрдВ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдХреБрдЫ рджрд┐рдиреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдХрд╛рдо рдореЗрдВ рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдЙрд╕ рдкреАрдЖрд░ рдХреЛ рд░реАрдбрдореЗ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдорд╛ рдХрд░реВрдВрдЧрд╛ред @curiousdustin рдЬрд┐рд╕ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ рд╡рд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдбреЙрдХреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛ред рдореИрдВ рдЖрдЬ рд░рд╛рдд рдпрд╛ рдХрд▓ рдкреАрдЖрд░ рдЬрдорд╛ рдХрд░реВрдВрдЧрд╛ :)

рдЕрджреНрдпрддрди рдзрдиреНрдпрд╡рд╛рджред

рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдореИрдВрдиреЗ рдПрдХ рдФрд░ рдмрд╛рдд рджреЗрдЦреАред

'рд░рд╕реАрдж-рдбреЗрдЯрд╛': рдЦрд░реАрдж [рдЦрд░реАрджрд╛рд░реАред рд▓рдВрдмрд╛рдИ - 1]ред рд▓реЗрдирджреЗрди рд░рд╕реАрдж,
...
рдХреЙрдиреНрд╕реНрдЯ рд╕рдорд╛рдкреНрддрд┐ = рдирд╡реАрдиреАрдХрд░рдг рдЗрддрд┐рд╣рд╛рд╕ [рдирд╡реАрдиреАрдХрд░рдг рдЗрддрд┐рд╣рд╛рд╕ред рд▓рдВрдмрд╛рдИ - 1]ред рд╕рдорд╛рдкреНрддрд┐_рдбреЗрдЯ_рдПрдордПрд╕

рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдЦрд░реАрджрд╛рд░реА рдФрд░ рдирд╡реАрдиреАрдХрд░рдг рдЗрддрд┐рд╣рд╛рд╕ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХреНрд░рдо рдореЗрдВ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИрдВред рдХреНрдпрд╛ рд╣рдореЗрдВ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдпрд╛ рдХреБрдЫ рдФрд░ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ?

рдореЗрд░рд╛ рднреА рдпрд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реИред рдЦрд░реАрдж рдФрд░ рдирд╡реАрдиреАрдХрд░рдг рдЗрддрд┐рд╣рд╛рд╕ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрджреЗрд╢рд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рджреЗрд╡ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рдЖрдИрдУрдПрд╕ рджреЛрдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдИрдУрдПрд╕ рдкрд░ рдареАрдХ рд╕реЗ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд╡реАрдирддрдо рд░рд╕реАрдж рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИ:

import * as RNIap from 'react-native-iap';
import {ITUNES_CONNECT_SHARED_SECRET} from 'react-native-dotenv';

const SUBSCRIPTIONS = {
  // This is an example, we actually have this forked by iOS / Android environments
  ALL: ['monthlySubscriptionId', 'yearlySubscriptionId'],
}

async function isSubscriptionActive() {
  if (Platform.OS === 'ios') {
    const availablePurchases = await RNIap.getAvailablePurchases();
    const sortedAvailablePurchases = availablePurchases.sort(
      (a, b) => b.transactionDate - a.transactionDate
    );
    const latestAvailableReceipt = sortedAvailablePurchases[0].transactionReceipt;

    const isTestEnvironment = __DEV__;
    const decodedReceipt = await RNIap.validateReceiptIos(
      {
        'receipt-data': latestAvailableReceipt,
        password: ITUNES_CONNECT_SHARED_SECRET,
      },
      isTestEnvironment
    );
    const {latest_receipt_info: latestReceiptInfo} = decodedReceipt;
    const isSubValid = !!latestReceiptInfo.find(receipt => {
      const expirationInMilliseconds = Number(receipt.expires_date_ms);
      const nowInMilliseconds = Date.now();
      return expirationInMilliseconds > nowInMilliseconds;
    });
    return isSubValid;
  }

  if (Platform.OS === 'android') {
    // When an active subscription expires, it does not show up in
    // available purchases anymore, therefore we can use the length
    // of the availablePurchases array to determine whether or not
    // they have an active subscription.
    const availablePurchases = await RNIap.getAvailablePurchases();

    for (let i = 0; i < availablePurchases.length; i++) {
      if (SUBSCRIPTIONS.ALL.includes(availablePurchases[i].productId)) {
        return true;
      }
    }
    return false;
  }
} 

@andrewze

рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░рд┐рджреГрд╢реНрдп рдкрд░, рдпрджрд┐ рд╕рджрд╕реНрдпрддрд╛ рд╕реНрд╡рддрдГ-рдирд╡реАрдХрд░рдгреАрдп рд╣реИ, рддреЛ рдЗрд╕реЗ рдЙрдкрд▓рдмреНрдз рдЦрд░реАрдж рдкрд░ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

@curiousdustin @andrewzey рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рдЦрд░реАрджрд╛рд░реА рдХрд╛ рдЖрджреЗрд╢ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдирд╡реАрдиреАрдХрд░рдг рдЗрддрд┐рд╣рд╛рд╕/latest_receipt_info, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрд╢рд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЦрд░реАрджрд╛рд░реА рдХрд╛ рдЖрджреЗрд╢ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдХреЛрдИ рдХрд╛рд░рдг рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рдерд╛ред рдШрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдЗрд╕реЗ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рджреЗрдЦ рд▓реВрдВрдЧрд╛ред рдЬрдм рддрдХ рд╣рдо рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд▓реЗрддреЗ, рддрдм рддрдХ рдореИрдВ рдкреАрдЖрд░ рдЬрдорд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рддреЛ рдХрд╛рд░рдг рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХреЛ рдЦрд░реАрджрд╛рд░реА рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдорд╛рдкреНрддрд┐_рдбреЗрдЯ_рдПрдордПрд╕ рд╡рд╣реА рджреЗрддрд╛ рд╣реИ рдЪрд╛рд╣реЗ рдЖрдкрдиреЗ рдХрд┐рд╕ рдЦрд░реАрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрддрд╛рдЫ рдХреА рд╣реЛред рдХреНрдпрд╛ рдпрд╣ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ? рдпрд╛ рдХреНрдпрд╛ рдХреБрдЫ рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЫрдБрдЯрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЬрд╛рдирдиреЗ рджреЗрдВред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЦрд░реАрджрд╛рд░реА рдХрд╛рд▓рд╛рдиреБрдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЖрджреЗрд╢рд┐рдд рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

@kevinEsherick рдзрдиреНрдпрд╡рд╛рдж! рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рди рддреЛ рдЦрд░реАрдж рдФрд░ рди рд╣реА рдирд╡реАрдиреАрдХрд░рдг рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

@kevinEsherick @andrewzey рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдкрд░ PR рджреЗ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рдо рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдкреАрдбрд╝рд┐рдд рд╣реИрдВред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдРрдк рд▓реЙрдиреНрдЪ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдареАрдХ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ =)ред

рдореИрдВ рдЕрдкрдиреА рдЖрдЦрд┐рд░реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдмрд╛рддрдЪреАрдд рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рдХреБрдЫ рдРрд╕реЗ рдореБрджреНрджреЗ рдЙрдард╛рдП рдЬреЛ рдЕрдирд╕реБрд▓рдЭреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдКрдкрд░ рджреЗрдЦреЗрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдЗрд╕реЗ рд╕реБрд▓рдЭрд╛ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рдкреАрдЖрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред

@kevinEsherick рдЖрд╣ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рд╡рд╣ рдпрд╛рдж рдЖрдпрд╛ред

рдкреНрд░рддреНрдпреЗрдХ рдирд╡реАрдиреАрдХрд░рдг рд░рд╕реАрдж рдкрд░ expires_date_ms рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реИред рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдЧрд▓рдд рд╕рдордЭрд╛? рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдбреАрдХреЛрдбреЗрдб рд░рд╕реАрдж рд╕реЗ рдЬреБрдбрд╝реА рдирд╡реАрдиреАрдХрд░рдг рд░рд╕реАрдж рд╕рд░рдгреА рд╡рд╣реА рд╣реИ, рдЪрд╛рд╣реЗ рдХрд┐рд╕реА рднреА рд░рд╕реАрдж рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕рд╣реА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:

const sortedAvailablePurchases = availablePurchases.sort(
      (a, b) => b.transactionDate - a.transactionDate
    );

рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рд╕реЗрд╡рд╛ рдореЗрдВ рдХрд┐рдпрд╛, рдФрд░ рдРрдкреНрдкрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреА рднрд░рдкрд╛рдИ рдХреАред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдСрдЯреЛ-рдирд╡реАрдиреАрдХрд░рдг рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреНрд░рд╛рдкреНрддрд┐рдпреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдПрдХ рд╕реЙрд░реНрдЯ рдСрдкрд░реЗрд╢рди рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реЛрдЧрд╛ред

рдкреАрдЖрд░ рдкрд░ рдХреЛрдИ рдИрдЯреАрдП? рдореИрдВ рдЗрд╕ рдкреИрдХреЗрдЬ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред

@schhumannd рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкреАрдЖрд░ рдХреЗрд╡рд▓ рдбреЙрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛, рдЖрдк рдЕрдм react-native-iap рд╣реИрдВред

рдореИрдВрдиреЗ рдкреБрд╖реНрдЯрд┐ рдХреА рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рдРрдк рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: https://itunes.apple.com/us/app/rp-diet/id1330041267?ls=1&mt=8

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреАрдЖрд░ рдмрдирд╛рдЙрдВрдЧрд╛ (рдореЗрд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдЯреНрд░реЗрд▓реЛ рдореЗрдВ "рдУрдПрд╕рдПрд╕ рдХреЛ рд╡рд╛рдкрд╕ рджреЗрдВ" рд╕реВрдЪреА рдореЗрдВ рд╣реИ), рд▓реЗрдХрд┐рди рдмреНрд▓реИрдХ рдлреНрд░рд╛рдЗрдбреЗ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдкрд╛рдЧрд▓рдкрди рдХреЗ рдмрд╛рдж

@schhumannd рдореИрдВ рджреВрд╕рд░рд╛ рдЬреЛ @andrewzey рдиреЗ рдХрд╣рд╛ред рдПрдХ рдкреАрдЖрд░ рдЬреЛ рдХреБрдЫ рднреА рдХрд╣реЗрдЧрд╛ рд╡рд╣ рдпрд╣рд╛рдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рдиреЗ рдХрд╛ рдЕрд░реНрде рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╛рддреНрд░рд╛ рдФрд░ рд╡реНрдпрд╕реНрдд рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдШрдВрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рд╢реНрд░рд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдкреАрдЖрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЕрднреА рднреА рдЬрд▓реНрдж рд╣реА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдФрд░ рдЪрд╛рд╣реЗ рддреЛ рдЗрд╕ рдмреАрдЪ рдХрджрдо рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ @andrewzey рдмрдзрд╛рдИ рд╣реЛ рдпрд╛рд░! рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рджреВрдВрдЧрд╛!

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рдЖрдИрдУрдПрд╕ рдореЗрдВ рдСрдЯреЛ-рдирд╡реАрдиреАрдХрд░рдг рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рддрд╛ рд╣реИ рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рдЙрдЬрд╛рдЧрд░ рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐ "рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб" рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореЗрд░реА рдУрд░ рд╕реЗ рдЕрдЯрдХрд▓реЗрдВ рд╣реИрдВ рдФрд░ рдореИрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдиреАрдЪреЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореИрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд▓рд╛рдн рдХреЗ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдореЗрдВ рдСрдЯреЛ-рдирд╡реАрдиреАрдХрд░рдг рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╣реА рддрд░реАрдХреЗ рдкрд░ рд╢реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЧрд┐рдпрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдФрд░ рд╢реЛрдз рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА / рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕рдиреЗ рдореБрдЭреЗ рдореВрд▓ StoreKit API(рдУрдВ) рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЬреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд┐рдпрд╛ред

рдпрд╣ рд░рд╛рдЗрдЯ-рдЕрдк рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдЕрдм рддрдХ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рджреЗрд╢реА рдЖрдИрдУрдПрд╕ рдРрдк рджреНрд╡рд╛рд░рд╛ рд╕рджрд╕реНрдпрддрд╛ рдЦрд░реАрдж, рд╕рддреНрдпрд╛рдкрди рдФрд░ рдмрд╣рд╛рд▓реА рдХреЛ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: https://www.raywenderlich.com/659-in-app-purchases-auto -рдирд╡реАрдХрд░рдгреАрдп-рд╕рджрд╕реНрдпрддрд╛-рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдФрд░ рдЬрдмрдХрд┐ рд╕рднреА рдПрдкреАрдЖрдИ react-native-iap рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд╡реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореБрдЭреЗ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ appStoreReceiptUrl ред

StoreKit appStoreReceiptUrl рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореЗрд░реА рд╕рдордЭ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдИрдУрдПрд╕ рдРрдк рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдЦрд░реАрдж/рд░рд╕реАрдж рдЬрд╛рдирдХрд╛рд░реА рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред рдЬрдмрдХрд┐ рдореИрдВ рдЗрд╕реЗ react-native-iap рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдФрд░ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрддрд╛ рд╣реВрдВ, рдпрд╣ рд╕рдВрджрд░реНрднрд┐рдд рдЖрд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдВрддрд░ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди react-native-iap рдПрдкреАрдЖрдИ StoreKit рдХреЗ restoreCompletedTransactions рдкрд░ рдПрдХ рдЕрд╕рдлрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдВрддрддрдГ getPurchaseHistory рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ react-native-iap API рдХреЛ iOS рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд╡рд░реНрддрдорд╛рди рдРрдк рд░рд╕реАрдж ( appStoreReceiptUrl рдорд╛рдзреНрдпрдо рд╕реЗ) рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ
  • рд░рд╕реАрдж рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ
  • рдпрджрд┐ appStoreReceiptUrl рд░рд┐рдХреНрдд рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдХ "рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛" рдЖрд░рдВрдн рдХрд░реЗрдВ рдЬреЛ рддрдм appStoreReceiptUrl рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рддреНрдпрд╛рдкрди рддрд░реНрдХ рдХрд╛ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рд╣рд╛рд▓рд╛рдВрдХрд┐?

рджреЛрдмрд╛рд░рд╛, рдореИрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╛ рд╕рдВрджрд░реНрднрд┐рдд рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЧрд▓рдд рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВред

@sellmeadog

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдЖрд▓реЗрдЦ рдореЗрдВ рднреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдиреЛрдЯ: рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдРрдк рд╕реЗрд▓реНрдлреА рд╕реЗрд╡рд╛ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдЬреЛ рд░рд╕реАрджреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ рдРрдкреНрдкрд▓ рдХреА рд░рд╕реАрдж рд╕рддреНрдпрд╛рдкрди рд╕реЗрд╡рд╛ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рд╕реЗрдЯ рдХрд░рдиреЗ рдкрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдХреЗрдВрджреНрд░рд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ "рдзреЛрдЦрд╛" рд╣реИред рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдРрдк рдореЗрдВ, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдРрдк рдирд╣реАрдВред

рдореБрдЭреЗ рдкреВрд░реА рдСрдЯреЛ-рдирд╡реАрдХрд░рдгреАрдп рд╕рджрд╕реНрдпрддрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рддреНрдп рдХреЗ рдПрдХрд▓ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмреИрдХрдПрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

  • рд╕рднреА рд▓реЗрди-рджреЗрди рдбреЗрдЯрд╛ рддреБрд░рдВрдд рдЕрдкрдиреЗ рдмреИрдХрдПрдВрдб рдкрд░ рднреЗрдЬреЗрдВ
  • рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рднреЗрдЬрдиреЗ рдХреЗ рдХреБрдЫ рд╕рд╛рдзрди рдкреНрд░рджрд╛рди рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЦрд░реАрдж рдмрд╣рд╛рд▓ рдХрд░рдирд╛)
  • рд╕рдордп-рд╕рдордп рдкрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджрд┐рди рдореЗрдВ рдПрдХ рдмрд╛рд░) рдЕрдкрдиреЗ рдмреИрдХрдПрдВрдб рдкрд░ рд╕рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рд░рд╕реАрджреЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ
  • рд╕рджрд╕реНрдпрддрд╛ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдРрдк рдХреНрд╡реЗрд░реА рдмреИрдХрдПрдВрдб рдЬреИрд╕реЗ рдкреГрд╖реНрдарднреВрдорд┐ рд╕реЗ рд╡рд╛рдкрд╕реАред

рдпрд╣ рдореБрдЭреЗ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдордЭрджрд╛рд░ рддрд░реАрдХрд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд░реВрдк рд╕реЗ рдСрдЯреЛ-рдирд╡реАрдХрд░рдгреАрдп рд╕рджрд╕реНрдпрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреНрдп рджреЗрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рддреЛ рдУрдкреАрдПрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдореЗрд░рд╛ рдЙрддреНрддрд░ рд╣реЛрдЧрд╛: рдмреИрдХрдПрдВрдб рдореЗрдВ рд╕рдордп-рд╕рдордп рдкрд░ рд╕рджрд╕реНрдпрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рди рдХрд┐ рджреГрд╢реНрдпрдкрдЯрд▓ рдореЗрдВ

@shumannd

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХреЛ рд╕рдордЭ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд░рд╕реАрдж рд╕рддреНрдпрд╛рдкрди рд╕рд░реНрд╡рд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрдкреНрдкрд▓ рдХреЗ рдЕрдкрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ :

рдЕрдкрдиреЗ рдРрдк рд╕реЗ рдРрдк рд╕реНрдЯреЛрд░ рд╕рд░реНрд╡рд░ /verifyReceipt рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рдХреЙрд▓ рди рдХрд░реЗрдВред

рдореИрдВрдиреЗ рд╕рдВрджрд░реНрднрд┐рдд рдЖрд▓реЗрдЦ рдореЗрдВ "рдзреЛрдЦрд╛" рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирдореВрдирд╛ рдРрдк рдХреА рд╕реАрдзреА рдХреЙрд▓ /verifyReceipt рд╕реАрдзреЗ рдРрдк рд╕реЗ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рдХреЛ рд╕реМрдВрдкрдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рдХреА рд╣реИред

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрдкреНрдкрд▓/рдРрдк рд╕реНрдЯреЛрд░ рд╕рддреНрдп рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕реНрд░реЛрдд рд╣реИ рдФрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Apple рдЕрдВрддрддрдГ рдЦрд░реАрдж, рдирд╡реАрдиреАрдХрд░рдг, рд░рджреНрджреАрдХрд░рдг рдЖрджрд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рд░рд╕реАрджреЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ StoreKit API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддрд╛ рд╣реИред

react-native-iap рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЦрд░реАрдж рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдЦрд░реАрдж рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрдк рд╕реНрдЯреЛрд░ рд░рд╕реАрдж рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рдПрдХ рдЕрдВрддрд░ рд╣реИ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ appStoreReceiptUrl рдкрд░ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд░рд╕реАрдж рддрдХ тАЛтАЛрдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдРрдкреНрдкрд▓ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рддрд░реАрдХрд╛ рд╣реИ рдбреЗрдЯрд╛ :

рд░рд╕реАрдж рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдРрдк рдХреА рд░рд╕реАрдж рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП appStoreReceiptURL рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ NSBundle ...

рдРрдкреНрдкрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рдиреЗ рдФрд░ рдореВрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ-рд╕реА/рд╕реНрд╡рд┐рдлреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдореИрдВ рдЬреЛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рд╡рд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

  • рдЦрд░реАрдж рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░реЗрдВ
  • рдПрдХ рдЙрддреНрдкрд╛рдж рдЦрд░реАрджреЗрдВ (рдЙрдкрднреЛрдЬреНрдп, рдЧреИрд░-рдЙрдкрднреЛрдЬреНрдп, рд╕рджрд╕реНрдпрддрд╛, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛)
  • рдЙрд╕ рдЦрд░реАрдж рдХреЗ рд▓рд┐рдП рд░рд╕реАрдж рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ appStoreReceiptUrl рджреНрд╡рд╛рд░рд╛ StoreKit рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИ
  • рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдРрдк рдХреЛ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рдкрд░ рд░рд╕реАрдж рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕реАрдзреЗ рдРрдк рд╕реНрдЯреЛрд░ /verifyReceipt )
  • рд░рджреНрджреАрдХрд░рдг рдФрд░/рдпрд╛ рдирд╡реАрдиреАрдХрд░рдг рд╣реЛрдиреЗ рдкрд░ appStoreReceiptUrl рдХреЛ StoreKit рджреНрд╡рд╛рд░рд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЙрдЪрд┐рдд StoreKit рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ)
  • рдЬрдм appStoreReceiptUrl рд╢реВрдиреНрдп рд╣реЛ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдирдП рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╣реИ, рдЖрджрд┐, рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдЦрд░реАрдж рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдРрдкреНрдкрд▓ / рдРрдкрд╕реНрдЯреЛрд░ рд╕реЗ рд╡рд░реНрддрдорд╛рди рд░рд╕реАрдж рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдФрд░ StoreKit рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ appStoreReceiptUrl рдкрд░ рдмрдирд╛рдП рд░рдЦреЗрдЧрд╛

рдлрд┐рд░, react-native-iap рд╣реИрдВрдбрд▓ рдЗрд╕ рд╕рдм рд╕реЗ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ рд░рд╕реАрдж рдбреЗрдЯрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ appStoreReceiptUrl ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рд░рд╕реАрдж рдХреЗ рд▓рд┐рдП рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ getReceipt рд╡рд┐рдзрд┐ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рдФрд░/рдпрд╛ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЦрд░реАрдж рдХреЗ рдкреНрд░рдмрдВрдзрди рдХрд╛ рдмреЛрдЭ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

Apple рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдХрд░рдирд╛ рдЬрд┐рддрдирд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдХрдард┐рди рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИред

appStoreReceiptUrl рдХреЛ StoreKit рджреНрд╡рд╛рд░рд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рднреА рд░рджреНрджреАрдХрд░рдг рдФрд░/рдпрд╛ рдирд╡реАрдиреАрдХрд░рдг рд╣реЛрддрд╛ рд╣реИ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЙрдЪрд┐рдд StoreKit рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ)

рдпрд╣ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ: рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдирд╡реАрдиреАрдХрд░рдг / рд░рджреНрджреАрдХрд░рдг / рд╕рдорд╛рдкреНрддрд┐ рдЖрджрд┐ рдХреА рд╕реВрдЪрдирд╛ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдкрдХреЗ рдРрдк рдХреЛ рдмрд╛рдж рдореЗрдВ рдПрдХ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЦреЛрд▓рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЙрддреНрдкрд╛рджрди рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕рдХрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@sellmeadog рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ: #356
рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рд░рд╕реАрджреЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рд╕реЗрдм рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рд╕рд░реНрд╡рд░/рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдз рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред

рд╣рд╛рдВред "рдХреЛрдИ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ - рдХреЛрдИ рд╕рддреНрдпрд╛рдкрди рдирд╣реАрдВ" рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдбрд╛рдЙрдирд╕рд╛рдЗрдбреНрд╕ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВред
рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдРрдк рд▓реЙрдиреНрдЪ рдкрд░ рд░рд╕реАрдж рдХрд╛ рддреЗрдЬрд╝ рд╕рддреНрдпрд╛рдкрди рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ UserDefaults рдпрд╛ Keychain рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрди-рдРрдк рдЦрд░реАрджрд╛рд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯреНрд░реИрдХ рдирд╣реАрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред StoreKit рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рднрдВрдбрд╛рд░рдг рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдЖрдкрдХреЛ рдХреИрд╕реЗ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ IOS рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ getAvailablePurchases рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ iTunes рдЦрд╛рддреЗ рдореЗрдВ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХреЗрдд рджрд┐рдП рдмрд┐рдирд╛ рдЕрдкрдиреА рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рдирд╡реАрдиреАрдХреГрдд рдпрд╛ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рд╕рджрд╕реНрдпрддрд╛ рдХреА рдкрд╣рд▓реА рдЦрд░реАрдж рдкрд░, рд╣рдо рд░рд╕реАрдж рдХреЛ рдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рдХреЛ рдЙрдирдХреЗ рдлрд╛рдпрд░рдмреЗрд╕ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред рд╣рдо рдЙрд╕ рдлрд╝рд╛рдпрд░рдмреЗрд╕ рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдЯрд╛рд░реНрдЯ-рдЕрдк рдкрд░ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЙрдирдХреЗ рдкрд╛рд╕ рд╕рдХреНрд░рд┐рдп рд╕рджрд╕реНрдпрддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рддрдм рдЖрддреА рд╣реИ рдЬрдм рд╡рд╣ рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рдмреАрдд рдЬрд╛рддреА рд╣реИ рдФрд░ рдирдИ рдмрд┐рд▓рд┐рдВрдЧ рдЕрд╡рдзрд┐ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреА рд╣реИред рд╣рдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рд╕реНрд╡рддрдГ рдирд╡реАрдиреАрдХреГрдд рдпрд╛ рд░рджреНрдж рд╣реЛ рдЧрдП рд╣реИрдВ? рдЬреИрд╕рд╛ рдХрд┐ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо getAvailablePurchases рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдИрдЯреНрдпреВрдиреНрд╕ рд▓реЙрдЧрд┐рди рдХреЛ рдПрдХ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдмрдЯрди рдХреА рддрд░рд╣ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ - рдЬреЛ рднрдпрд╛рдирдХ рдпреВрдЖрдИ рд╣реИ

рдореБрдЭреЗ рднреА рдпрд╣реА рдмрд╛рдд рдЖрд╢реНрдЪрд░реНрдп рд╣реИред

рд╣рдорд╛рд░реЗ рдРрдк рдореЗрдВ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдПрдкреАрдЖрдИ рд╣реИ рдЬреЛ рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдРрдкреНрдкрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдореВрд▓ рдЦрд░реАрдж рдХреЗ рдмрд╛рдж, рд░рд╕реАрдж рдбреЗрдЯрд╛ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдмрд╛рдж рдореЗрдВ рдЕрджреНрдпрддрди рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рддрд░рдл рд╕реЗ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЬрдм рднреА рдХреЛрдИ рдирд╡реАрдиреАрдХрд░рдг рд╣реЛрддрд╛ рд╣реИ рддреЛ рдРрдк рдХреЛ рдУрдПрд╕ рд╕реЗ рдПрдХ рдЕрджреНрдпрддрди рд▓реЗрдирджреЗрди/рд░рд╕реАрдж рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд▓рдЧрдЗрди рдРрдк рд▓реЙрдиреНрдЪ рдкрд░ рдЗрди рд░рд╕реАрджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд░рд╣рд╛ рд╣реИред (рдПрдХреНрд╕рдХреЛрдб рд╕реЗ рдЪрд▓рддреЗ рд╕рдордп рдореБрдЭреЗ рд▓реЙрдЧ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрдИ рд▓реЗрдирджреЗрди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ) рд▓реЗрдХрд┐рди, рдЬреЛ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬреЗрдПрд╕ рдХреЛрдб рдореЗрдВ рдЙрди рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдЯреИрдк рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИ?

@csumrell @curiousdustin рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдкреБрд╖реНрдЯрд┐ рд╣реИ? рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕реИрдВрдбрдмреЙрдХреНрд╕рд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдЦрд╛рддреЗ рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдХ рдФрд░, рдЧреИрд░-рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдЦрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрднрд╡рддрдГ рдЙрдирдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЦрд╛рддреЗ рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрд╣ рдореЙрдбреНрдпреВрд▓ рд▓реЙрдЧрд┐рди рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдП рдмрд┐рдирд╛ рдЦрд░реАрдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ рдХреА рд╣реИ рдХрд┐ getAvailablePurchases() рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЕрднреА рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдбреЙрдХреНрд╕ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдорддреМрд░ рдкрд░ рд░рд┐рд╕реНрдЯреЛрд░рд┐рдВрдЧ рдкрд░рдЪреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЖрдИрдУрдПрд╕ рдкрд░ред

@Hyochan @JJMoon рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рднреА рдорд┐рд▓ рд╕рдХрддреА рд╣реИ? рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрдПрд╕ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рдпрд╛ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдЦрд░реАрджрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдРрдк рд▓реЙрдиреНрдЪ рдкрд░ рдЦреЛрдЬреА рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХреА рдЧрдИ рдЦрд░реАрджрд╛рд░реА рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдХреГрдкрдпрд╛ рдореЗрд░реЗ рдкреНрд░рд╢реНрди 2 рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдКрдкрд░ рджреЗрдЦреЗрдВред

@curiousdustin рд╣рд╛рдБ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдореИрдВ рдЕрдкрдиреЗ рд╕рд╛рдорд╛рдиреНрдп iTunes рдЦрд╛рддреЗ рд╕реЗ рдФрд░ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдЦрд╛рддреЗ рд╕реЗ рд╕рд╛рдЗрди рдЖрдЙрдЯ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рддреЛ рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди/рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЙрддреНрдкрд╛рджрди рдореЗрдВ, рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдЦрд╛рддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рдкреЙрдк рдЕрдк рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдмреАрдЯрд╛ рдкрд░реАрдХреНрд╖рдг рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдЙрддреНрдкрд╛рджрди рдмреАрд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдЦрд╛рддреЗ рдирд╣реАрдВ рд╣реИрдВ, рдпрд╣ рдХреЗрд╡рд▓ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд▓ рдмреАрдЯрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдХреНрдпрд╛ рдорд┐рд▓рд╛ред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЧреИрд░-рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рднрдпрд╛рдирдХ рдпреВрдПрдХреНрд╕ рд╣реИ рдФрд░ рдХрд╛рдлреА рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред рдХреЛрдИ рднреА, рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдЕрдкрдиреЗ рдРрдк рд╕реЗ рдРрдк рд╕реНрдЯреЛрд░ рд╕рд░реНрд╡рд░/verifyReceipt рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрд░ рдХреЙрд▓ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рддреНрдпрд╛рдкрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╣рдореЗрд╢рд╛ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдирд╡реАрдирддрдо рдЕрдкрдбреЗрдЯ рдЯреВ рдбреЗрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХреЗрд╡рд▓ рдореВрд▓ рдкрд╣рд▓реА рдЦрд░реАрдж рд░рд╕реАрдж рдХреЗ рд╕рд╛рде рд▓реМрдЯрд╛рдПрдЧрд╛ред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рд╡реИрдз рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрд╢рд╛ рд╕рдмрд╕реЗ рдЕрджреНрдпрддрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА? рдпрд╛ рдпрд╣ рдЙрд╕ рд░рд╕реАрдж рдХреЗ рд▓рд┐рдП рд╕рдЦреНрддреА рд╕реЗ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВ?

рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдРрдкреНрдкрд▓ рдХреЗ рд╕рд╛рде рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рд╣реИ? рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ

@csumrell рдЖрдк

рдФрд░ рдореИрдВ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╣рдо рдПрдХ рджреВрд╕рд░реЗ рдХреА рдорджрдж рдХрд░ рд╕рдХреЗрдВред рдпрд╣ рд╕реБрдирдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдХрд┐ рдХреЛрдИ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рдЧрдпрд╛ред

@kevinEsherick рд╣рд╛рдБ рд▓реЗрдХрд┐рди getPurchaseHistory рдЖрдИрдЯреНрдпреВрдиреНрд╕ рд▓реЙрдЧрд┐рди рдкреЙрдкрдЕрдк рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧрд╛ред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реА рдмрд╛рд░ рдЦрд░реАрджрд╛рд░реА рдХрд░рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдореВрд▓ рд░рд╕реАрдж рдХреЛ рд╕реНрдерд╛рдиреАрдп рд╕рдВрдЧреНрд░рд╣рдг рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдлрд┐рд░ рдЕрдЧрд▓реА рдмрд┐рд▓рд┐рдВрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП getPurchaseHistory рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╡реИрд▓рд┐рдбреЗрдЯ рд░рд┐рд╕реАрдкреНрдЯрдЖрдИрдУрдПрд╕ (рдУрд░рд┐рдЬрд┐рдирд▓ рд░рд┐рд╕реАрдкреНрдЯ) рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдорд╛рдиреНрдп рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдорд╛рдиреНрдп рд░рд╕реАрджрдЖрдИрдУрдПрд╕ рдРрдкреНрдкрд▓ рд╕рд░реНрд╡рд░/рд╕рддреНрдпрд╛рдкрди рд░рд╕реАрдж рдХреА рддрд░рд╣ рдЕрджреНрдпрддрд┐рдд рд▓реЗрдирджреЗрди рд▓реМрдЯрд╛рддрд╛ рд╣реИ

@csumrell рдЧреЛрдЪрд╛ ред рд╡реИрд╕реЗ рдпрд╣ рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдореИрдВ рдЖрдЬ рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХреА рдЬрд╛рдБрдЪ рдХрд░реВрдБрдЧрд╛ред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: @csumrellValidReceiptIos рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдЦрд░реАрдж рдкрд░ рдирд╡реАрдирддрдо рдСрдЯреЛрд░рд┐рдиреНрдпреВрдЕрд▓ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рд╡реИрдз рддрд░реАрдХрд╛ рд╣реИред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдИрдЯреНрдпреВрдиреНрд╕ рд▓реЙрдЧрд┐рди рдкреНрд░реЙрдореНрдкреНрдЯ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЖ рд╕рдХрддрд╛)ред рджреЛрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд░рд╕реАрджреЛрдВ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЗрди рд░рд╕реАрджреЛрдВ рдХреЛ рдЖрдкрдХреЗ рдмреИрдХрдПрдВрдб рдкрд░ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ (~ 60k рд╡рд░реНрдг) рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╛рдЗрди рдЖрдЙрдЯ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдирдП рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдирд╡реАрдирддрдо рдЦрд░реАрдж рд░рд╕реАрдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░реЗрдВред рдЖрдк рдЙрдирдХреА рд╕рджрд╕реНрдпрддрд╛ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдВрдХреЗрдд рджреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдиреЗ рдЕрдВрддрд┐рдо рдмрд╛рд░ рдЪреЗрдХ рдХрд┐рдпрд╛ рдерд╛ред

@hyochan рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ $20.00 рдХрд╛ рд╡рд┐рддреНрдд рдкреЛрд╖рдг рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕реЗ рдЗрд╢реНрдпреВрд╣рдВрдЯ рдкрд░ рджреЗрдЦреЗрдВ

@hyochan рдЖрдк рдХрд┐рд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдлрдВрдбрд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рд╣рдордиреЗ рдпрд╣рд╛рдВ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХреБрдЫ рдкреНрд░рджрд╛рди рдХрд┐рдП рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдирд╡реАрдирддрдо рдЯрд┐рдкреНрдкрдгреА рд╕рдмрд╕реЗ рдХрдо рдореБрджреНрджреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдордЬрдмреВрдд рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЗрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреАрдЖрд░ рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рдзрди рджреЗ рд░рд╣реЗ рд╣реИрдВ? рдпрд╛ рдпрд╣ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЕрднреА рднреА рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

@рдХреЗрд╡рд┐рдирдПрд╢реЗрд░рд┐рдХ

рдХреНрдпрд╛ рдЖрдк рдЗрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреАрдЖрд░ рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рдзрди рджреЗ рд░рд╣реЗ рд╣реИрдВ?

рд╣рд╛рдВред рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреИрд╕реЗ issue hunt рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реА рдЕрдЧрд▓реА рдпреЛрдЬрдирд╛ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрдВрдбрд┐рдВрдЧ рдХрд░рдирд╛ рд╣реИред

@kevinEsherick рдЖрдк рд╕рд╣реА рд╣реИрдВ,

рдореИрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рд╕рдХреНрд░рд┐рдп рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдЬрд╛рдБрдЪрддреЗ рд╕рдордп рдЖрдИрдЯреНрдпреВрдиреНрд╕ рд▓реЙрдЧрд┐рди рдкреЙрдкрдЕрдк рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдБрдЧрд╛ред

рдЗрд╕ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдЯ рдЬреЛ @csumrell рдФрд░ рдореИрдВрдиреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ: рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЖрдИрдЯреНрдпреВрдиреНрд╕ рд▓реЙрдЧрд┐рди рдкреНрд░реЙрдореНрдкреНрдЯ рдЕрднреА рднреА рдкрд╣рд▓реЗ рд▓реЙрдиреНрдЪ рдкрд░ рдкреЙрдк рдЕрдк рдХрд░ рд░рд╣рд╛ рд╣реИред рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рддрдХ рдЖрдк рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддрдм рддрдХ рд╕рдм рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╢рд╛рдпрдж рдЬрдм рдЖрдИрдУрдПрд╕ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдЖрдИрдПрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ/рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдкрд░реАрдХреНрд╖рдг рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

рдЕрд░реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдЕрднреА рднреА рд╕рдореБрджрд╛рдп рдХреЗ рдзреНрдпрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрджрд┐ рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдмрдВрдж рд╣реЛ рд╕рдХрддреА рд╣реИред рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ "рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП" рдпрд╛ "рдЕрдЪреНрдЫрд╛ рдкрд╣рд▓рд╛ рдЕрдВрдХ" рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд▓реЗрдмрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдмрд╛рдж рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ред рдпрджрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдк-рдЯреВ-рдбреЗрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

рд╢рд╛рдпрдж рдЗрд╕ рдкреВрд░реЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдЦрд╛рд╕рдХрд░ рдЬрдм рдСрдЯреЛ-рдирд╡реАрдиреАрдХрд░рдг рд╕рджрд╕реНрдпрддрд╛ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ? рдПрдХ рдирд╡рд╛рдЧрдВрддреБрдХ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдк expires_date_ms рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ рдХрд┐ рд╕рджрд╕реНрдпрддрд╛ рдЕрднреА рднреА рд╕рдХреНрд░рд┐рдп рд╣реИ рдпрд╛ рдирд╣реАрдВ?

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рдПрдХ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реЛрдЧреА?

рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреА рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреА? рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рд╕рдордп рдорд┐рд▓реЗ рддреЛ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ?

@alexpchin рд╣рд╛рдБ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЯрди рджреЗрд╡ рд╕рдордп рдмрдЪрд╛рдПрдЧрд╛ рдФрд░ рдЖрдкрдХреЗ рдХрд░реНрдо рдХреНрд░рд┐рд╕реНрдЯрд▓ рд╕рд╛рдл рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ

рд╕рд╣рдордд! рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ #856 рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреА?

рдирдорд╕реНрддреЗ,

@andrewzey рдХреА рд╡рд┐рдзрд┐ рдиреЗ рдХрд▓ рддрдХ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рдЬрдм рд╣рдо рдЕрдЪрд╛рдирдХ рд╣рдорд╛рд░реЗ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд░рд╕реАрдж рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рдереЗ - рд╣рдореЗрдВ рд╡реИрдзReceiptIos() рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЖрдИрдУрдПрд╕ рд╕реЗ JSON рдкрд╛рд░реНрд╕ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдореИрдВ рдЗрд╕реЗ рд▓реЗрддрд╛ рд╣реВрдБ рдХреЛрдИ рдФрд░ рдЗрд╕рдореЗрдВ рдирд╣реАрдВ рднрд╛рдЧрд╛ рд╣реИ...? рдХрд▓ рдХреЗ рдмрд╛рдж рд╕реЗ рдЬреЛ рдПрдХрдорд╛рддреНрд░ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд╣ рдЖрдИрдЯреАрд╕реА рдкрд░ рдПрдХ рдкреНрд░реЛрдореЛ рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдерд╛ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рддрдм рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЪрд░ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХреЗред рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд░рд╕реАрдж JSON рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП? рдпрд╣ рд▓реМрдЯрд╛рдИ рдЧрдИ рдкреНрд░рддреНрдпреЗрдХ рд░рд╕реАрдж рдХреЗ рд▓рд┐рдП рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ - рди рдХрд┐ рдХреЗрд╡рд▓ рдХреНрд░рдордмрджреНрдз рдЙрдкрд▓рдмреНрдз рдЦрд░реАрдж рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ 0 рдкрд░ рд░рд╕реАрджред рдХреЛрдб рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдВрдбреНрд░рдпреВрдЬреА рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИ - рдореИрдВрдиреЗ рд╡реИрдз рд░рд╕реАрдж рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рд╡рд╣рд╛рдВ рдлреЗрдВрдХ рджреА рдЧрдИ рд╣реИред

рд╣рдо RN 0.61.4, RNIap: 4.4.2 рдФрд░ iOS 13.3.1 рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ

рд╣рдордиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ:

  • рдРрдк рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛
  • рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддрд╛
  • рдПрдХ рдирдП рдРрдк рд╕реАрдХреНрд░реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
  • рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░ рд╕рднреА рд░рд╕реАрджреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг - рдПрдХ рднреА рд░рд╕реАрдж рдХреЛ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛

рд╣рдо рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЬрдм рд╣рдо рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдЦрд░реАрджрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣рдо рдлрд┐рдирд┐рд╢рдЯреНрд░рд╛рдВрд╕реЗрдХреНрд╢рдирдЖрдИрдУрдПрд╕ рдХрд╛ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рдереЗ?

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо рдЗрд╕ рдСрдирд▓рд╛рдЗрди рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд╕реАрдж рдХреЛ рдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рд╣рдо рд╕рднреА рд░рд╕реАрдж рдореЗрдЯрд╛рдбреЗрдЯрд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

  isSubscriptionActive = async () => {
      const availablePurchases = await RNIap.getAvailablePurchases();
      const sortedAvailablePurchases = availablePurchases.sort(
        (a, b) => b.transactionDate - a.transactionDate
      );
      const latestAvailableReceipt = sortedAvailablePurchases[0].transactionReceipt;
      const isTestEnvironment = __DEV__;

      try {
        const decodedReceipt = await RNIap.validateReceiptIos(
          {
            'receipt-data': latestAvailableReceipt,
            password: Config.IN_APP_PURCHASE_SECRET,
          },
          isTestEnvironment
        );
        console.log('response!', decodedReceipt)
      } catch (error) {
        console.warn('Error validating receipt', error) // JSON PARSE ERROR HERE
      }
...

@andrewzey рдХреЛрдб рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреНрд░рд╢реНрди рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ Date.now() рд╡рд░реНрддрдорд╛рди рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдордп рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдВрддрд╣реАрди рд╕рджрд╕реНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВ

рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдРрдк рд╕реЗ рд░рд╕реАрдж рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛ рд╣реА рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рд╣реИ?

@doteric рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЗрд╕рдХреЗ рдирд┐рд░рд╛рд╢ рд╣реЛрдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд╣рд╛рдВ рдХрд░рддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдХреЗ рдмрдЬрд╛рдп рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЗрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдмрд╣реБрдд рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред
рдореИрдВ рд╕реЗрдм рдпрд╛ рдЕрдиреНрдп рдареЛрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрд╢реА рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╕рд╣реА рджрд╕реНрддрд╛рд╡реЗрдЬ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@doteric Yes Date.now() рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рд╕рдордп рд╣реИ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рднреА рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрд╣реБрдд рдХрдо рд╣реИ, рдФрд░ рдЕрдВрддрд╣реАрди рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдкрд░ рднреА рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдРрдк рдХреЛ рдЦреЛрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рд╡рд╛рдИ рдЬрд╣рд╛рдЬ рдореЛрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдРрдк рдХреЛ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреНрдп рд╕реБрд░рдХреНрд╖рд╛ рднреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рджрд┐рдирд╛рдВрдХ.рдЕрдм () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИред @captaincole рдореЗрд░реЗ рдкрд╛рд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рднреА рдкрдврд╝рд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рд╕рддреНрдпрд╛рдкрди рдирд┐рд░рд╛рд╢ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдРрдкреНрдкрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдкрдврд╝рд╛ рд╣реИ, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИред рдРрд╕рд╛ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░ рд▓реЗрддрд╛ рд╣реИред

@kevinEsherick @captaincole

рдЖрдИрдУрдПрд╕ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░рд╕реАрдж рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:

рдирдорд╕реНрддреЗ,

рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛, рдорд╛рдиреНрдп рд░рд╕реАрдж Ios рдФрд░ рдирд╡реАрдирддрдо_receipt_data (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд┐рдерд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрддрд┐_рдбреЗрдЯ_рдПрдордПрд╕ рдХреА рддреБрд▓рдирд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдПрдХреНрд╕рдХреЛрдб рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдЗрд╕рдиреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдореИрдВрдиреЗ рдЯреЗрд╕реНрдЯрдлреНрд▓рд╛рдЗрдЯ рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдбреАрдмрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рдЯреАрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд░рд╕реАрдж рдбреЗрдЯрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЯреЗрд╕реНрдЯрдлреНрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдореБрджреНрджрд╛ рдерд╛?

рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж!

рдирдорд╕реНрддреЗ,

рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛, рдорд╛рдиреНрдп рд░рд╕реАрдж Ios рдФрд░ рдирд╡реАрдирддрдо_receipt_data (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд┐рдерд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрддрд┐_рдбреЗрдЯ_рдПрдордПрд╕ рдХреА рддреБрд▓рдирд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдПрдХреНрд╕рдХреЛрдб рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдЗрд╕рдиреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдореИрдВрдиреЗ рдЯреЗрд╕реНрдЯрдлреНрд▓рд╛рдЗрдЯ рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдбреАрдмрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рдЯреАрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд░рд╕реАрдж рдбреЗрдЯрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЯреЗрд╕реНрдЯрдлреНрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдореБрджреНрджрд╛ рдерд╛?

рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж!

+1

@asobralr @ Somnus007 рдореИрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдк рдЯреЗрд╕реНрдЯрдлреНрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдЖрдИрдПрдкреА рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯреЗрд╕реНрдЯрдлрд▓рд╛рдЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦрд░реАрджрд╛рд░реА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Apple рдЙрддреНрдкрд╛рджрди рдЬреИрд╕реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЦрд╝рд░реАрджрд╛рд░реА рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

@asobralr @ Somnus007 рдореИрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдк рдЯреЗрд╕реНрдЯрдлреНрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдЖрдИрдПрдкреА рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯреЗрд╕реНрдЯрдлрд▓рд╛рдЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦрд░реАрджрд╛рд░реА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Apple рдЙрддреНрдкрд╛рджрди рдЬреИрд╕реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЦрд╝рд░реАрджрд╛рд░реА рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рд╕рд╣реАред рдЖрдк рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЬреЛ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИред рдореИрдВ

рд╣рд╛рдп @kevinEsherick , рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЖрдк рдЧрд▓рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ teslflight рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦрд░реАрджрд╛рд░реА рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЯреЗрд╕реНрдЯрдлреНрд▓рд╛рдЗрдЯ рдкрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдЦрд╛рддреЗ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрд╕рдХреЗ рдЕрд╕рд▓реА рд╕реЗрдм рдЦрд╛рддреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдИрдореЗрд▓ рдкрддрд╛ рд╣реИред рддрдм рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдмреАрдЯреАрдбрдмреНрд▓реВ, рдХреНрдпрд╛ рдЦрд░реАрдж рдЗрддрд┐рд╣рд╛рд╕ рдЙрддреНрдкрд╛рджрди рдПрдирд╡реА рдореЗрдВ рдЖрдИрдЯреНрдпреВрдиреНрд╕ рд▓реЙрдЧрд┐рди рдкреЙрдкрдЕрдк рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧрд╛?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ios 14 рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рддреЛрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ getAvailablePurchases() рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

chetstone picture chetstone  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Gribadze picture Gribadze  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zoftify picture zoftify  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

HamzaIkram2727 picture HamzaIkram2727  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

schumannd picture schumannd  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ