{"id":5970,"date":"2024-03-14T12:36:28","date_gmt":"2024-03-14T16:36:28","guid":{"rendered":"https:\/\/ionic.io\/blog\/?p=5970"},"modified":"2024-03-15T10:08:13","modified_gmt":"2024-03-15T14:08:13","slug":"augmented-reality-with-capacitor-ar-quick-look","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look","title":{"rendered":"Augmented Reality With Capacitor: AR Quick Look"},"content":{"rendered":"\n<p><span style=\"font-weight: 400\">With Apple\u2019s release of the Vision Pro, we\u2019ve been getting a lot of questions around incorporating Augmented Reality (AR) and Capacitor. The truth is that while it\u2019s possible to add AR to your Capacitor projects, creating those experiences can be fairly difficult even within native Apple applications. The process of developing AR experiences is dependent on the types of experiences you are trying to create, how immersive you want the experience to be, and how far you are willing to go into native code to make it work. That combined with knowledge of 3D modeling, animation, photogrammetry, and several other areas of domain expertise can make it daunting.<\/span><\/p>\n<p><span style=\"font-weight: 400\">For this tutorial, I wanted to find a simpler way to incorporate AR into a Capacitor application. A project that didn\u2019t require Swift, could use all web-based technologies, and could introduce the Ionic community to AR to make it approachable. To accomplish this, I created a basic e-commerce application where you could view what you want to buy using AR.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Caveats<\/h2>\n\n\n\n<p><span style=\"font-weight: 400\">There are a few limitations with this project:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">This only works on Apple devices<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Requires Safari<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Some parts of the tutorial require extra applications that will not be covered<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">It\u2019s understandable to question to usefulness of a Capacitor application that only works on Apple devices and Safari so it\u2019s important to address this question early in this tutorial: I can really only recommend this if you are creating or have a cross-platform application where you are looking to enhance the user experience for Apple device users of your applications. If you plan to just create an AR application for Apple devices, you might be better suited creating this with Swift\/SwiftUI. Beyond this tutorial, you will likely need to use some amount of Swift, and incorporating Capacitor might make development more difficult if you plan to keep this within the Apple ecosystem.<\/span><\/p>\n<p><span style=\"font-weight: 400\">As for the extra applications I referenced above, this pertains to the use of photogrammetry with Reality Composer that I used to get my own 3D model into the project demo. Reality Composer and photogrammetry isn\u2019t particularly difficult to learn, but it is something that could be its own tutorial. It\u2019s also not entirely relevant to using AR Quick Look in a Capacitor application but I will be adding resources so that if you have your own store, you can learn how to create 3D models of your real world objects to use in your Capacitor projects.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Architecture<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"954\" height=\"1024\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/arquicklook-954x1024.png\" alt=\"\" class=\"wp-image-5972 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/arquicklook-954x1024.png 954w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/arquicklook-279x300.png 279w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/arquicklook-768x824.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/arquicklook.png 1090w\" data-sizes=\"auto, (max-width: 954px) 100vw, 954px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 954px; --smush-placeholder-aspect-ratio: 954\/1024;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"954\" height=\"1024\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/arquicklook-954x1024.png\" alt=\"\" class=\"wp-image-5972\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/arquicklook-954x1024.png 954w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/arquicklook-279x300.png 279w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/arquicklook-768x824.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/arquicklook.png 1090w\" sizes=\"auto, (max-width: 954px) 100vw, 954px\" \/><\/noscript><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">There were a few considerations for the architecture of this project:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">AR Quick Look has to utilize Safari in order to avoid using native code<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">USDZ files, depending on the resolution and storage strategy, can grow our application substantially<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Apple Pay parameters aren\u2019t recognized within a Capacitor application<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">The first consideration with AR-based applications, especially AR Quick Look, is that it either requires utilizing ARKit or Safari for it to function. While ARKit is powerful and would allow us to create a better look and feel to our application it would also require us to create a custom Capacitor plugin with native code. Making the project more difficult and not as approachable to web developers looking to learn how to add AR functionality to their Capacitor applications. So my solution to bypass this was to utilize the browser plugin to keep the experience in-app (a standard hyperlink will work but it will open Safari instead of keeping the experience in your application).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The second consideration involved the size of USDZ files and how it would impact the size of a mobile application. While a demo like this is still small and the USDZ could be stored directly on the device it became clear that any real world application would need to develop a different strategy. So, in an effort to try to make this more realistic, I made the decision to utilize AWS S3 to make the Capacitor application smaller.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The final consideration was that I wanted to show more than a 3D model and incorporate banners so that you can extend the functionality of your AR applications. Unfortunately, after numerous tests, I discovered that the standard view architecture won\u2019t recognize the banner parameters found in the <\/span><a href=\"https:\/\/developer.apple.com\/documentation\/arkit\/arkit_in_ios\/adding_an_apple_pay_button_or_a_custom_action_in_ar_quick_look\"><span style=\"font-weight: 400;\">documentation<\/span><\/a><span style=\"font-weight: 400;\"> so I created an intermediary web application for Safari to handle the banner instead. I believe this has something to do with using S3 but I wanted to avoid getting caught up with too much S3 configuration for this project.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Storage and Static Website Setup (AWS S3)<\/h2>\n\n\n\n<p>The first step to get this project running is to get the location where we are going to store our USDZ files and the static website used for the Apple Pay View. Now there are a multitude of ways to accomplish this but the way that I am most familiar with is using AWS\u2019 S3 solution. S3 is not a must for your project but you do need to find a spot to store your files and the static website so use the solution that works best for you. Let\u2019s start with creating the bucket where we are going to store our USDZ files:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to aws.amazon.com, login, and navigate to S3<\/li>\n\n\n\n<li>Click on \u201cCreate Bucket\u201d<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1298\" height=\"232\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-10.png\" alt=\"\" class=\"wp-image-5999 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-10.png 1298w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-10-300x54.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-10-1024x183.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-10-768x137.png 768w\" data-sizes=\"auto, (max-width: 1298px) 100vw, 1298px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1298px; --smush-placeholder-aspect-ratio: 1298\/232;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1298\" height=\"232\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-10.png\" alt=\"\" class=\"wp-image-5999\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-10.png 1298w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-10-300x54.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-10-1024x183.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-10-768x137.png 768w\" sizes=\"auto, (max-width: 1298px) 100vw, 1298px\" \/><\/noscript><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li>Name your new bucket<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"518\" height=\"170\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-5.png\" alt=\"\" class=\"wp-image-5993 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-5.png 518w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-5-300x98.png 300w\" data-sizes=\"auto, (max-width: 518px) 100vw, 518px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 518px; --smush-placeholder-aspect-ratio: 518\/170;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"518\" height=\"170\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-5.png\" alt=\"\" class=\"wp-image-5993\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-5.png 518w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-5-300x98.png 300w\" sizes=\"auto, (max-width: 518px) 100vw, 518px\" \/><\/noscript><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li>Uncheck \u201cBlock <em>all <\/em>public access\u201d<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"436\" height=\"130\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3.png\" alt=\"\" class=\"wp-image-5991 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3.png 436w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3-300x89.png 300w\" data-sizes=\"auto, (max-width: 436px) 100vw, 436px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 436px; --smush-placeholder-aspect-ratio: 436\/130;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"436\" height=\"130\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3.png\" alt=\"\" class=\"wp-image-5991\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3.png 436w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3-300x89.png 300w\" sizes=\"auto, (max-width: 436px) 100vw, 436px\" \/><\/noscript><\/figure>\n\n\n\n<div style=\"color: red\">\n  <strong>*Note:<\/strong> There\u2019s a lot of security concerns around having publicly accessible buckets in production environments. For this demo, it\u2019s not too much of a concern since it\u2019s for a public use case, but you\u2019ll need to evaluate this for your application.\n<\/div>\n\n\n\n<ol class=\"wp-block-list\" start=\"5\">\n<li>Scroll down and create the bucket<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"522\" height=\"114\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2.png\" alt=\"\" class=\"wp-image-5989 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2.png 522w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2-300x66.png 300w\" data-sizes=\"auto, (max-width: 522px) 100vw, 522px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 522px; --smush-placeholder-aspect-ratio: 522\/114;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"522\" height=\"114\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2.png\" alt=\"\" class=\"wp-image-5989\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2.png 522w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2-300x66.png 300w\" sizes=\"auto, (max-width: 522px) 100vw, 522px\" \/><\/noscript><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"6\">\n<li>Navigate back to the bucket list, find your newly created bucket and click into it<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"932\" height=\"114\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-9.png\" alt=\"\" class=\"wp-image-5997 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-9.png 932w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-9-300x37.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-9-768x94.png 768w\" data-sizes=\"auto, (max-width: 932px) 100vw, 932px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 932px; --smush-placeholder-aspect-ratio: 932\/114;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"932\" height=\"114\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-9.png\" alt=\"\" class=\"wp-image-5997\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-9.png 932w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-9-300x37.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-9-768x94.png 768w\" sizes=\"auto, (max-width: 932px) 100vw, 932px\" \/><\/noscript><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"7\">\n<li>Click \u201cPermissions\u201d<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1378\" height=\"132\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-7.png\" alt=\"\" class=\"wp-image-5995 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-7.png 1378w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-7-300x29.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-7-1024x98.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-7-768x74.png 768w\" data-sizes=\"auto, (max-width: 1378px) 100vw, 1378px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1378px; --smush-placeholder-aspect-ratio: 1378\/132;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1378\" height=\"132\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-7.png\" alt=\"\" class=\"wp-image-5995\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-7.png 1378w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-7-300x29.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-7-1024x98.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-7-768x74.png 768w\" sizes=\"auto, (max-width: 1378px) 100vw, 1378px\" \/><\/noscript><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"8\">\n<li>Scroll to \u201cBucket Policy\u201d and edit the bucket policy with the following JSON<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">{\n\u00a0\u00a0\u00a0\u00a0&quot;Version&quot;: &quot;2012-10-17&quot;,\n\u00a0\u00a0\u00a0\u00a0&quot;Statement&quot;: [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&quot;Sid&quot;: &quot;AddPerm&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&quot;Effect&quot;: &quot;Allow&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&quot;Principal&quot;: &quot;*&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&quot;Action&quot;: &quot;s3:GetObject&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&quot;Resource&quot;: &quot;arn:aws:s3:::bucketname\/*&quot;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0]\n}<\/code><\/pre>\n\n\n\n<div style=\"color: lightgreen\">\n  <strong>*Note:<\/strong> Here is what it looks like for the bucket I configured\n<\/div>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"856\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-11.png\" alt=\"\" class=\"wp-image-6001 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-11.png 1600w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-11-300x161.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-11-1024x548.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-11-768x411.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-11-1536x822.png 1536w\" data-sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/856;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"856\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-11.png\" alt=\"\" class=\"wp-image-6001\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-11.png 1600w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-11-300x161.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-11-1024x548.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-11-768x411.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-11-1536x822.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/noscript><\/figure>\n\n\n\n<p>Next let\u2019s create the static website bucket:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Follow steps 1-8 of the previous bucket setup but use a different name (I used <em>arquicklookwebsite<\/em>)<\/li>\n\n\n\n<li>Navigate to \u201cProperties\u201d<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1340\" height=\"132\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-6.png\" alt=\"\" class=\"wp-image-5994 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-6.png 1340w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-6-300x30.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-6-1024x101.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-6-768x76.png 768w\" data-sizes=\"auto, (max-width: 1340px) 100vw, 1340px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1340px; --smush-placeholder-aspect-ratio: 1340\/132;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1340\" height=\"132\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-6.png\" alt=\"\" class=\"wp-image-5994\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-6.png 1340w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-6-300x30.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-6-1024x101.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-6-768x76.png 768w\" sizes=\"auto, (max-width: 1340px) 100vw, 1340px\" \/><\/noscript><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li>Scroll down to \u201cStatic website hosting\u201d and click \u201cedit<img loading=\"lazy\" decoding=\"async\" data-src=\"https:\/\/lh7-us.googleusercontent.com\/6cEMY-8tIPo-Oei-uGg9NWsSpWyUvmFulaLFA_0fVS3uk8qThvQ1G0RpT_r6zrlx-FOeCsQuP8AV3GmQ_CS23nzaeO8JH_YB4g4iPHVZM81TU_L-_I8HGkMGBzNXfs1HKa8u95mVjUHy\" width=\"624\" height=\"127\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 624px; --smush-placeholder-aspect-ratio: 624\/127;\"><noscript><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/6cEMY-8tIPo-Oei-uGg9NWsSpWyUvmFulaLFA_0fVS3uk8qThvQ1G0RpT_r6zrlx-FOeCsQuP8AV3GmQ_CS23nzaeO8JH_YB4g4iPHVZM81TU_L-_I8HGkMGBzNXfs1HKa8u95mVjUHy\" width=\"624\" height=\"127\"><\/noscript><\/li>\n\n\n\n<li>Click \u201cEnable\u201d&nbsp;<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"642\" height=\"388\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-4.png\" alt=\"\" class=\"wp-image-5992 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-4.png 642w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-4-300x181.png 300w\" data-sizes=\"auto, (max-width: 642px) 100vw, 642px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 642px; --smush-placeholder-aspect-ratio: 642\/388;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"642\" height=\"388\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-4.png\" alt=\"\" class=\"wp-image-5992\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-4.png 642w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-4-300x181.png 300w\" sizes=\"auto, (max-width: 642px) 100vw, 642px\" \/><\/noscript><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"5\">\n<li>Change \u201cIndex document\u201d and \u201cError document\u201d to work with your static website (I used Angular so I changed both to index.html as this will force my static website to handle errors internally).<img loading=\"lazy\" decoding=\"async\" data-src=\"https:\/\/lh7-us.googleusercontent.com\/hxcNU3oFeZhwMsjbI-msoaIANFFp9QSQVUn6Zu0NP3TCNohxPCOdi-W7w-Srchjofe9WGMw7MDl7OMLDILqAbbw-NXo9g1Ko2arPRPib5hTtHDw1XYbjCxs0G02JQEEcaDl9FNpcEd4V\" width=\"624\" height=\"191\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 624px; --smush-placeholder-aspect-ratio: 624\/191;\"><noscript><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/hxcNU3oFeZhwMsjbI-msoaIANFFp9QSQVUn6Zu0NP3TCNohxPCOdi-W7w-Srchjofe9WGMw7MDl7OMLDILqAbbw-NXo9g1Ko2arPRPib5hTtHDw1XYbjCxs0G02JQEEcaDl9FNpcEd4V\" width=\"624\" height=\"191\"><\/noscript><\/li>\n\n\n\n<li>Save changes<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">3D Files<\/h2>\n\n\n\n<p>The Next step is to get our USDZ files and upload them into the bucket that we made to store those files. The first two files I\u2019ll be using are the Fender Stratocaster and the Cosmonaut found on the AR Quick Look Gallery <a href=\"https:\/\/developer.apple.com\/augmented-reality\/quick-look\/\">website<\/a>. The reason that I chose those particular assets is because the Fender Stratocaster is a static USDZ file (it\u2019s also just a really cool 3D model) and the Cosmonaut is an animated USDZ file.<\/p>\n\n\n\n<p>The third 3D model is something that I wanted to push the boundaries with so I took a 3D printing project that I created (a life-size Pikachu) and used photogrammetry with Reality Composer to turn it into a USDZ file:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"1600\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3.jpeg\" alt=\"\" class=\"wp-image-6000 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3.jpeg 1200w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3-225x300.jpeg 225w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3-768x1024.jpeg 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3-1152x1536.jpeg 1152w\" data-sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1200px; --smush-placeholder-aspect-ratio: 1200\/1600;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"1600\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3.jpeg\" alt=\"\" class=\"wp-image-6000\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3.jpeg 1200w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3-225x300.jpeg 225w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3-768x1024.jpeg 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-3-1152x1536.jpeg 1152w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/noscript><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"738\" height=\"1600\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1.jpeg\" alt=\"\" class=\"wp-image-5990 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1.jpeg 738w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1-138x300.jpeg 138w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1-472x1024.jpeg 472w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1-708x1536.jpeg 708w\" data-sizes=\"auto, (max-width: 738px) 100vw, 738px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 738px; --smush-placeholder-aspect-ratio: 738\/1600;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"738\" height=\"1600\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1.jpeg\" alt=\"\" class=\"wp-image-5990\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1.jpeg 738w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1-138x300.jpeg 138w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1-472x1024.jpeg 472w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1-708x1536.jpeg 708w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/><\/noscript><\/figure>\n\n\n\n<p>I chose this route because I wanted to show that you can incorporate your own USDZ files and not just be locked in with what is provided by Apple. More information on Reality Composer can be found <a href=\"https:\/\/developer.apple.com\/documentation\/realitykit\/creating-3d-content-with-reality-composer\">here<\/a>.<\/p>\n\n\n\n<p>Once you have your models, it\u2019s time to upload them to your S3 bucket:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to your S3 bucket<\/li>\n\n\n\n<li>Click \u201cUpload\u201d&nbsp;<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1416\" height=\"320\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-8.png\" alt=\"\" class=\"wp-image-5996 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-8.png 1416w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-8-300x68.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-8-1024x231.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-8-768x174.png 768w\" data-sizes=\"auto, (max-width: 1416px) 100vw, 1416px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1416px; --smush-placeholder-aspect-ratio: 1416\/320;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1416\" height=\"320\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-8.png\" alt=\"\" class=\"wp-image-5996\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-8.png 1416w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-8-300x68.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-8-1024x231.png 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-8-768x174.png 768w\" sizes=\"auto, (max-width: 1416px) 100vw, 1416px\" \/><\/noscript><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li>Drag your file to the \u201cdrag and drop\u201d section of the upload screen<\/li>\n\n\n\n<li>Click the \u201cProperties\u201d drop down<img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"97\" data-src=\"https:\/\/lh7-us.googleusercontent.com\/Y0tIKajXgzJL6eFhUR1h_6jFHeve8VNAmqxqR_WxS7REZvUF7T61JIn1ppiclLnvt-jgd9OWuPPHv3zZVwcRFROYW9jabGe7gddTyuJeuaLUURWgubC90hp2-UesqNv8kSRpqNpfKXbV\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 624px; --smush-placeholder-aspect-ratio: 624\/97;\"><noscript><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"97\" src=\"https:\/\/lh7-us.googleusercontent.com\/Y0tIKajXgzJL6eFhUR1h_6jFHeve8VNAmqxqR_WxS7REZvUF7T61JIn1ppiclLnvt-jgd9OWuPPHv3zZVwcRFROYW9jabGe7gddTyuJeuaLUURWgubC90hp2-UesqNv8kSRpqNpfKXbV\"><\/noscript><\/li>\n\n\n\n<li>Go to \u201cMetadata\u201d and change the Type to \u201cSystem defined\u201d, Key to \u201cContent-Type\u201d, and Value to \u201cmodel\/vnd.usdz+zip\u201d<img loading=\"lazy\" decoding=\"async\" data-src=\"https:\/\/lh7-us.googleusercontent.com\/0azO_laYLZGfmPfebnf5gOpHjQZmXminhAknC4JqdE0b_Aoz8fW2xrEFoHDNh_N9ibpw6yH_Gl1xXXT1Rwma2gTZpO_7gsMjmcBDg8qFS2vshthbaGkqO7hs1itUpc2U0odyPdTLMnlL\" width=\"624\" height=\"180\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 624px; --smush-placeholder-aspect-ratio: 624\/180;\"><noscript><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/0azO_laYLZGfmPfebnf5gOpHjQZmXminhAknC4JqdE0b_Aoz8fW2xrEFoHDNh_N9ibpw6yH_Gl1xXXT1Rwma2gTZpO_7gsMjmcBDg8qFS2vshthbaGkqO7hs1itUpc2U0odyPdTLMnlL\" width=\"624\" height=\"180\"><\/noscript><\/li>\n<\/ol>\n\n\n\n<div style=\"color: red\">\n  <strong>*Note:<\/strong> I\u2019m not sure if this is entirely necessary. I tried letting S3 automatically define the object and manually defining it without any issues. It\u2019s explicitly mandated in the AR Quick Look <a href=\"https:\/\/developer.apple.com\/documentation\/quicklook\">documentation<\/a> so I am manually defining it just in case.\n<\/div>\n\n\n\n<ol class=\"wp-block-list\" start=\"6\">\n<li>Click \u201cUpload\u201d<\/li>\n<\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"7\">\n<li>Click on your USDZ file again and go to \u201cProperties\u201d<img loading=\"lazy\" decoding=\"async\" data-src=\"https:\/\/lh7-us.googleusercontent.com\/UmLLgbLy5oUZGKRRlkx_AZdao5yOvFKlYpuTWSVwS-ALdTrUkpEyVlxFEIDkROf3fIY09E7EKh8-7_l7BkeTiT78N-TPi06kIsCRX68rWlcBR15mq4CzVIsl0xP2eS3uT1haE41oDtvE\" width=\"624\" height=\"147\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 624px; --smush-placeholder-aspect-ratio: 624\/147;\"><noscript><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/UmLLgbLy5oUZGKRRlkx_AZdao5yOvFKlYpuTWSVwS-ALdTrUkpEyVlxFEIDkROf3fIY09E7EKh8-7_l7BkeTiT78N-TPi06kIsCRX68rWlcBR15mq4CzVIsl0xP2eS3uT1haE41oDtvE\" width=\"624\" height=\"147\"><\/noscript><\/li>\n\n\n\n<li>Copy the URLs for each of you USDZ files in the Object URL<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"812\" height=\"184\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1.png\" alt=\"\" class=\"wp-image-5987 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1.png 812w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1-300x68.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1-768x174.png 768w\" data-sizes=\"auto, (max-width: 812px) 100vw, 812px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 812px; --smush-placeholder-aspect-ratio: 812\/184;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"812\" height=\"184\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1.png\" alt=\"\" class=\"wp-image-5987\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1.png 812w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1-300x68.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-1-768x174.png 768w\" sizes=\"auto, (max-width: 812px) 100vw, 812px\" \/><\/noscript><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Static Web Application<\/h2>\n\n\n\n<p>The static website for the life-sized Pikachu is pretty straightforward. I created a basic Angular web application named <em>arquicklookweb<\/em> utilizing Ionic Framework to make it mobile friendly. I built the application with <em>ng build<\/em> and uploaded the contents of the dist folder in a similar way as the USDZ files. The only exception is that I uploaded the contents of the dist folder to the static website bucket and skipped adding model\/vnd.usdz+zip in the properties since this is a static website instead of a USDZ file.&nbsp;<\/p>\n\n\n\n<p>This is the HTML that we will need to make this work:<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">&lt;a rel=&quot;ar&quot; id=&quot;ApplePay&quot; href=&quot;https:\/\/gamegineerlabshelpfulfiles.s3.us-west-2.amazonaws.com\/Pikachu.usdz#applePayButtonType=plain&amp;checkoutTitle=Pikachu&amp;checkoutSubtitle=Electric%20Mouse&amp;price=$500.00&quot;&gt;\n&lt;img src=&quot;\/assets\/usdz\/pikachu.jpg&quot;&gt;\n&lt;\/a&gt;<\/code><\/pre>\n\n\n\n<div style=\"color: red\">\n  <strong>*Note:<\/strong> Be sure to update the href to your USDZ object bucket URL and adjust the parameters for your use case.\n<\/div>\n\n\n\n<p>By adding \u201car\u201d, \u201cApplePay\u201d, and #applePayButtonType=plain&amp;checkoutTitle=Pikachu&amp;checkoutSubtitle=Electric%20Mouse&amp;price=$500.00 it will tell Safari how to handle the file as well as what to display for the banner. In this case the banner will show a plain Apple Pay button with a title of \u201cPikachu\u201d, a subtitle of \u201cElectric Mouse&#8221;, and a price of \u201c$500\u201d<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1290\" height=\"393\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2.jpeg\" alt=\"\" class=\"wp-image-5998 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2.jpeg 1290w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2-300x91.jpeg 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2-1024x312.jpeg 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2-768x234.jpeg 768w\" data-sizes=\"auto, (max-width: 1290px) 100vw, 1290px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1290px; --smush-placeholder-aspect-ratio: 1290\/393;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1290\" height=\"393\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2.jpeg\" alt=\"\" class=\"wp-image-5998\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2.jpeg 1290w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2-300x91.jpeg 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2-1024x312.jpeg 1024w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-2-768x234.jpeg 768w\" sizes=\"auto, (max-width: 1290px) 100vw, 1290px\" \/><\/noscript><\/figure>\n\n\n\n<p>Here is the full HTML on the static web application:<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">&lt;ion-content [fullscreen]=&quot;true&quot;&gt;\n  &lt;ion-card&gt;\n    &lt;a rel=&quot;ar&quot; id=&quot;ApplePay&quot; href=&quot;https:\/\/gamegineerlabshelpfulfiles.s3.us-west-2.amazonaws.com\/Pikachu.usdz#applePayButtonType=plain&amp;checkoutTitle=Pikachu&amp;checkoutSubtitle=Electric%20Mouse&amp;price=$500.00&quot;&gt;\n      &lt;img src=&quot;\/assets\/usdz\/pikachu.jpg&quot;&gt;\n    &lt;\/a&gt;\n    &lt;ion-card-header&gt;\n      &lt;ion-card-title&gt;Pikachu&lt;\/ion-card-title&gt;\n      &lt;ion-card-subtitle&gt;#0025&lt;\/ion-card-subtitle&gt;\n    &lt;\/ion-card-header&gt;\n\n    &lt;ion-card-content&gt;\n      When it is angered, it immediately discharges the energy stored in the pouches in its cheeks... This 3D print is friendly and purchasable!\n    &lt;\/ion-card-content&gt;\n  &lt;\/ion-card&gt;\n&lt;\/ion-content&gt;<\/code><\/pre>\n\n\n\n<p>The code for the full static Angular web application can be found <a href=\"https:\/\/github.com\/GamegineerLabs\/WebARQuickLook\">here<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Capacitor<\/h2>\n\n\n\n<p>Now that we\u2019ve gone through all the configuration steps, it\u2019s straightforward to get a Capacitor application setup and ready to work with AR Quick Look:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create a new Capacitor application (I used Angular so you\u2019ll need to adjust this if you are using a different framework)<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">ionic start ARQuickLook blank --type=angular<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>Once bootstrapped, go to your <em>home.page.html<\/em> file and paste in the following HTML<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">&lt;ion-header [translucent]=&quot;true&quot;&gt;\n  &lt;ion-toolbar&gt;\n    &lt;ion-title&gt;\n      Shop\n    &lt;\/ion-title&gt;\n  &lt;\/ion-toolbar&gt;\n&lt;\/ion-header&gt;\n\n&lt;ion-content [fullscreen]=&quot;true&quot;&gt;\n  &lt;ion-header collapse=&quot;condense&quot;&gt;\n    &lt;ion-toolbar&gt;\n      &lt;ion-title size=&quot;large&quot;&gt;Shop&lt;\/ion-title&gt;\n    &lt;\/ion-toolbar&gt;\n  &lt;\/ion-header&gt;\n\n  &lt;ion-list&gt;\n    &lt;ion-item (click)=&quot;openAR(&#039;guitar&#039;)&quot;&gt;\n      &lt;ion-avatar aria-hidden=&quot;true&quot; slot=&quot;start&quot;&gt;\n        &lt;img alt=&quot;&quot; src=&quot;\/assets\/usdz\/stratocaster.jpeg&quot; \/&gt;\n      &lt;\/ion-avatar&gt;\n      &lt;ion-label&gt;\n        &lt;h1&gt;Fender Guitar&lt;\/h1&gt;\n        &lt;p&gt;Fender Stratocaster&lt;\/p&gt;\n      &lt;\/ion-label&gt;\n    &lt;\/ion-item&gt;\n    &lt;ion-item (click)=&quot;openAR(&#039;cosmonaut&#039;)&quot;&gt;\n      &lt;ion-avatar aria-hidden=&quot;true&quot; slot=&quot;start&quot;&gt;\n        &lt;img alt=&quot;&quot; src=&quot;\/assets\/usdz\/cosmonaut.png&quot; \/&gt;\n      &lt;\/ion-avatar&gt;\n      &lt;ion-label&gt;\n        &lt;h1&gt;Cosmonaut&lt;\/h1&gt;\n        &lt;p&gt;Cosmonaut Animation&lt;\/p&gt;\n      &lt;\/ion-label&gt;\n    &lt;\/ion-item&gt;\n    &lt;ion-item (click)=&quot;applePay()&quot;&gt;\n      &lt;ion-avatar aria-hidden=&quot;true&quot; slot=&quot;start&quot;&gt;\n        &lt;img alt=&quot;&quot; src=&quot;\/assets\/usdz\/cupandsaucer.jpeg&quot; \/&gt;\n      &lt;\/ion-avatar&gt;\n      &lt;ion-label&gt;\n        &lt;h1&gt;Pikachu&lt;\/h1&gt;\n        &lt;p&gt;3D Print... Electric Mouse&lt;\/p&gt;\n      &lt;\/ion-label&gt;\n      &lt;ion-chip color=&quot;success&quot;&gt;Buy Now!&lt;\/ion-chip&gt;\n    &lt;\/ion-item&gt;\n  &lt;\/ion-list&gt;\n&lt;\/ion-content&gt;<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li>Import the Capacitor Browser plugin<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">npm install @capacitor\/browser<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li>Then go to <em>home.page.ts <\/em>and paste in the following code<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">import { Component } from &#039;@angular\/core&#039;;\nimport { Browser } from &#039;@capacitor\/browser&#039;;\n\n@Component({\n  selector: &#039;app-home&#039;,\n  templateUrl: &#039;home.page.html&#039;,\n  styleUrls: [&#039;home.page.scss&#039;],\n})\nexport class HomePage {\n\n  constructor() {}\n\n  async openAR(item: string) {\n    if (item == &quot;guitar&quot;) {\n      await Browser.open({ url: &#039;https:\/\/gamegineerlabshelpfulfiles.s3.us-west-2.amazonaws.com\/fender_stratocaster.usdz&#039;, presentationStyle: &#039;popover&#039;});\n    } else {\n      await Browser.open({ url: &#039;https:\/\/gamegineerlabshelpfulfiles.s3.us-west-2.amazonaws.com\/CosmonautSuit_en.reality&#039;, presentationStyle: &#039;popover&#039;});\n    }\n\n  }\n\n  async applePay() {\n    await Browser.open({ url: &#039;http:\/\/arquicklookwebsite.s3-website-us-west-2.amazonaws.com\/&#039;, presentationStyle: &#039;popover&#039;});\n  }\n\n}<\/code><\/pre>\n\n\n\n<div style=\"color: red\">\n  <strong>*Note:<\/strong> You\u2019ll need to paste in the URLs you copied beforehand. For the Apple Pay view you\u2019ll need to paste in the URL for the static website bucket instead of the Pikachu.usdz file URL.\n<\/div>\n\n\n\n<ol class=\"wp-block-list\" start=\"5\">\n<li>Add iOS<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">ionic capacitor add ios<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"6\">\n<li>Build the Capacitor project<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">ionic capacitor build<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"7\">\n<li>Sync the project to get your Capacitor project to the ios folder<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">ionic capacitor sync<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"8\">\n<li>Open the project in XCode<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">ionic capacitor open ios<\/code><\/pre>\n\n\n\n<p>This will open your Capacitor application in XCode and you should be able to run this on your iOS device<\/p>\n\n\n\n<div style=\"color: red\">\n  <strong>*Note:<\/strong> Since this is an AR application, you will need to run this on a physical device if you are using an iOS device.\n<\/div>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"738\" height=\"1600\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image.jpeg\" alt=\"\" class=\"wp-image-5988 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image.jpeg 738w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-138x300.jpeg 138w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-472x1024.jpeg 472w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-708x1536.jpeg 708w\" data-sizes=\"auto, (max-width: 738px) 100vw, 738px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 738px; --smush-placeholder-aspect-ratio: 738\/1600;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"738\" height=\"1600\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image.jpeg\" alt=\"\" class=\"wp-image-5988\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image.jpeg 738w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-138x300.jpeg 138w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-472x1024.jpeg 472w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/image-708x1536.jpeg 708w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/><\/noscript><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Apple Vision Pro<\/h2>\n\n\n\n<p>Now for the cool part! Since we spent all that time with configuration and architecting our AR application, we can now run our project on the Vision Pro! If you want to test it out, all you need to do change your run destination from your physical device to either your own Apple Vision Pro or the Vision Pro simulator:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" data-src=\"https:\/\/lh7-us.googleusercontent.com\/4HNOngF15FIFgSQ2djODvxoaWBBES9l4SlvDpOf1kgdF4UpaZVMp5igZT3xRly-x2gCgpPMvx0kJbwULmkgRKq-tDLTi3DSZi_fejYSrc-ZJq4E7b89LQzhNhS28cJ36KHr3u80S3AFG\" width=\"624\" height=\"368\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 624px; --smush-placeholder-aspect-ratio: 624\/368;\"><noscript><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/4HNOngF15FIFgSQ2djODvxoaWBBES9l4SlvDpOf1kgdF4UpaZVMp5igZT3xRly-x2gCgpPMvx0kJbwULmkgRKq-tDLTi3DSZi_fejYSrc-ZJq4E7b89LQzhNhS28cJ36KHr3u80S3AFG\" width=\"624\" height=\"368\"><\/noscript><\/p>\n\n\n\n<p>That\u2019s it. It literally works by default- no special configuration needed and we didn\u2019t even need to add any Swift\/SwiftUI to make this work on the Vision Pro!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p>AR can be a challenging endeavor for any web developer but it\u2019s entirely possible to create your own AR experiences without having to dive into native code to make it happen. In this tutorial I was able to create a full AR Quick Look experience utilizing all web technologies, only relying on some configuration to make it work. Swift\/SwiftUI with ARKit can be really challenging for even seasoned developers so by bypassing it and using basic Capacitor plugins with Safari, you can really tone down the difficulty if you want to incorporate it into your own projects.<\/p>\n\n\n\n<p>In future iterations, I plan on incorporating some custom Capacitor plugin work to make this a truly embedded experience.&nbsp; Be on the lookout for upcoming tutorials where I will show you how to get the most out of ARKit in your Capacitor applications!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Resources<\/h2>\n\n\n\n<p>Below is the code if you would like to follow along, as well as&nbsp; resources that will help you with your own Capacitor AR Quick Look Project:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Projects:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/GamegineerLabs\/CapARQuickLook\">Capacitor Application<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/GamegineerLabs\/WebARQuickLook\">Web Application<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><a href=\"https:\/\/capacitorjs.com\/docs\">Capacitor Documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developer.apple.com\/augmented-reality\/quick-look\/\">USDZ 3D Files<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developer.apple.com\/documentation\/arkit\/arkit_in_ios\/previewing_a_model_with_ar_quick_look\">AR Quick Look Tutorial<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developer.apple.com\/documentation\/quicklook\">AR Quick Look Documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developer.apple.com\/documentation\/arkit\/arkit_in_ios\/adding_an_apple_pay_button_or_a_custom_action_in_ar_quick_look\">AR Banners Documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/userguide\/configuring-block-public-access-bucket.html\">AWS S3 Documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developer.apple.com\/documentation\/realitykit\/creating-3d-content-with-reality-composer\">Reality Composer Documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=jarQ0LIklLw\">Reality Composer Video Tutorial<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This blog post will teach you how to add AR Quick Look to your Capacitor application for iOS and the Apple Vision Pro.<\/p>\n","protected":false},"author":103,"featured_media":5986,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"","publish_post_category":"","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"","discourse_permalink":"","wpdc_publishing_response":"","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,124],"tags":[151,23,100,25],"class_list":["post-5970","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all","category-tutorials","tag-capacitor","tag-framework","tag-ios","tag-tutorials"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.0 (Yoast SEO v23.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Augmented Reality With Capacitor: AR Quick Look - Ionic Blog<\/title>\n<meta name=\"description\" content=\"This blog post will teach you how to add AR Quick Look to your Capacitor application for iOS and the Apple Vision Pro.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Augmented Reality With Capacitor: AR Quick Look\" \/>\n<meta property=\"og:description\" content=\"This blog post will teach you how to add AR Quick Look to your Capacitor application for iOS and the Apple Vision Pro.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-14T16:36:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-15T14:08:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/cap-AR-feature-image-1024x512.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Logan Brade\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@loganbrade\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Logan Brade\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look\"},\"author\":{\"name\":\"Logan Brade\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/07a04c81f6b3180076d1a6ac967bc562\"},\"headline\":\"Augmented Reality With Capacitor: AR Quick Look\",\"datePublished\":\"2024-03-14T16:36:28+00:00\",\"dateModified\":\"2024-03-15T14:08:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look\"},\"wordCount\":2039,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/cap-AR-feature-image.png\",\"keywords\":[\"Capacitor\",\"Framework\",\"iOS\",\"Tutorials\"],\"articleSection\":[\"All\",\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look\",\"url\":\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look\",\"name\":\"Augmented Reality With Capacitor: AR Quick Look - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/cap-AR-feature-image.png\",\"datePublished\":\"2024-03-14T16:36:28+00:00\",\"dateModified\":\"2024-03-15T14:08:13+00:00\",\"description\":\"This blog post will teach you how to add AR Quick Look to your Capacitor application for iOS and the Apple Vision Pro.\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/cap-AR-feature-image.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/cap-AR-feature-image.png\",\"width\":2240,\"height\":1120},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Augmented Reality With Capacitor: AR Quick Look\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ionic.io\/blog\/#website\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"name\":\"ionic.io\/blog\",\"description\":\"Build amazing native and progressive web apps with the web\",\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ionic.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ionic.io\/blog\/#organization\",\"name\":\"Ionic\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"width\":1920,\"height\":854,\"caption\":\"Ionic\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/ionicframework\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/07a04c81f6b3180076d1a6ac967bc562\",\"name\":\"Logan Brade\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/03\/IMG_2854-150x150.jpg\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/03\/IMG_2854-150x150.jpg\",\"caption\":\"Logan Brade\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/loganbrade\/\",\"https:\/\/x.com\/loganbrade\"],\"url\":\"https:\/\/ionic.io\/blog\/author\/logan-brade\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Augmented Reality With Capacitor: AR Quick Look - Ionic Blog","description":"This blog post will teach you how to add AR Quick Look to your Capacitor application for iOS and the Apple Vision Pro.","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:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look","og_locale":"en_US","og_type":"article","og_title":"Augmented Reality With Capacitor: AR Quick Look","og_description":"This blog post will teach you how to add AR Quick Look to your Capacitor application for iOS and the Apple Vision Pro.","og_url":"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look","og_site_name":"Ionic Blog","article_published_time":"2024-03-14T16:36:28+00:00","article_modified_time":"2024-03-15T14:08:13+00:00","og_image":[{"width":1024,"height":512,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/cap-AR-feature-image-1024x512.png","type":"image\/png"}],"author":"Logan Brade","twitter_card":"summary_large_image","twitter_creator":"@loganbrade","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Logan Brade","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look"},"author":{"name":"Logan Brade","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/07a04c81f6b3180076d1a6ac967bc562"},"headline":"Augmented Reality With Capacitor: AR Quick Look","datePublished":"2024-03-14T16:36:28+00:00","dateModified":"2024-03-15T14:08:13+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look"},"wordCount":2039,"commentCount":0,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/cap-AR-feature-image.png","keywords":["Capacitor","Framework","iOS","Tutorials"],"articleSection":["All","Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look","url":"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look","name":"Augmented Reality With Capacitor: AR Quick Look - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/cap-AR-feature-image.png","datePublished":"2024-03-14T16:36:28+00:00","dateModified":"2024-03-15T14:08:13+00:00","description":"This blog post will teach you how to add AR Quick Look to your Capacitor application for iOS and the Apple Vision Pro.","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/cap-AR-feature-image.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/cap-AR-feature-image.png","width":2240,"height":1120},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/augmented-reality-with-capacitor-ar-quick-look#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Augmented Reality With Capacitor: AR Quick Look"}]},{"@type":"WebSite","@id":"https:\/\/ionic.io\/blog\/#website","url":"https:\/\/ionic.io\/blog\/","name":"ionic.io\/blog","description":"Build amazing native and progressive web apps with the web","publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ionic.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ionic.io\/blog\/#organization","name":"Ionic","url":"https:\/\/ionic.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","width":1920,"height":854,"caption":"Ionic"},"image":{"@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/ionicframework"]},{"@type":"Person","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/07a04c81f6b3180076d1a6ac967bc562","name":"Logan Brade","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/03\/IMG_2854-150x150.jpg","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2023\/03\/IMG_2854-150x150.jpg","caption":"Logan Brade"},"sameAs":["https:\/\/www.linkedin.com\/in\/loganbrade\/","https:\/\/x.com\/loganbrade"],"url":"https:\/\/ionic.io\/blog\/author\/logan-brade"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/03\/cap-AR-feature-image.png","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/5970","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/users\/103"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=5970"}],"version-history":[{"count":12,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/5970\/revisions"}],"predecessor-version":[{"id":6004,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/5970\/revisions\/6004"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/5986"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=5970"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=5970"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=5970"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}