React-native-iap: рдЦрд░реАрдж рд╢реБрд░реВ рдХреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛, рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж рдХрднреА рднреА рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдЕрдкреНрд░реИрд▓ 2020  ┬╖  22рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dooboolab/react-native-iap

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

4.4.6 рд╣реИ

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг

0.61.5

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

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

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

purchaseUpdatedListener requestSubscription рдХреЙрд▓ рдХреЗ рдмрд╛рдж, purchaseUpdatedListener рдХреЛ рд╣рд░ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

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

рдЦрд░реАрдж рд╢реБрд░реВ рдХреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛, рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж рдХрднреА рднреА рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛

рдкрд░реАрдХреНрд╖рдгрд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг (рдПрдореБрд▓реЗрдЯрд░? рд░рд┐рдпрд▓ рдбрд┐рд╡рд╛рдЗрд╕?)

рдЕрд╕рд▓реА рдбрд┐рд╡рд╛рдЗрд╕

рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо

рдмрд╕ рд░реАрдбрдореА рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

ЁЯУ▒ iOS ЁЯХ╡я╕ПтАНтЩВя╕П need more investigation ЁЯЩП help wanted

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

рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ initConnection() рдХреЙрд▓ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдерд╛ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдерд╛ред
рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ README рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдмреЛрд▓реНрдб рднрд╛рдЧ рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

IOS рдкрд░ initConnection() , рдпрд╣ рдмрд╕ canMakePayments рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдФрд░ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдЯрд░реНрди __which рдЖрд╡рд╢реНрдпрдХ рд╣реИ ред__

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ "рдЖрдИрдУрдПрд╕ рдкрд░, рдпрд╣ рдмрд╕ рдХреИрдирдХреЗрдкрдкреЗрдореЗрдВрдЯреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛" рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ initConnection() рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рдерд╛ рдХрд┐ рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд╣реАрдВ рдерд╛

рдЦрд░реАрдж рд╢реНрд░реЛрддрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ initConnection() рдЬреЛрдбрд╝рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡рддрдГ # 1002 рдФрд░ # 756 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ

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

рдХреНрдпрд╛ рдХрд┐рд╕реА рдФрд░ рдХреЛ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ? @Strate рдиреЗ рдЖрдкрдХреЛ finishTransaction ?

@hyochan рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХреЙрд▓ рдРрдк рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реЛрддрд╛ рд╣реИ

@hyochan рдореИрдВрдиреЗ рдПрдХреНрд╕рдкреЛ-рдЗрди-рдРрдк-рдЦрд░реАрдж рдкреИрдХреЗрдЬ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ - рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдареАрдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ

@State рдореИрдВ рдЖрдкрдХрд╛ рдХреЛрдб рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕реНрд╡рдпрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдкрд╛ рд╕рдХрддрд╛ :(

рдпрд╣ рдореБрджреНрджрд╛ рдмрд┐рд▓рдХреБрд▓ рд╣реА рдирд┐рд░рд╛рдкрдж рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдкреВрд░реНрд╡ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ?

рдХреНрдпрд╛ рдХрд┐рд╕реА рдФрд░ рдХреЛ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ? @Strate рдиреЗ рдЖрдкрдХреЛ finishTransaction ?

рдпрд╣ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЦрд░реАрдж рдлрд┐рдирд┐рд╢рдЯреНрд░рд╛рдВрд╕ рдореЗрдВ рдПрдХ рддрд░реНрдХ рд╣реИ? рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрдкрдХреЛ рдЗрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХреЛ рдлрд┐рдирд┐рд╢рдЯреНрд░рд╛рдВрд╕ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@Sophrinix рдлрд┐рдирд┐рд╢рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди рдХреЛ purchaseUpdatedListener рдЕрдВрджрд░ рдХрд╣рд╛ рдЬрд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ

@hyochan рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ expo-in-app-purchase рдореЙрдбреНрдпреВрд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рд╣реИред @Sophrinix рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рддрд╛ рд╣реИред

Btw, рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рдерд╛: рдРрдк рдХреЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реА рд╢реНрд░реЛрддрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ, рдФрд░ рд╕рд┐рд░реНрдл рд░реАрдбрдореА рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд╣реИред

рдпрджрд┐ рдЖрдк рдирд┐рдореНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

"react": "16.8.1",
"react-native": "^0.59.10",
"react-native-iap": "4.3.0",

рд╕рдорд╕реНрдпрд╛ рддрдм рдЖрддреА рд╣реИ рдЬрдм рдЖрдк react-native-iap 4.4.4 рдФрд░ react-native рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг 0.60

@Sophrinix рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрдХреНрд╖ рдореЗрдВ requestPurchase рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рдХреБрдЫ рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

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

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ 4.3.0 рдХреЗ рдХрд╛рдо рдкрд░ рд▓реМрдЯ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдкрд╛рдЧрд▓ рд╣реЛ рд░рд╣рд╛ рдерд╛, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ 1h рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЕрдЧрд░ рдореИрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдБ, 4.3.4 4.4.3 рдХрд╛рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдареАрдХ рд╣реИ, рд╕рдорд╕реНрдпрд╛ 4.4.4 рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ

рдЕрдЧрд░ рдореИрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдБ, 4.3.4 4.4.3 рдХрд╛рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдареАрдХ рд╣реИ, рд╕рдорд╕реНрдпрд╛ 4.4.4 рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ

рдпрд╣рд╛рдБ рднреА, 4.4.8 рд╕реЗ 4.4.3 рддрдХ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ!

рдХреНрдпрд╛ рдХрд┐рд╕реА рдФрд░ рдХреЛ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ? @Strate рдиреЗ рдЖрдкрдХреЛ finishTransaction ?

рдореИрдВ 4.4.0 рдкрд░ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рдЦ рд░рд╣рд╛ рд╣реВрдВ - рдХрд┐рд╕реА рднреА рд╢реНрд░реЛрддрд╛ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ purchaseErrorSubscription ред

рдбрд╛рдЙрдирдЧреНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА рдкрдврд╝реЗрдВ, рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реВрдВ рдХрд┐ ...

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣ рдПрдХ рдЧрдВрднреАрд░ рдореБрджреНрджрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐:

  • рдпрд╣ рд╕рд░реНрд╡рд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЦрд░реАрджреА рдЬрд╛рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ
  • рдЬрдм рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЦрд░реАрджрд╛рд░реА рдХреЛ рд░рджреНрдж рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рд╕реНрдЯреЗрдЯ рд░реЛрд▓рдмреИрдХ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред

рдореИрдВ рдпрд╣ рднреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ 4.3.0 рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЖрд░рдПрди 0.62.2 рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рджреЗрд╢реА-рдЖрдИрдПрдкреА 4.4.8 рдХреЗ рд╕рд╛рде рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣реА рдореБрджреНрджрд╛ рдерд╛
рдореИрдВ рдХрд┐рд╕реА рддрд░рд╣ initConnection() рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдЪреВрдХ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ README рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЧрд╛рдпрдм рд╣реИ

4.4.8 рдкрд░ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╕рдордп iOS рдкрд░ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдерд╛ рдЬрд┐рд╕рдиреЗ рдХреБрдЫ рд╕рджрд╕реНрдпрддрд╛рдПрдБ рдкреВрд░реА рдирд╣реАрдВ рдХреАрдВред 4.4.3 рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рдЕрдм рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИред InitConnection () рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ? рдбреЙрдХреНрдЯрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рдирд╣реАрдВ рд╣реИ

рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ initConnection() рдХреЙрд▓ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдерд╛ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдерд╛ред
рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ README рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдмреЛрд▓реНрдб рднрд╛рдЧ рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

IOS рдкрд░ initConnection() , рдпрд╣ рдмрд╕ canMakePayments рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдФрд░ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдЯрд░реНрди __which рдЖрд╡рд╢реНрдпрдХ рд╣реИ ред__

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ "рдЖрдИрдУрдПрд╕ рдкрд░, рдпрд╣ рдмрд╕ рдХреИрдирдХреЗрдкрдкреЗрдореЗрдВрдЯреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛" рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ initConnection() рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рдерд╛ рдХрд┐ рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд╣реАрдВ рдерд╛

рдЦрд░реАрдж рд╢реНрд░реЛрддрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ initConnection() рдЬреЛрдбрд╝рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡рддрдГ # 1002 рдФрд░ # 756 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ

рдореИрдВ 4.4.9 рдкрд░ рд╣реВрдВ рдФрд░ рдЗрд╕ рдЯрд┐рдХрдЯ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдореБрджреНрджрд╛ рдореЗрд░реЗ рд╕рд╛рде рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИред
рд╢реНрд░реЛрддрд╛ рдХреЗрд╡рд▓ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдЦрд░реАрдж рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЗрд╕реЗ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВрдиреЗ react-native-iap/index.ts рдФрд░ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рд╕реАрдзреЗ рдореВрд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕рджрд╕реНрдпрддрд╛ рджреЗрдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ред
рдпрд╣ рдХрд┐рд╕реА рднреА рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ред (рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)

import { NativeModules, NativeEventEmitter } from 'react-native';
import { Observable } from 'rxjs/Observable';

const purchaseEvent = Observable.fromEvent(
  new NativeEventEmitter(NativeModules.RNIapIos),
  'purchase-updated'
);
const purchaseSubscription = purchaseEvent.subscribe((transactionData) => {
  // Trigger server receipt validation here...
});
const errorEvent = Observable.fromEvent(
  new NativeEventEmitter(NativeModules.RNIapIos),
  'purchase-error'
);
const errorSubscription = errorEvent.subscribe((errorData) => {
  // Handle errors here...
});

рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдореЗрдВ рднрд╛рдЧ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ initConnection() README рдХреЗ тАЛтАЛрдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдЬреЛрдбрд╝рд╛ рд╣реИ: # 1088, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рднреА рдореЗрд░реЗ рдХреЛрдб рдХреА рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред (рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдореЗрд░рд╛ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдВ ...)

рдореИрдВ рднреА v5.1.1 рдкрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред initConnection рдиреЗ рдЗрд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЦрд░реАрджрджрд╛рд░ рдкрд░ рд╢реНрд░реЛрддрд╛ рдХреЙрд▓рдмреИрдХ рдХрднреА рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ Android рдкрд░ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореЗрд░рд╛ рдХрд╛рдо рдпрд╣ рдерд╛ рдХрд┐ рд╡реЗрдзрд╢рд╛рд▓рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред

import React, { useContext, useEffect, useState } from 'react';
import { Alert, EmitterSubscription, Platform, NativeEventEmitter,
    NativeModules } from 'react-native';
import { connect } from 'react-redux';
import RNIap, {
    InAppPurchase,
    PurchaseError,
    SubscriptionPurchase,
    purchaseErrorListener,
    purchaseUpdatedListener,
} from 'react-native-iap';
import { Observable, Subscription } from 'rxjs';

const RNIAPEvent = new NativeEventEmitter(NativeModules.RNIapIos);
const purchaseObservable = new Observable((subscriber) => {
    RNIAPEvent.addListener('purchase-updated', (event) => {
        subscriber.next(event);
    })
})

const RNIAPErrorEvent = new NativeEventEmitter(NativeModules.RNIapIos);
const purchaseErrorObservable = new Observable((subscriber) => {
    RNIAPErrorEvent.addListener('purchase-error', (event) => {
        subscriber.next(event);
    })
})


const Wrapper = ({ ...props }) => {

    let purchaseUpdateSubscription: EmitterSubscription | Subscription | null = null;
    let purchaseErrorSubscription: EmitterSubscription | Subscription | null = null;

    const validateTransaction = async (purchase: SubscriptionPurchase) => {    
        return new Promise(async (resolve) => {
              //resolve(validationResponseFromYourBackend)
        }
    }

    const handleSubEvent = async (purchase: InAppPurchase | SubscriptionPurchase) => {
        const receipt = purchase.transactionReceipt;
        const purchaseToken = purchase.purchaseToken
        if (receipt) {
            try {
                const result = await validateTransaction(purchase);
                if (result.status === 200) {
                    RNIap.acknowledgePurchaseAndroid(purchaseToken).then(() => {
                        RNIap.finishTransaction(purchase, false)
                        .then(() => giveYourUserValue())
                        .catch((e) => {
                            //
                        })
                    })
                }
            } catch (err) {
                //
            }
        }
    }


    useEffect(() => {
        RNIap.initConnection()
            .then(() => {
                RNIap.flushFailedPurchasesCachedAsPendingAndroid().catch(() => {
                    // exception
                    })
                .then(() => {
                    if (Platform.OS === 'ios') {
                        //Documented implementation has issues purchaseUpdatedListener callback
                        purchaseUpdateSubscription = purchaseObservable.subscribe((purchase) => {
                            console.log('purchase observable', purchase)
                            handleSubEvent(purchase);
                        });

                        purchaseErrorSubscription = purchaseErrorObservable.subscribe((error) => {
                            console.log('purchaseErrorListener', error);
                        })

                    } else {
                        //for android use the documented method. Callbacks work.
                        purchaseUpdateSubscription = purchaseUpdatedListener(
                            (purchase: InAppPurchase | SubscriptionPurchase) => {
                                handleSubEvent(purchase);
                            }

                        );
                        purchaseErrorSubscription = purchaseErrorListener(
                            (error: PurchaseError) => {
                               console.log('purchaseErrorListener', error);
                            },
                        );
                    }

                })
            })
        return () => {
              // clear your listeners
             //eg if Subscription purchaseErrorSubscription.unsubscribe() 
            //eg if EmitterSubscription purchaseErrorSubscription.remove() 
        }
    }, []);

    return (
        <InAppSubContext.Provider
            value={{
                someValueYouWantPassedDown: 'theValue'
            }}
        >
            {props.children}
        </InAppSubContext.Provider>
    )
}

const mapState = (state) => ({ someProps: 'yeah' });

const InAppSubscriptionManager = connect(mapState)(Wrapper);

export default InAppSubscriptionManager;

рдЕрдм рдЖрдк рдЕрдкрдиреЗ App.tsx рдореЗрдВ рдЕрдкрдиреЗ рдРрдк рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


import InAppSubscriptionManager from './path/to/inAppSubscriptionManager';
const App = () => {

    return (
        <Provider store={store}>
                <InAppSubscriptionManager>

                    <AppNavigator />

                </InAppSubscriptionManager>
        </Provider>
    );
}

export default App;

рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХреАред рд╣рдо рдЬреВрди рдХреЗ рдмрд╛рдж рд╕реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╣реИред
рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЗрд╕рдХрд╛ рдЕрд╡рд▓реЛрдХрди рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдЖ (рд╣рдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)

      const purchaseEvent = new NativeEventEmitter(NativeModules.RNIapIos);
      const subscription = purchaseEvent.addListener(
        'purchase-updated',
        transactionData => {
          console.log('IAP-LOG purchase-updated');
          dispatch(validateRecepit(transactionData));
        }
      );
      const errorSubscription = purchaseEvent.addListener(
        'purchase-error',
        data => {
          crashlytics().log(`Purchase error ${JSON.stringify(data)}`);
          console.log('IAP-LOG purchase-error', data);
        }
      );
    };
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

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