{"id":2824,"date":"2017-03-16T16:50:30","date_gmt":"2017-03-16T11:20:30","guid":{"rendered":"https:\/\/www.innovationm.com\/blog\/?p=2824"},"modified":"2023-01-20T18:55:56","modified_gmt":"2023-01-20T13:25:56","slug":"inapp-purchase-in-swift-3-0","status":"publish","type":"post","link":"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/","title":{"rendered":"InApp Purchase in Swift 3.0"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p><b>Let\u2019s Start With a Story,<\/b><\/p>\n<p><span style=\"font-weight: 400\">There is a guy <\/span><b>Elliot<\/b><span style=\"font-weight: 400\">\u00a0who uses the plastic money a lot. Every time he visits any shop he asks them to swipe his card instead of paper cash. \u00a0Now, he visits a <\/span><i><span style=\"font-weight: 400\">Shop-A<\/span><\/i><span style=\"font-weight: 400\"> to buy his daily grocery. After choosing his stuff, Shopkeeper asks him to go to their friend\u2019s Shop-B for card payment (as they don\u2019t have any Card Swiping Machine) and then take your grocery back. <\/span><\/p>\n<p><span style=\"font-weight: 400\">It\u2019s something irritating that you have to\u00a0visit other Shop for payment every time you purchase something. Next day, he visits Shop-C for daily shopping and later he come to know that they have their own Card Swiping machine. From that day, he visits Shop-C on the\u00a0regular basis as it is more hassle free and less time consuming than Shop-B. <\/span><\/p>\n<p><b>Fig<\/b><span style=\"font-weight: 400\">: This is Shop A where you\u2019ve to move PayU (Shop-B) for Payment and then he confirms about the payment. And, then he brings his purchased grocery back. <\/span><\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_1.png\"><img fetchpriority=\"high\" decoding=\"async\" class=\"size-full wp-image-2825 aligncenter\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_1.png\" alt=\"in_1\" width=\"500\" height=\"500\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_1.png 500w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_1-150x150.png 150w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_1-300x300.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Next, <\/span><\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_2.png\"><img decoding=\"async\" class=\"size-full wp-image-2827 aligncenter\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_2.png\" alt=\"in_2\" width=\"500\" height=\"500\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_2.png 500w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_2-150x150.png 150w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_2-300x300.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p><b>Fig<\/b><span style=\"font-weight: 400\">: Shop C which has their own Card Swiping Machine. So, he doesn\u2019t have to rely on other payment shops.<\/span><\/p>\n<p><b>Moral of The Story,<\/b><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Shopping in Shop-A took more time than Shop C. <\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Shopping in Shop-A mean, You\u2019ve to visit Shop A and then Shop-B for payment and then come back to Shop-A to pick up your stuff. <\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">While Shopping in Shop-A, you\u2019ll always have two receipts. One is payment receipt which you\u2019ll get it from Shop-B after payment. And, Shop-A will give your stuff after verifying Payment Receipt (which you got from Shop-B)<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\"> Shopping in Shop-C is hassle free. <\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">I just want to validate my point that \u201cElliot is more comfortable in shopping from Shop-C than Shop-A\u201d.<\/span><\/p>\n<p><b>With The Same Anatomy, <\/b><\/p>\n<p><span style=\"font-weight: 400\">Imagine You are using an eCommerce App (equate with Shop-A). You choose your products and then add into your cart. And, when you click on Pay button it moves to Paypal ( any 3rd Party Payment Gateway like Citrus, PayU or Payzippy) for actual payment and after paying you\u2019ll move to your App. \u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">And, then there is another eCommerce App which has payment module but it took few seconds to do payment there.<\/span><\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_3.png\"><img decoding=\"async\" class=\"size-full wp-image-2829 aligncenter\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_3.png\" alt=\"in_3\" width=\"500\" height=\"500\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_3.png 500w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_3-150x150.png 150w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_3-300x300.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p><b>Fig<\/b><span style=\"font-weight: 400\">: Say, Amazon\u00a9 App uses PayU\u00a9 as Payment Gateway. A\u00a0User always move to PayU page when they have to purchase something.<\/span><br \/>\n<a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_4.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2830 aligncenter\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_4.png\" alt=\"in_4\" width=\"600\" height=\"300\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_4.png 600w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_4-300x150.png 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p><b>Fig<\/b><span style=\"font-weight: 400\">: Then, there is InApp Payment which keeps you on the same screen. <\/span><\/p>\n<p><span style=\"font-weight: 400\">So, You conclude with two kinds of Payment Models: <\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Someone (Third Party) else is doing payment transaction on your behalf and then it notifies you about the payment.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">There is an In-House Device which does the payment transaction for you and get you notified(And, Yes this is <\/span><b>InApp Purchase<\/b><span style=\"font-weight: 400\">).<\/span><\/li>\n<\/ol>\n<p>Hold On, Don\u2019t get biased about In App Purchase. There are pro &amp; cons about everything. So has InApp Purchase. InApp Purchase is not the king.<\/p>\n<p><b>What is InApp Purchase,<\/b><\/p>\n<p><span style=\"font-weight: 400\">InApp Purchase is an\u00a0inbuilt payment gateway which OS has, and User can use it when App has featured InApp Payment Module.<\/span><\/p>\n<p><span style=\"font-weight: 400\"> So, Developer integrate this InApp Purchase in their App as User has no security issue in sharing their card details. <\/span><\/p>\n<p><span style=\"font-weight: 400\">By Native Payment Gateway I meant InApp Payment Module.<\/span><\/p>\n<p><b>If It is such a Rockstar then why don\u2019t we always use this,<\/b><\/p>\n<p><span style=\"font-weight: 400\">Like every dispute, This is also \u2018coz of i.e. <\/span><b>Money Shares<\/b><span style=\"font-weight: 400\">. Whenever user pays an amount via InApp Payment Module, 70% of that amount is given to App Developer and 30% (Seriously !!) will remain with Apple. Let me remind, 30% is too much for any payment gateway.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Unlike, Native InApp Purchase, Third Party Payment offers better pricing in terms of sharing. Like, they charge 1% of every transaction amount. Or, they don\u2019t charge for first thousand transactions. They have different schemes.<\/span><\/p>\n<p><b>When To Use In-App Purchase,<\/b><\/p>\n<p><span style=\"font-weight: 400\">Whenever you are selling any digital content or subscription or unlocking any feature in your App then you must use InApp Purchase. Basically, If you are charging money for something which doesn\u2019t physically exist in reality then you ought to use InApp Purchase as your Payment Gateway. <\/span><\/p>\n<p><b>Yes, You\u2019ve to Use InApp Purchase<\/b><\/p>\n<p><span style=\"font-weight: 400\">Apple is too particular about InApp Purchase. They can reject your App while submission process if you use any 3rd Party Payment Gateway to sell your digital Content. Unlike Apple, Google has no such recommendation for selling digital content via InApp Purchase Only. You can use any 3rd Party Payment Gateway to sell your subscription or digital content. <\/span><\/p>\n<p><b>When Not To Use InApp Purchase,<\/b><\/p>\n<p><span style=\"font-weight: 400\">When you selling something physical (say, any product). Like, you can\u2019t use InApp Purchase for selling physical goods, clothes, books or any things which exist in nature. In such case, Apple gives you an alternative <\/span><b>Apple Pay <\/b><span style=\"font-weight: 400\">but, it doesn\u2019t belong\u00a0to every region of the\u00a0world. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Sorry<\/span> <span style=\"font-weight: 400\">to say, Apple Pay has no service in India. So, We\u2019ve to use 3rd Party Payment Gateway like PayPal, PayTM, PayZippy, PayU, CCAvenue or Citrus.<\/span><\/p>\n<p><b>Apple Pay vs InApp Purchase<\/b><\/p>\n<table>\n<tbody>\n<tr>\n<td><b>Apple Pay<\/b><\/td>\n<td><b>InApp Purchase<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">Sell Physical Goods<\/span><\/td>\n<td><span style=\"font-weight: 400\">Sell Virtual Goods<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">Apple takes no share in transactions.<\/span><\/td>\n<td><span style=\"font-weight: 400\">Apple takes 30% of every transaction.<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">Passkit.framework<\/span><\/td>\n<td><span style=\"font-weight: 400\">StoreKit.framework<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><br \/>\nTypes of InApp Purchase<\/b><\/p>\n<p><span style=\"font-weight: 400\">In-App Products are of Four Types,<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Consumable Products<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Non-Consumable Products<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Auto-Renewing Subscription Products<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Non-Renewing Subscription \u00a0Products<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">If you are confused, Why this heck i.e. Types of Product. Why can\u2019t we just pay and move on. <\/span><\/p>\n<p><span style=\"font-weight: 400\">So, Apple confirms what kind of payment is this. \u00a0By the end of this section, you \u2018ll get to know why is this Product Types. <\/span><\/p>\n<p><b>Consumable Products<\/b><\/p>\n<p><span style=\"font-weight: 400\">Consumable Products are such products which you can purchase as many times as you want. Say, you have a Game App where you want to sell Player\u2019s <\/span><i><span style=\"font-weight: 400\">Life. <\/span><\/i><span style=\"font-weight: 400\">So, User can pay as many times as he wants. There should not be any limit. If You are offering such kind of product to the\u00a0user then it comes under Consumable Products.<\/span><\/p>\n<p><b>Examples<\/b><span style=\"font-weight: 400\">: Buy Coins, Buy Game Hint.<\/span><\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image09.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2842 aligncenter\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image09.png\" alt=\"image09\" width=\"1979\" height=\"833\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image09.png 1979w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image09-300x126.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image09-1024x431.png 1024w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image09-624x263.png 624w\" sizes=\"(max-width: 1979px) 100vw, 1979px\" \/><\/a><\/p>\n<p><b>Non-Consumable Products<\/b><\/p>\n<p><span style=\"font-weight: 400\">It\u2019s just contrast to the Consumable Product. You can only pay once for such kind of product. Your Purchases\u00a0get mapped with your Apple ID and you don\u2019t need to bother if you uninstall your app or change your iPhone.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Such Products are mostly used by those Apps which offer some unlocked feature. Say, I have an App which has Advertisement (looks irritating to the\u00a0user sometimes) and, you have an option in your app. You can disable this Advertisement if you pay a\u00a0certain amount. If You pay for once, then you change your iPhone for some reason. Then, it\u2019s obvious you\u2019ll not pay for the same feature which you\u2019ve paid earlier. <\/span><\/p>\n<p><b>Example<\/b><span style=\"font-weight: 400\"> : Enable Pro version of App, Advertisement Free App.<\/span><\/p>\n<p><b>Auto-Renewing Subscription<\/b><\/p>\n<p><span style=\"font-weight: 400\">Say, you\u2019ve a digital magazine which gets the new edition every month. So, you want to charge your user every month. So, It\u2019s quite irritating for your User to do the payment process just to read your magazine. To make it hassle-free, you can use Auto-Renewing InApp Purchase which will deduct amount automatically from your synced credit card (or, whatever your payment mode is). <\/span><\/p>\n<p><span style=\"font-weight: 400\">Most of the time, these are used by Digital Magazine and Premium Streaming App like Netflix. <\/span><\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image07.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2840 alignnone\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image07.png\" alt=\"image07\" width=\"1280\" height=\"720\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image07.png 1280w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image07-300x169.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image07-1024x576.png 1024w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image07-624x351.png 624w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/a><\/p>\n<p><b>Non-Renewing Subscription<\/b><\/p>\n<p><span style=\"font-weight: 400\">Non-Renewing subscriptions\u00a0are only valid for a period of time. After that, you have to pay again manually. It\u2019s just an opposite of Auto-Renewing Subscription. These are mostly used in Subscription based App which offers a period based usage of their App.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Say, there is a trail section in NetFlix where you can watch all TV Series with a nominal price.<\/span><\/p>\n<p><b>Demonstration<\/b><\/p>\n<p><span style=\"font-weight: 400\">We are going to create an App where we learn how to purchase via InApp Purchase.<\/span><\/p>\n<p><b>Milestones:<\/b><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Prepare Your App In iTunes<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Code InApp Purchase in your App<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Test via Sandbox Account<\/span><\/li>\n<\/ol>\n<p><b>Milestone 1<\/b><\/p>\n<p><b>Step1.<\/b><\/p>\n<p><span style=\"font-weight: 400\">Login into your iTunes Account and create your App.<\/span><\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image00.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2833\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image00.png\" alt=\"image00\" width=\"355\" height=\"40\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image00.png 355w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image00-300x34.png 300w\" sizes=\"(max-width: 355px) 100vw, 355px\" \/><\/a><\/p>\n<p><b>Step2.<\/b><\/p>\n<p><span style=\"font-weight: 400\">Get in <\/span><b>MyApp<\/b><span style=\"font-weight: 400\"> Section<\/span><\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image10.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2843\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image10.png\" alt=\"image10\" width=\"205\" height=\"226\" \/><\/a><\/p>\n<p><b>Step3.<\/b><\/p>\n<p><b>Get in Features <\/b><span style=\"font-weight: 400\">Tab<\/span><b> &gt; InApp Purchase <\/b><span style=\"font-weight: 400\">section<\/span><br \/>\n<a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image14.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2847\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image14.png\" alt=\"image14\" width=\"498\" height=\"416\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image14.png 498w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image14-300x251.png 300w\" sizes=\"(max-width: 498px) 100vw, 498px\" \/><\/a><\/p>\n<p><b>Step4.<\/b><\/p>\n<p><span style=\"font-weight: 400\">Click on <\/span><b>+ <\/b><span style=\"font-weight: 400\">Button and create your Product.<\/span><\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image08.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2841\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image08.png\" alt=\"image08\" width=\"521\" height=\"380\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image08.png 521w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image08-300x219.png 300w\" sizes=\"(max-width: 521px) 100vw, 521px\" \/><\/a><\/p>\n<p><b>Step5.<\/b><\/p>\n<p><span style=\"font-weight: 400\">For Now, I\u2019m creating Consumable Product. It\u2019s up to you what type you choose. (<\/span><b>Note<\/b><span style=\"font-weight: 400\">: It\u2019s always up to your Business Requirement)<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2849\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image19.png\" alt=\"image19\" width=\"1169\" height=\"682\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image19.png 1169w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image19-300x175.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image19-1024x597.png 1024w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image19-624x364.png 624w\" sizes=\"(max-width: 1169px) 100vw, 1169px\" \/><\/p>\n<p><b>Step6.<\/b><\/p>\n<p><span style=\"font-weight: 400\">While creating your InApp Product, there are few tricky options<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><b>Reference ID<\/b><span style=\"font-weight: 400\"> : \u00a0Something Unique and it\u2019s totally up to you.<\/span><\/li>\n<li style=\"font-weight: 400\"><b>Product ID<\/b><span style=\"font-weight: 400\"> : It&#8217;s most important from development point of view. You\u2019ll need it later. It must be unique. (follow reverse domain name convention with product name). <\/span><\/li>\n<li style=\"font-weight: 400\"><b>Pricing Tier<\/b><span style=\"font-weight: 400\"> : Choose The Price Tier from dropdown. (Note: You are bound to choose from the list. You can\u2019t creat amount as per you wish. You\u2019ve have to choose from the list)<\/span><\/li>\n<li style=\"font-weight: 400\"><b>Title And Description : <\/b><span style=\"font-weight: 400\">It\u2019s the text which get in the list while purchasing. Title should be the POI of the product. It can be localizable Text.<\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Choose Pricing from the Pricing List,<\/span><\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image13.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2846\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image13.png\" alt=\"image13\" width=\"444\" height=\"393\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image13.png 444w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image13-300x266.png 300w\" sizes=\"(max-width: 444px) 100vw, 444px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400\">Pass the Title Text and Description Text of the Product.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image16.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2851\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image16.png\" alt=\"image16\" width=\"698\" height=\"424\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image16.png 698w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image16-300x182.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image16-624x379.png 624w\" sizes=\"(max-width: 698px) 100vw, 698px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400\">\u00a0And, Last you have to give the screenshot of the InApp Page where you are using InApp Purchase. It is for Apple Revving while submission. And, you have to give them one of the sandbox account so that they can test it.<\/span><\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image17.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2850\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image17.png\" alt=\"image17\" width=\"534\" height=\"433\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image17.png 534w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image17-300x243.png 300w\" sizes=\"(max-width: 534px) 100vw, 534px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400\">And, this is final you have successfully set-up your InApp Product. You just need to note down your product Id\u2019s which you have created. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Say, I have this <\/span><\/p>\n<p><span style=\"font-weight: 400\">Example : <\/span><b>com.abc.game_help, com.abc.extra_coins<\/b><\/p>\n<p><b>Milestone 2<\/b><\/p>\n<p><b>Step1.<\/b><\/p>\n<p><span style=\"font-weight: 400\">Import <\/span><b>InAppManager.swift<\/b><span style=\"font-weight: 400\"> in your Project.<\/span><\/p>\n<p><span style=\"font-weight: 400\">GitHub: <\/span><a href=\"https:\/\/github.com\/greenSyntax\/InAppManager\"><span style=\"font-weight: 400\">https:\/\/github.com\/greenSyntax\/InAppManager<\/span><\/a><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">First, we will request for the list of InApp Products which we have just created in iTunes.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Second, We\u2019ll choose one of them from the list and request for Purchase.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">After Transaction, we&#8217;ll get the transaction data whether it\u2019s a successful transaction or a failed one. And, then take our decision. <\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><b>Step2.<\/b><\/p>\n<p><span style=\"font-weight: 400\">In this step, we\u2019ll pass the array of <\/span><b>InApp Product Ids <\/b><span style=\"font-weight: 400\">and get the Product Details.<\/span><\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image15.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2848\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image15.png\" alt=\"image15\" width=\"661\" height=\"341\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image15.png 661w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image15-300x155.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image15-624x322.png 624w\" sizes=\"(max-width: 661px) 100vw, 661px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400\">First, create the InApp Manager Singleton Instance, <\/span><\/p>\n<pre class=\"lang:swift decode:true\">let inAppManager = InAppManager.shared<\/pre>\n<p><span style=\"font-weight: 400\">In <\/span><b style=\"font-size: 1rem\">ViewDidLoad(),<\/b>To Request List of Products, you have to call requestForInAppProducts() of InAppManager.<\/p>\n<pre class=\"lang:swift decode:true\">var inAppProductsId:[String] = [\"com.abc.game_help\", \"com.abc.extra_coins\"];<\/pre>\n<pre class=\"lang:swift decode:true\">\/\/Configure InApp Manager\r\n\r\ninAppManager.configureInAppProducts(nameOfProducts: inAppProductsId)\r\n<\/pre>\n<pre class=\"lang:default decode:true\">\/\/Request For InApp Products\r\ninAppManager.requestForInAppProducts(products: { (products) in\r\n            \r\n\t    \/\/ List of InApp Products\r\n\t    print(products)\r\n            \r\n        }) { (error) in\r\n            \r\n            \/\/ Error while getting Products\r\n        }\r\n\r\n<\/pre>\n<p><span style=\"font-size: 1rem\">And, In <\/span>Response<span style=\"font-size: 1rem\">, you will get two closures success and failure. In Success Closure, you will get <\/span><span style=\"font-size: 1rem\">InApp Products array which contains details about your product (i.e. Name, Description, Prices ) wherein Failure block, you will get InAppError object.<\/span><\/p>\n<p>On Success callback, I want to set the tableView data source and reload the Table so that it\u2019ll reflect in your table View.<\/p>\n<p><b>Step3.<\/b><\/p>\n<p><span style=\"font-weight: 400\">Now, you choose any product for purchase. In that case you have to call <\/span><b>purchaseProduct(product:) <\/b><span style=\"font-weight: 400\">method of InAppManager.<\/span><\/p>\n<pre class=\"\"><span class=\"pl-c\">\/\/Purcahse Product<\/span>\r\ninAppManager.<span class=\"pl-c1\">purchaseProduct<\/span>(<span class=\"pl-c1\">product<\/span>: product.<span class=\"pl-smi\">productInstance<\/span><span class=\"pl-k\">!<\/span>, <span class=\"pl-c1\">onSuccess<\/span>: { (transaction) <span class=\"pl-k\">in<\/span>\r\n            \r\n            <span class=\"pl-c\">\/\/onSuccessfull transaction<\/span>\r\n            \r\n        }) { (error) <span class=\"pl-k\">in<\/span>\r\n            \r\n            <span class=\"pl-c\">\/\/onError<\/span>\r\n            \r\n        }<\/pre>\n<p><span style=\"font-size: 1rem\">On <\/span>Success<span style=\"font-size: 1rem\">, you will get InApp Transaction Object which has Transaction date and transaction unique Id which you use for Receipt Verification. And, error is always of InAppError Type.<\/span><\/p>\n<p><b>Milestone 3:<\/b><\/p>\n<p><span style=\"font-weight: 400\">In this milestone, we\u2019ll test the InApp Purchase.<\/span><\/p>\n<p><span style=\"font-weight: 400\">So first, we have to create Sandbox User in iTunes.<\/span><\/p>\n<p><span style=\"font-weight: 400\"><strong>Step1<\/strong>. Go to <\/span><b>iTunes Connect<\/b><span style=\"font-weight: 400\"> &gt; <\/span><b>Users<\/b><\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image03.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2836\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image03.png\" alt=\"image03\" width=\"562\" height=\"440\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image03.png 562w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image03-300x235.png 300w\" sizes=\"(max-width: 562px) 100vw, 562px\" \/><\/a><\/p>\n<p><b>Step2.<\/b><\/p>\n<p><span style=\"font-weight: 400\">Choose Sandbox Testers,<\/span><\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image18.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2852\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image18.png\" alt=\"image18\" width=\"572\" height=\"166\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image18.png 572w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image18-300x87.png 300w\" sizes=\"(max-width: 572px) 100vw, 572px\" \/><\/a><\/p>\n<p><b>Step3.<\/b><\/p>\n<p>Fill the basic details.<\/p>\n<p><a href=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image121.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2853\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image121.png\" alt=\"image12\" width=\"1024\" height=\"564\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image121.png 1024w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image121-300x165.png 300w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/image121-624x344.png 624w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400\">While Testing changes\u00a0your iTunes User from your iPhone Settings and add the Sandbox User. It won&#8217;t work in Simulator.<\/span><\/p>\n<p><b>Conclusion<\/b><\/p>\n<p><span style=\"font-weight: 400\">If you want to sell digital content then you must use InApp Purchase. Here, I\u2019ve made a StoreKit Wrapper class i.e. InAppManager.swift <\/span><a href=\"https:\/\/github.com\/greenSyntax\/SwiftInAppManager\"><span style=\"font-weight: 400\">(https:\/\/github.com\/greenSyntax\/InAppManager<\/span><\/a><span style=\"font-weight: 400\">). <\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Let\u2019s Start With a Story, There is a guy Elliot\u00a0who uses the plastic money a lot. Every time he visits any shop he asks them to swipe his card instead of paper cash. \u00a0Now, he visits a Shop-A to buy his daily grocery. After choosing his stuff, Shopkeeper asks him to go to their [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2855,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,71],"tags":[188,190,189,191],"class_list":["post-2824","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ios","category-mobile","tag-in-app","tag-inapp-payment","tag-inapp-purchase","tag-storekit"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>InApp Purchase in Swift 3.0 | InnovationM Blog<\/title>\n<meta name=\"description\" content=\"Importance and use of InApp Purchase in Swift 3.0\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"InApp Purchase in Swift 3.0 | InnovationM Blog\" \/>\n<meta property=\"og:description\" content=\"Importance and use of InApp Purchase in Swift 3.0\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/\" \/>\n<meta property=\"og:site_name\" content=\"InnovationM - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-03-16T11:20:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-01-20T13:25:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_App_header.png\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"InnovationM Admin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"InnovationM Admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/inapp-purchase-in-swift-3-0\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/inapp-purchase-in-swift-3-0\\\/\"},\"author\":{\"name\":\"InnovationM Admin\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"headline\":\"InApp Purchase in Swift 3.0\",\"datePublished\":\"2017-03-16T11:20:30+00:00\",\"dateModified\":\"2023-01-20T13:25:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/inapp-purchase-in-swift-3-0\\\/\"},\"wordCount\":1886,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/inapp-purchase-in-swift-3-0\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/03\\\/in_App_header.png\",\"keywords\":[\"In App\",\"InApp Payment\",\"InApp Purchase\",\"StoreKit\"],\"articleSection\":[\"iOS\",\"Mobile\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/inapp-purchase-in-swift-3-0\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/inapp-purchase-in-swift-3-0\\\/\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/inapp-purchase-in-swift-3-0\\\/\",\"name\":\"InApp Purchase in Swift 3.0 | InnovationM Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/inapp-purchase-in-swift-3-0\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/inapp-purchase-in-swift-3-0\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/03\\\/in_App_header.png\",\"datePublished\":\"2017-03-16T11:20:30+00:00\",\"dateModified\":\"2023-01-20T13:25:56+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"description\":\"Importance and use of InApp Purchase in Swift 3.0\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/inapp-purchase-in-swift-3-0\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/inapp-purchase-in-swift-3-0\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/inapp-purchase-in-swift-3-0\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/03\\\/in_App_header.png\",\"contentUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/03\\\/in_App_header.png\",\"width\":800,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/inapp-purchase-in-swift-3-0\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"InApp Purchase in Swift 3.0\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\",\"name\":\"InnovationM - Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\",\"name\":\"InnovationM Admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"caption\":\"InnovationM Admin\"},\"sameAs\":[\"http:\\\/\\\/www.innovationm.com\\\/\"],\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/author\\\/innovationmadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"InApp Purchase in Swift 3.0 | InnovationM Blog","description":"Importance and use of InApp Purchase in Swift 3.0","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/","og_locale":"en_US","og_type":"article","og_title":"InApp Purchase in Swift 3.0 | InnovationM Blog","og_description":"Importance and use of InApp Purchase in Swift 3.0","og_url":"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/","og_site_name":"InnovationM - Blog","article_published_time":"2017-03-16T11:20:30+00:00","article_modified_time":"2023-01-20T13:25:56+00:00","og_image":[{"width":800,"height":300,"url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_App_header.png","type":"image\/png"}],"author":"InnovationM Admin","twitter_misc":{"Written by":"InnovationM Admin","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/#article","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/"},"author":{"name":"InnovationM Admin","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"headline":"InApp Purchase in Swift 3.0","datePublished":"2017-03-16T11:20:30+00:00","dateModified":"2023-01-20T13:25:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/"},"wordCount":1886,"commentCount":0,"image":{"@id":"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_App_header.png","keywords":["In App","InApp Payment","InApp Purchase","StoreKit"],"articleSection":["iOS","Mobile"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/","url":"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/","name":"InApp Purchase in Swift 3.0 | InnovationM Blog","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/#primaryimage"},"image":{"@id":"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_App_header.png","datePublished":"2017-03-16T11:20:30+00:00","dateModified":"2023-01-20T13:25:56+00:00","author":{"@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"description":"Importance and use of InApp Purchase in Swift 3.0","breadcrumb":{"@id":"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/#primaryimage","url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_App_header.png","contentUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2017\/03\/in_App_header.png","width":800,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/www.innovationm.com\/blog\/inapp-purchase-in-swift-3-0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.innovationm.com\/blog\/"},{"@type":"ListItem","position":2,"name":"InApp Purchase in Swift 3.0"}]},{"@type":"WebSite","@id":"https:\/\/www.innovationm.com\/blog\/#website","url":"https:\/\/www.innovationm.com\/blog\/","name":"InnovationM - Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.innovationm.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed","name":"InnovationM Admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","caption":"InnovationM Admin"},"sameAs":["http:\/\/www.innovationm.com\/"],"url":"https:\/\/www.innovationm.com\/blog\/author\/innovationmadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/2824","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/comments?post=2824"}],"version-history":[{"count":0,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/2824\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media\/2855"}],"wp:attachment":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media?parent=2824"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/categories?post=2824"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/tags?post=2824"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}