Cross-Platform IAP Store Page with Unity IAP in 2023 | Unity Tutorial

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
in this video you're going to learn how to set up Unity IAP for in-app purchases in your game this allows you to create in-app purchases for multiple different platforms all configured in a same consistent way what we're going to do is create a huge UI store page for our game that shows all the different products that we have configured each of these products will have a name description and icon associated with them and a price you can have slightly different variations for each platform or you can set them up to be the same across all platforms I'm not going to cover how do you set up a Google Play app or an app store app I do have videos for at least one of those maybe both depending on when you're watching this there'll be links in description to those if you need to know how to set up a Google Play app or an app store app hey Chris here from Mom Academy here to help you who me yes you may your Game Dev 3s become Reality by helping you monetize your game we're going to jump right into it today the very first thing you need to do is install Unity IAP via the package manager if you're on an older version in the editor that doesn't have the package manager highly recommend you upgrade your engine version before you start working on this I'm just going to ask you to link this to a Unity project and before you do that make sure you've changed your company name and your app name in the project settings otherwise it's going to look kind of weird and be hard to find it on the unity dashboard in a little bit and again I really want to emphasize this it's incredibly important that you go into the Google Play console and make sure you have your app uploaded there already or the Apple App Store and make sure your app is uploaded there already as well from the Google Play side you're not at least an internal or Alpha Testing it's not going to let you test your IAP stuff if you don't have any app store again you won't be able to test your in-app purchases it doesn't have to be published on the App Store it just needs to be an app store connect once you've imported 4.1.5 from the asset store if you open up your project settings Services in-app purchasing you'll see that it has 4.5.2 as the latest version even though the package manager doesn't show that we'll install the most recent version and make sure you've toggled on and purchasing this will probably also enable the Legacy analytics and you'll probably get an email from Unity telling you that you've created a project using Legacy analytics and you need to upgrade they're trying to replace the Legacy analytics with the Unity gaming Services analytics so I expect eventually Unity will remove this Legacy analytics and have the in-app purchasing package work properly with ugs analytics in the meantime this is okay it still works next up if you're releasing on Google Play You'll open up the Google Play console scroll down to monetize go to monetization setup we're going to have this licensing area you're going to want to copy this key open up the unity dashboard select your project click this gear for project settings you'll have this Google license key you're going to want to edit this and paste that in here also in the in-app purchasing you'll want to paste the same key into this options field and click update if you're having trouble clicking update here and it's giving you an error what you might need to do is toggle off Legacy analytics and toggle it back on at least that's what I did to resolve the error when it was telling me that I didn't have authorization to add this key I expect this is some weirdness with the in-app purchasing and the Legacy analytics that will eventually go away now we want to configure our in-app purchasing catalog you're going to want to take some time to really evaluate what kind of in-app purchase options you want to sell which ones will add value to your players and which ones will add Revenue to your game at the top we'll go to Services in-app purchasing IAP catalog and here is where we'll configure our products for your ID you're going to want to put in something that is unique per product it may be also useful to differentiate between maybe higher tier ones segregating which kind of products might be offered to different groups of users and which ones may be on sale we'll get into that in a little bit later get title and description these are both mandatory and it's also important to note on the ID that you need these underscores you can't use spaces and you can't use hyphens so you can use camel case Pascal case or snake case basically once you've filled in the title and description we're going to move on to payouts payouts are what we are going to give to the player after they purchase this thing and have spent their real money there are a few types they have other which is for anything that's not currency item or resource in this case because I'm saying it's some bucks which is some in-game currency that I'm going to create we'll call it currency the subtype is just a string that we will internally use in our application to reference hey this is this type of currency so maybe I have bucks maybe I have coins and maybe I have energy or something like that the quantity is how many of them you want to give and the data field is again just a string field and we can put in all kinds of information here for a currency payout I don't expect you're generally going to put in a data thing but you can potentially put even Json objects here if you're going to have other or item types you can put in Json objects defining what type of equipment they're going to get so for currency we're just going to leave it alone we don't have to provide any data under the store ID overrides you can optionally give an override per store or if you can have them be the same on every store you don't have to fill this out for the price this is how much do you want to charge for the lowest one I'm going to choose 199 pricing template is a little bit more of an advanced feature we're not going to talk about that in this video for the Apple configuration they don't have as much control over the price you can't just offer kind of whatever prices you have to pick a tier so since I said 199 for Google pick 199 per apple as well this screenshot you can't really provide yet because we haven't configured them and we don't have a way to show how the user will see this in-app purchase item today the export to apple does not work because Apple has retired Apple XML delivery I am hopeful and expect that Unity will update Unity IAP to use the new system which is connecting to App Store connect via an API meaning selecting a screenshot here will not add any value to you at least until that automatic export is set up and working correctly I'll talk a little bit more about this in the section dedicated to the Apple IAP configuration I'll just add a couple other in-app purchase items and before I go too far into that there's another field here called type we have consumable non-consumable and subscription so consumable would be anything that they purchase immediately is consumed so I can power up or getting currency anything that's consumable the user should be able to purchase multiple times usually a non-consumable would be something like items weapons something like no advertisings unlockable things something that you would not want the user to purchase multiple times and a subscription would be something like I want you to have to pay 10 bucks a month to access some extra content or something like that or a lot of times you'll see subscription-based VIP access that gives like bonuses to how many daily Rewards words you can collect that kind of stuff there's not really a lot of difference in terms of how you configure them you see if I select non-consumable there's nothing changes the main difference between these is how do you handle in your app the purchase of this in-app purchase item and how the store will handle billing of these things for example subscriptions Google and apple will automatically charge the player every month until they cancel so let me quickly just create a couple extra products that we have several to look at I'll make one non-consumable that's an all guns unlock that will unlock all the items in the game I'm still going to call this an item with a subtype of all guns and I don't need to provide any additional data because I would expect in my game if I have this Boolean flip of have unlocked everything it just automatically counts as unlocked or I would go through and unlock every gun if I see that this purchase was successful for this item and obviously I wouldn't want them to purchase it multiple times right here let's talk about sales Google and apple don't give you like an automated sales structure on their store if you want to offer sale you have to pre-configure those products on Google and on Apple and just in your game or your backend service whatever you have you will choose when to offer those sale items so you won't show them normally in your normal product list that we're going to create we'll filter those out that are going to be on sale and then based on whatever logic you have you would say hey on this day I'm going to offer this thing on sale so I want to be really clear about that that was something kind of a weird learning for me whenever I was putting together my game is there's not an automated sale functionality on Google and apple it's all handled by you in your app so here you can see we have the exact same configuration as what we just did I've just configured it to be about half the price of the full price one so then in my game later I would offer a promotional sale after some trigger happened or some random day whatever I would offer them this as a special sale with a limited time window that's how that works in all these games that you see that's all the items we're going to make how do we get these into to where we can actually offer them you'll want to use this app store export I'll use the Google Play CSV first as an option we'll talk about the apple one in a little bit if you're going to work on both Google and apple I actually find it's easier to do the Google one and then use those screenshots and submit those to Apple if you're going to have the same experience on both so let's start with Google I've done the export what we can do is on the Google Play console go to monetize in-app products up here at the top there's an import button just go ahead and choose that CSV file that Unity IAP created for us now you can see all those show up here no problem you have the option to edit these in the console generally speaking I discourage doing that because then you will have Drift from what you have defined in the IAP catalog versus what you have displayed on the Google Play console and what we're going to build to show to the user today is going to be based on that IAP catalog so if you start changing stuff here it won't exactly match to what we have defined in the unity editor let's start setting up that demo store Page now we have some in-app purchases configured on Google at least let's show those on the UI why before we jump into the code we're going to deselect automatic initialization of unity purchasing we're going to turn that off because we're going to fully manage this in this one class we're going to initialize Unity purchasing based on the IEP catalog and we want to after we've initialized Unity purchasing be able to build the UI so we're going to handle some events that happen and if it happens automatically it's a little bit more challenging to do so the very first thing in our demo store Page is we're going to implement the iStore listener interface which comes from the unity engine purchasing namespace that has four functions on initialized which is called whenever it's successfully initialized uninitialize failed whenever it fails process purchase which is called whenever the player has successfully purchased an item they've been charged for it and now we need to give them the item that they purchased and on purchase failed which is a callback whenever purchasing fails right now all those will just throw an exception that's okay we just need to know that we're going to implement these four we're going to make a private async void awake because in here we're going to do something asynchronous and here we're going to set initialization options to equal new initialization options I'm going to do a preprocessor directive here which is pound if Unity editor or development build found out set environment name production and then pound endif what this does is if you tick the development build then on the device we'll still use set environment name test and if we're running in the unity editor we'll also set the environment name to test we will conditionally compile this with set environment name test if I've not checked that checkbox then we're going to set it to be production so it'll use a different line of code based on if we're developing or we're not doing a development build that helps us make sure that we're not hitting our production system of uni gaming Services if we're just doing development and messing around with things will help us keep all of our analytics and all that kind of stuff separate it also allows us to test different things in the test environment versus the production environment for this video today if that's too confusing you can just set environment name production and leave it alone after that we can initialize Unity purchasing so what I want to do is asynchronously load the product catalog that we just configured using resource request operation equal resources.load async a text asset called IAP product catalog we'll set the completed event to be handle IAP catalog loaded and before we get into that the IEP products catalog that we just configured in the unity editor is stored in our resources folder already for us as a Json bio that's really helpful because then we can know our IAP catalog immediately after this game object is created in the handle IAP catalog loaded that accepts an async operation we're going to get that resource request request equals operation as a resource request we'll log that asset just to make sure we got what we expected and if there's any issues with it we'll see it on that log we'll Define a product catalog catalog to be Json utility from Json the product catalog that accepts the request asset as a text asset and we're going to get the text from that that's a lot of words to say we're going to deserialize that text into our product catalog then we'll Define a configuration Builder Builder to be the configurationbuilder.instance standard purchasingmodel.instance app store.googleplay foreign catalog item item in the catalog of all products we're going to add each product ID and type to the Builder so what we're doing is waiting to load the catalog deserialize it into some object that we can deal with and then setting up this Builder with all the products that are in that catalog the next thing that we're going to do is initialize Unity purchasing with all of these products so then the unity purchasing module will understand here all the products available and how to purchase them and this being the iStore listener so it'll start calling callbacks on this object to get our uninitialize on initialization failed all those ones we looked at a second ago we need to do something though because this is only working for Google Play what if I'm building for the App Store sort of these compile directives come in again if Unity Android is defined that means we're building for the Android build Target we're going to do what we just wrote we're going to do L if which is else if we have Unity iOS defined we're going to do the same thing just passing in app store dot Apple App Store instead of Google Play we'll to find one more else in case maybe you're doing a standalone one we'll pass in app store.not specified that's really just a fallback case you shouldn't run into that case if you're only building for Google and apple now let's look at some of these callbacks that are going to happen from the unique purchasing module on initialize failed you're going to want to do something if we for some reason can't initialize the purchasing there are many reasons well there's three there's purchasing is not available there's no products available or the app is not known purchasing is unavailable that can happen if maybe the device is offline you probably don't want to display the IAP store at all just tell them it's not available at this time and move on if no products are available that's probably a misconfiguration and you need to look into that if the app's not known that's also a misconfiguration that means that the app store or Google Play doesn't understand your app and will not allow the user to purchase anything so based on which one of these are happening you might want to do different things for now we're just going to log in error that it was unable to be initialized now if we successfully initialized that's on initialized we're going to get an eye store controller and these extensions we're going to want to keep a reference to both of those because both of these are used whenever performing purchases so most likely after we've initialized the store we can then create UI elements for the player to interact with to actually perform purchasing you might not want to do that immediately on initialized in your game you might instead do this whenever the user clicks to bring up the page you might create the UI elements we're going to do it right here because we're only going to have that one page but remember that we wanted icons because it's kind of not very enticing to just see text on the screen to purchase it we probably want to show the user some icons we're going to go over to something called the store icon provider this is a new custom class that we're creating it's not a Model Behavior it's not anything just a standard c-sharp class what we're going to do here is based on the ID of the product we're going to look up in the resources folder so we can load them at runtime a texture to show for that particular item to do that we need a public static dictionary of string to texture 2D called icons with a public git and a private set we'll initialize that by default we'll have a private static int Target icon count we're going to count how many things are going on and keep track of something failed to load for any reason we'll need a public delegate void load complete action and a public static event of type load complete action called onload complete that way we can get a callback after we've loaded all the icons we'll Define a public static void initialize that accepts that list of products that we expect to get and we're going to expect this is called only one time so we'll check if the icon count is zero we'll do something else we're gonna log an error saying you're messed up you shouldn't have called initialize if we're actually initializing this for the first time we'll just set the target icon count to equal products all thought length and we'll iterate over all those products doing a resource request operation equals resources.load async of type texture 2D at Store icon slash and then the ID of that product that means in our resources folder for each one of our products we're expecting to have a textured 2D with the name that matches the ID of that product that is a really important piece of this if you don't have them with the right name you won't get any icons in your store Page will look ugly we'll do operation.completed plus equal handle load icon we'll Define that now in here we will again do resource request request equals operation as resource request we'll check if the asset is not null meaning it did successfully load something we'll add that to our icons dictionary with icons.adrequest.asset.name and then the request.asset as a texture 2D we'll check if the icons count is equal to the Target icon count if it is we'll call that callback saying we're done loading and if the request asset was null that means we didn't have an asset there and we need to subtract our Target icon count because something failed to load we didn't quite properly configure that one last convenient thing we'll do is create a public static texture 2D get icon that accepts a string ID it'll just be a little safety check around our dictionary that we'll use instead of directly accessing the icons which means we could really make that dictionary private so we'll check if the icon count to zero if it is we'll log an error and throw an exception otherwise we'll try to get that icon and return it now that we can load some images let's go ahead and initialize our Store icon provider immediately after Unity purchasing has been initialized we'll set up onloadcomplete to be a new Handler called handle all icons loaded and in handle all icons loaded we'll start a hurricane to create the UI again when you call create UI may be different it might be whenever you're pushing the page to actually show the store Page here we're just doing it because we only have one page we've got a video about how you can manage pushing and popping pages off from a stack to easily manage when to show different pages and even trigger events before they come on screen after they've left screen and all that kind of stuff to keep your UI very easily managed there's a link in description and card on screen to that video to create the UI we first need a prefab in the create UI what I'll do is sort the products by their localized price foreign over each product in our sorted products and then we'd like to create the UI elements well we don't have anything to create yet so back up at the top we'll create a private serialized field UI product called uiproduct prefab and a serialized field private horizontal layout group content panel since this is going to be a I'm imagining a horizontally oriented game with the phone sideways that's what we're going to do if you have a vertical one you might choose a vertical layout group let's open up that UI product and set up everything that we need to know to actually display a product remember earlier we were saying that we wanted to display the name description price and an icon so we'll create some private serialized fields for those elements we'll instantiate a bunch of these and we need to configure them based on the product that we're trying to display so I'm going to define a private product that's the data model that we're holding on to because it has a little bit more information than what we're actually displaying and then we'll do a public void setup based on that product that way the UI is responsible for setting up how does it display for that particular model we'll cache that reference of product and then we'll set the name text to be the localized title which comes to the metadata the description which also comes from the metadata the price tags to be the localized price stream so that'll be like 199 or whatever and then afterwards I'm going to put the iso currency code that looks a little bit weird because you'll have like 199 USD which might be fine but normally people will see like the dollar sign this way is just a simplistic let's just display it next we'll find the texture for this one with Store icon provider.it icon product.definition.id so that'll give us the texture as long as it was found if it was found so it's not in all we'll do Sprite Sprite equals Sprite dot create passing in the texture a new rect that's the size of the Sprite and we'll set the pivot to be in the middle of the Sprite then we'll set the icon Sprite to be this one that we just created if there's no texture found then we'll just log an error saying that there's no Sprite bound so something's wrong that should indicate to us that we're missing a Sprite texture for a product and that should set it up but we still need to have it where when we click a button it will do the purchase we'll Define a public void purchase that will hook up in the inspector to the button on click we'll disable the button to prevent any accidental duplicate clicks then how does the UI send to the iStore controller hey I want to purchase this item we're going to do that with a delegate function so back up by the top we'll Define a public delegate void purchase event that accepts the model and an action on complete and then we'll Define a public event purchase event on purchase so we will from this UI product raise an event whenever we click on the button to say hey this is the product that was purchased and please call this callback on complete after it's done you could optionally make this except a Boolean to say hey this was successful or not and then maybe you do something special by if it was not successful or something if it was let's go back to the demo store Page back in that create UI Co routine wherever we're creating these products let's go ahead and set them up we'll instantiate a new instance of that UI product prefab we'll do uiproduct.on purchase plus equals handle purchase which we'll Define in a second UI product that setup passing in the product so that way it'll configure all the text and all that kind of stuff and then set it to be a child of the content panel transform let's define that handle purchase now most likely whenever you are setting up a purchase you're going to want to show some kind of loading indicator or something like that because a native API on the device will be called to initialize that purchasing so you might get like the little Google Play pop-up or a pop-up to confirm the purchase on iOS so Define a private game object loading overlay and serialize that field back and handle purchase we'll just set that active and then to actually do a purchase we'll do storecontroller dot initiate purchase passing in the product because this demo store Page is the iStore listener we're going to get the call back here on on purchase bail or process purchase depending on if it was successful canceled whatever we're then going to want to Cache a reference to this action so we can call it back on purchase fail or on process purchase back up at the top we'll Define an action on purchase completed and then in handle purchase again we'll do this dot on purchase completed equals on purchase completed can the on purchase failed callback we're going to log that hey there was an error purchasing this and then call that callback we'll reset on purchase completion to be null because we've invoked that callback already and then set the loading overlay back to false on process purchase this is what we get whenever it's being successful we'll do basically the same thing call that callback set on pressures complete back to null set the loading overlay back to false and then after that you're going to want to actually apply that product to your player so if it's they purchase some currency you should add that correct amount of currency if it's they purchase an item you should unlock that item for that do whatever you need to do to ensure that they actually get the item that they just spent their real money on then at the end you will return purchase processing result Complete because this is just a demo of this and every game is going to be different what you do in this will be very different based on your game from what somebody else does based on their game if you're not sure how to persist data for your player in complex types I've got a video about how to store and persist data using the Json data format there's a link in the description card on the screen if you need to check that out just integrate this into whatever system you already have to give them that in-app currency let's come back to the unity editor and because it's already kind of a long video I'm saving us some time I have already created the demo store Page where we have a canvas in here we'll attach the demo store Page in there there's a background a title and then I have a scroll view because most likely I'm going to have several products that will go off screen I want this to be horizontally aligned so in that content panel I've attached a horizontal layout group with 50 for Left Right top bottom padding and also 50 for spacing child alignment is set in the middle left I also have this loading overlay just saying purchasing and then at this time your native Android or iOS purchase window should be displayed you're not going to want to keep all of that test this is probably a great time to remind you that the full project is on GitHub you can check it out you can even reuse the same prefabs textures and these scripts to get you started on implementing in-app purchasing for your game you can even copy paste this canvas to get you a great starting point so are hooking some stuff up content panel will be that scroll view content the loading overlay and then for the UI product prefab I've already created one we'll attach the UI product script to this and what you see here is what we'll display to the player whenever they're going to view these products so the name of the product Will Go On Top will have some kind of image in the middle and description below and then a price and a green button to purchase it we'll hook up all those references and that's all that we need to do here other than on the purchase button we need to add on quick listener and set it to call uiproduct.purchase whenever we click it we'll add that UI product to the UI product prefab and if we click play hopefully everything works okay great so we see a few bucks many Bucks loads of bucks all guns packed sale which is a little bit not good because I want the sales to be displayed differently most likely you don't want to show all the sale products in your main content we can see that we can scroll it's also not quite exactly the right size so there's a little bit more work to be done here we'll see that the purchasing is happening immediately because we're using a fake store we actually have to deploy to the device to see the in-app purchase pop-up come up and that's just because we're using the Google Play Store right now let's now look at how we can test this without having to deploy to the actual device using the fake store and handle IAP catalog loaded we want to add these two lines of code to standard purchasing module instance use fake store UI mode and then set a UI mode standard user is useful if you're trying to test the flow as a standard user to test everything you can use dot developer user which will allow you to configure what kind of failure results and test every scenario you'll also want to do standard purchasing module.instance.usebakesstore always set that to be true and just to make sure everything's working on our handle purchase too you might want to set this on purchase completed to be on purchase completed before we initiate the purchase because that was happening in the same frame it wasn't resetting the button correctly if we go back to the unity editor with the standard user when I try to purchase you'll see this fake store come up do you want to purchase this thing we can say buy or cancel you'll see that we got that log failed to purchase many Bucks because it says purchasing unavailable if we click buy we'll see it was successfully purchased I think there's two last things to do here one is make sure that our store Page will display products and allow us to scroll properly and number two is remove the sale items from our default display we want to handle those separately so on create UI before we start ordering everything I'm going to use a link function called take while and we'll say take while item Arrow not item definition ID retains sale so remember I was saying whenever we're configuring our iip items sometimes it's useful to configure them where the IDS will indicate what type of product they are so in this case we can identify all sale items because they have sale in the ID then we'll order all of those by the localized it's priced and continue doing whatever else we're doing in the same function what we want to do immediately after we create all the UI is to resize that content panel based on the contents that we just put into it so we'll be able to correctly scroll left and right based on the screen size and how many products we have to correctly calculate the size what we're going to do is get the horizontal layout group from the content panel and read some of the properties from there so we'll get the spacing from the group dot spacing we'll get how much padding is applied on the horizontal by doing group padding dot left plus group padding.right I call this XY padding I'm going to rename that to be horizontal padding in just a second we're going to get the item size by doing contentpanel.transform.getchild0 because we should have at least one child we'll get the rec transform there and then grab the size Delta X that'll tell us based on the content panel and maybe the layout component how big did it size this thing on the horizontal well then grab a reference to that Rec transform of the content panel and set the size Delta of that to be a new Vector 2 with the horizontal padding plus the spacing plus the item size times the sorted products count so we're going to add spacing and item size together multiply that by the sort of products that'll give us the total size horizontally and then we just need to add that horizontal padding which will cover the left and the right padding of the content panel we're going to keep the Y size the same because we're not adding anything vertically you do a very similar process if you wanted a vertical layout group just grabbing padding bottom and top and using vertical padding for the Y and keeping the same X size let's check it out one more time we'll see that all of these show up without the sale item now and our scroll view no longer shows any scrolling because I don't have enough items to fill up my screen size if we were to greatly shrink how much size we had available you'll see that correctly calculates the size so we can scroll and it still looks good if you check out the scene view we'll see that the content panel perfectly fits these items including the spacing if we open this up on a Mac we can see the same thing is happening it looks okay remember I said that Apple requires that you submit a screenshot of how this looks so you can take a screenshot of this exactly like it shows here and you can save that without spaces in the name then for every product you would select the screenshot path and select that product I will warn you that Apple XML delivery is not working today and Apple has shut that down I found this out after I had recorded the entire video planning to show exactly how to make it work for both Google Play and iOS and while trying to put the iOS portion I ran into some problems so I'm going to show you the problems you'll run into and what we would hope that Unity would Implement for us to prevent us from having to do a bunch of manual configuration in app store connect so we would select for every product screenshot path select that for your Apple SKU that would be the specific name that you provided on App Store connect for your app which you can find by opening up your app going to bundle ID and you'll find it there under the bundle ID you set that up when you first created your app the second piece of information you need is your team ID you can find that team ID by coming here at the top right clicking edit profile and it'll show your team ID right here I've blurted out because this is supposed to be a secret thing so you'll copy that paste it down here on Apple team ID and make sure you have your Apple SKU set up here and you'd say App Store export and then ideally it would say like app store connect Json or something like that because again Apple xmail delivery is no longer supported by Apple they have this tool called transporter which you can try to submit your in-app purchases with but you'll see we get some errors telling us that this is no longer supported and that we should instead use the app store connect API as you can see here there is a relatively simple structure but by the time you convert your XML into this format it's probably easier just to go straight into App Store connect and create all these products so instead on App Store connect open up your app come down here it features in-app purchases press the plus button and you have to manually fill this out with consumable the name you want to display and make sure that your product ID exactly matches what you have in the IAP catalog you can configure prices configure localization just like what we were doing in the IEP catalog in the editor and here you'll see we can also configure a screenshot of how it looks to purchase that you'd have to repeat that for every single in-app purchase item that we configured in the IEP catalog in the editor so that kind of sucks I'm really hoping Unity will take the feedback I've already provided to them make some kind of updates to this XML delivery so it'll maybe be the App Store connects API maybe we can directly submit it from the editor that'd be super cool but in the meantime this is what you have to do as you can see using Unity IAP is a pretty cool tool to allow us to set up in-app purchases for our game that works across platforms there's very little really we have to do other than displaying the store products after we've configured them in the unity editor and the items you can do things like segmentation to only offer particular products to particular user groups in your game it's really you set up the products and then do whatever you need to do after they're set up the more product you do have though it does get a little bit more cumbersome to deal with the store pages because you have to like submit screenshots of those purchase options to the App Store and that's just over time consuming and annoying to do and of course the more you have the more you need to test it they're all working correctly I will also say that there is a codeless way to set up IAP I didn't really go into that because I don't like the limitations that that puts on you I highly recommend you follow these steps that we've done so far gives you a really easy way to set up everything and not a lot of code to get it working I hope you got a lot of value out of this video and if you did go ahead and like And subscribe to help the channel grow reach more people and add value to more people this new video is posted every tutorial on Tuesday if you want to support this channel you can go to patreon.com bombacademy or just click the join button right here on YouTube to become a YouTube member with both of those options you can get your name up here on the screen get a voice shout out starting at the awesome tier speaking of those awesome supporters there's Cheryl Anderson Autumn K Matt Parkin Ivan rulin Paul Berry and iffy obelis and at the tremendous tier there's Bruno Bose Stitch and at the phenomenal tier there's Andrew Owen and Andrew Albright thank you all for your support I'm incredibly grateful
Info
Channel: LlamAcademy
Views: 33,685
Rating: undefined out of 5
Keywords: Unity, Tutorial, How to, How to unity, unity how to, llamacademy, llama academy, video game development, development, iap, in app purchase, in-app, in app, purchase, purchasing, in app purchasing, unity iap, unity in app purchasing, unity in app purchase, unity iap 2023, monetize, monetization, google play, app store, unity game monetization, unity app monetization, monetize unity game, monetize unity mobile, mobile game, mobile
Id: V-7R4IhS7E8
Channel Id: undefined
Length: 35min 39sec (2139 seconds)
Published: Tue Jan 24 2023
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.