Filter
-
Content Type
-
Category
Mobile/Wearable
Visual Display
Digital Appliance
Platform
Recommendations
Filter
Learn Developers Podcast
docseason 2, episode 4 previous episode | episode index | next episode this is a transcript of one episode of the samsung developers podcast, hosted by and produced by tony morelan a listing of all podcast transcripts can be found here host tony morelan senior developer evangelist, samsung developers instagram - twitter - linkedin guest olga gabay zeru studio listen download this episode topics covered galaxy themes studio galaxy store consumers galaxy store developers galaxy store badges social media promotions licensing ip marketing best of galaxy store awards helpful links olga gabay linkedin zeru studio facebook behance transcript note transcripts are provided by an automated service and reviewed by the samsung developers web team inaccuracies from the transcription process do occur, so please refer to the audio if you are in doubt about the transcript tony morelan 00 01 hey, i'm tony morelan and this is pow! the samsung developers podcast where we chat with innovators using samsung technologies, award winning app developers and designers, as well as insiders working on the latest samsung tools welcome to season two, episode four on today's show, i interview olga gabay olga is a 2020 best of galaxy store award winner for her phone ui theme design, dark warrior in just a few years, her design style for capturing emotion in her themes, has helped her become one of the top developers on galaxy store not only do we talk about her approach to design, the impact of covid, but also the challenges related to using licensed imagery enjoy i am super excited to have on the podcast with me today olga gabay welcome to the podcast, olga olga gabay 00 50 thank you tony morelan 00 52 i absolutely love your work your designs always evoke such emotion you know, when i see your themes, i often think of them as like movie posters, or even like video game covers they all seem to like tell a story that being said, though, when they look at your full library of work, it's quite a variety of styles who is olga gabay? olga gabay 01 15 well, basically, i'm a graphic designer, i started to do this middle of 90s by now it's like, almost 26 years of experience so throughout all these years, what i collected, i mean, like, ideas, experiences i just brought up now in my themes, and i still keep experimenting so actually, sometimes people they don't believe all my works are by the same designer, because there is a variety of styles actually, i'm not really happy with that, because i'm more jealous to people who can produce all their works in just one style something when you can say this designer has some unique face some unique style, and i don't have it, i want to try these and that and that, you know, like everything, a little bit of everything tony morelan 02 03 yeah, when i think of olga gabay, i definitely do think of those that that certain style that i had mentioned, where it really does capture emotion but as i'm scanning through your collection, i see this wide variety and i think i can relate to that a lot because even in my watch face designing that i was doing i remember before i worked at samsung, i had someone at samsung, give me a little advice and say, you know, you should pick a style, you should pick a direction and then build on that brand and i couldn't do it i was just i would do something that was very artistic, or i do something that's very mechanical and i guess that's just that's how i work but that's what i can relate to that for sure interesting that you said that you started designing back in the 90s that's about the time that i did, too we get the joy of working when adobe was doing all those early releases of photoshop and illustrator, we got to be a part of that so is that true? were you working in photoshop back in the in the early days? olga gabay 03 02 oh, yes, absolutely so i believe my first photoshop ah, that was a version of 2 5 i think okay and yes, that's so it was a lot of fun back then because, you know, like when they introduced this layer system? oh, yes i was like, wow, now you can put things on different layers that was so exciting tony morelan 03 21 yeah, i remember that i remember even like multiple undo’s when i first started, i think it was photoshop, you know, 1 2, we didn't even have multiple undo it was one undo and that was there was no history you couldn't go back that was everything was on one layer but you know what that made us pay attention that much more closely to the work that we were doing? did you study design in school? is this, you know, a career path that you started out olga gabay 03 51 early on? yeah, i will start in just the college but back then in the college, we didn't study any computers so we were doing everything that old fashioned ways like with paper paints, pencils, glues that sort nothing much yes tony morelan 04 05 and you know what's great about that, and you can tell me if you have the same sort of theory on that i often tell when i'm when i'm teaching classes in schools, you need to grab a pencil and paper to do your initial copying, that if you dive right into a computer program, you're limiting your freedom to design so i always say those first comp designs, you should really grab pencil and paper did you have the same approach to design? olga gabay 04 30 yes, i agree with that but i used to do it for many years but you know, in all my themes now, i never did even a single time because i was always like under the pressure of to make my collection and then i just lost this habit so nowadays, i just go straight but of course i do draft it's not like i create the image of the wallpaper as it's supposed to be first, i'm just composing everything with low resolution images and just doing some marks with an image electronic pen sure so with my tablet, you know, so it's still drafting, but electronically gotcha i tony morelan 05 06 see i see yeah, i'm not surprised when i see your work i do see a lot of, i'll call it collaging so it looks like you're compiling different imagery and bringing it together to make a new scene so i could definitely see where you do rounds of, of comping and revisions to finally get to that final design olga gabay 05 25 yeah, exactly tony morelan 05 26 let me back up just a little bit and tell me where are you originally from? olga gabay 05 31 so, i came from russia from moscow i moved to canada 20 years ago, in the greater toronto area, as life is more quiet here nice i'm tony morelan 05 39 sure it's a little a little cold, where you are at least this time of year up in canada your name is olga gabay but tell me do you have a company name? is there a brand name behind olga? olga gabay 05 50 yes, my company name is zero studio but because it's a small studio, and i'm the only designer there two other people they do some routine things not related to the designing so i often go under my own name i know it's sometimes it creates a little mess but my name in the theme store is more a result of registration so i could not put the company name that's the problem now i can change it tony morelan 06 15 yeah, once you start building your collection, it can be a little difficult to halfway through to want to change course and switch the brand name because you lose the history and the download recording of it yeah, i understand your situation on that tell me about how you first learned about samsung and designing themes olga gabay 06 34 oh, actually, that's a little bit funny story, because i was just exploring things on my phone, some new features, some settings, you know what i can do? and i came across the theme store and the very first thing i realized there that it's not all these themes, they're not created by samsung electronics itself, i mean by the local people so there are all different designers from all over the world and when i found that out at home, i can do the same, i need to give it a try so then i just googled how to create themes for samsung galaxy phones and that brought me to the page where everyone can register for the program sure tony morelan 07 14 so how many years ago was that? olga gabay 07 16 sorry, something years ago? first, it took me about two months to create my portfolio actually, then the review? you know, it's a long process tony morelan 07 23 yes, the review team gets a lot of applications yes, i know super excited that you were selected and that you've become one of the top designers for samsung is theme designing? is this your full-time job? or do you do other design projects olga gabay 07 39 currently, it's my full-time job, i was so excited to be accepted, i just started creating one thing after another at first it was mostly wallpapers, then themes, you know, you also need to do a lot of other things like searching for the images that you are going to use sometimes it takes a lot of time to find the appropriate images that you want to use in the in the other thing is social media promotion, takes tons of time, yes, registering the application, all these keywords, translating them in other languages and verifying the language because you cannot simply put like translate from english to chinese yeah, you need to check if your translation is correct so the context is still the same and yes, it takes a lot of time tony morelan 08 22 so that's interesting what you said as far as translating for different languages, because i know that you have that opportunity when you're publishing your app to go in, in what's called add a language, if you don't add a language than english is just the default language for your theme meaning that regardless of what country a user is, in, when they actually look at your theme for sale, they're having to read it in english so you are taking that extra step and correct where you are selecting to add a language and then putting in translation so that users from around the world will actually see your text in their native language, correct? olga gabay 08 56 yeah, because i found out that many users, they do their search with their local language on the other hand, there are one major issue first of all, you cannot translate in all the languages, you can select the few most common ones yes and the second issue, as i just mentioned, it's you need to be sure that the context is correct because you know, like google translator or university context, sometimes they still can be misleading you cannot always trust them so then how do you gain confidence that what you're translating is correct well, i only have issues with chinese korean language and you know, chinese language is mandatory there because if you don't have chinese translation, your product won't be on the chinese market yes, korean language again, due to the huge amount of buyers in korea so all i can do is just put the translation of the google and check if the image is matching the word so if the result will be similar to what i expect to see so in chinese i recently translated the word pink color, okay, but the chinese it to be translated as a cream oh, and that's something you don't want to do because when you put this translation in that image search, you receive exactly the cream like cakes and oh, interesting yeah, or for instance, the word spring, it will give you spring like a piece of metal tony morelan 10 14 yes, like a bouncing spring okay so i see what you're doing so you're taking the translated words, and then sort of cross referencing them in google to just make sure that they are pulling up imagery that matches it so you know that yeah, that it has translated it correctly? yeah so let me go back and ask you, you had said that the name of your company is zero studios, that that's spelled ze are you? is that correct? olga gabay 10 39 yes correct tony morelan 10 39 yeah how did you come up with that name? is there a meaning behind that? olga gabay 10 42 already internet years, i use the name zero as my nickname and it means a sky in basque language i just wanted to have a nickname something related to sky i don't know why it was just kind of mode and then i just borrowed my own nickname to name the studio, because, you know, it's actually was quite quick decision i just needed to use something funny tony morelan 11 05 so you had mentioned that there are a few other people that work with you, but they don't do design? where are they assisting you? olga gabay 11 10 yep the social media marketing, because you know, it's a routine job when you need to repeatedly for instance, copy paste tags, yes, like scheduled posts, when you need to follow people, but it takes a lot of time so that's why i need to save and the second person is making this some registrations and updates, updating applications for instance, recently, i needed to change prices and because different countries, different abilities to pay, right, so we cannot put the same price for united states, for india and for i don't know, like africa, for instance right? we need to adjust them accordingly so like, depending on how much people can afford, every product should be changed manually tony morelan 11 56 yeah so you're coming up with a custom pricing approach, depending on different countries? olga gabay 12 02 yeah, that's an incredibly difficult job what i could do is just to hire someone to change his prices tony morelan 12 09 i see i see so we've talked a lot about themes, but are you designing also, wallpapers, aod? icons? yes, olga gabay 12 17 i designed everything so all four section like themes, wallpapers, say, always on display images and icons and because i have a huge amount of wallpapers, and lds, that creates actually a big number of products in my store so exactly, it would be 1650, something like this tony morelan 12 40 wow so i can see where you would need help with this managing olga gabay 12 46 so yeah, exactly because if it was just a few hundreds of them, it was fine but you know, well, okay, there are also a lot of free products but still, there are still hundreds of products to be changed manually tony morelan 13 00 so let's talk about that for a moment because that always is a good topic of discussion and that is this whole free approach so give me your insight, you know, how are you utilizing the ability to offer free wallpapers free themes? olga gabay 13 14 well, i will say my approach is just to take into account the people who cannot pay for the products, of course, it's mostly wallpapers again, simply because you know, it takes just a little job to do them because some wallpapers i create from scratch, but still majority are modified stock images so you just recall or in them like recomposing them, but just a little, you know, it's not like really a long, difficult work but i have approximately 10% of my themes are free and some of them, it took many, many hours to create and still i was willing to release them for free because like i said, the people who cannot buy mostly this, it's a conscious that don't have access to the paid content in the store because we have a huge section of this country's especially in africa, asia, like small island countries, they don't have an atoll, right? tony morelan 14 06 yes, that's a great approach i mean, i often tell designers that you know, you can utilize the free aspect of the galaxy store, but you do need to limit it so that you don't want to just be giving away all of your content, where you know, your fanbase is just expecting to get free i mean, you can use it as a way to broaden your brand but so you said at about 10% of your apps are free, meaning that the remaining 90% are paid, correct? olga gabay 14 34 yes, but it's only related to themes for wallpapers and lds, the percentage of free content is higher, okay it can be up to 30% because you know, it's kind of compromise if the person cannot or don't want a want to buy the theme, at least maybe this person can be satisfied with just the wallpaper tony morelan 14 55 so let's talk about your imagery, because i think that is one thing that stands out the most i mean, you do this this collaging you've talked a bit about how sometimes you're utilizing your own photography, but you also are licensing stock photography yes tell me a little bit about that approach olga gabay 15 13 again, in the very beginning, i was only using my own images and it was actually helpful because when i was creating my portfolio, i didn't want any conflict in situations, but the review team, so they wouldn't say, okay, like, we're not sure if this image is ever belong to you so i made sure i use only my own images just to show my capabilities, so that i can use my own photography or my own artworks but of course, later on, i started to utilize stock images simply because it's impossible for one person again, to create everything on their own right? because you cannot be illustrators 3d designer, videographer and everything so i started introducing stock images and the most difficult part, as we all know, you know, it's is licensing because first of all, there is no clear border between modified image and non-modified image because of course, if you're doing a complex collage, that's obvious, but if you change just a little, you cannot always say for sure whether it's good to be using the theme or not, that's actually the open question and i know that many designers, they keep asking it so my approach is to use different stocks for that the photobank that has soft agreement likes kind of, oh, you can, you can use it, but just make sure you modify the just a little and the amount of your downloads is not too high, it just doesn't exceed certain number but there are also some stocks with harder restrictions, then you want to make sure you don't go with this image aziz, tony morelan 16 41 you had mentioned that when you first apply to become a themes designer that you made certain that all of the artwork shown in your comp designs, was truly your own artwork and i just want to mention that yes, that is a requirement that for those that are applying to become a themes designer, you must use 100% all original artwork, you cannot use stock imagery and just to repeat, when you are publishing themes if you are using stock photography, you must you must make sure that you have the proper license in place for distributing certain imagery like that great to see that you are making that an important asset to your theme thank you so let's talk a bit about your workflow and the software you use to create your themes and wallpapers what's your what's your first step? olga gabay 17 28 okay, first step, i need to get some inspiration normally, i don't need to do anything special for it because in your normal life, when you observe some scenes or 3d or you're watching nice landscapes on instagram, or some other people art works on pinterest, you already like i use you see it and you think oh, here is some inspiration for a new theme and most often i get an influence from the music that i listen to that actually a majority of my themes, they based on the picture that that i create in my head by listening to something to some music, that's very interesting tony morelan 18 05 i love hearing that it's funny, because when i see a lot of your theme designs, they inspire an emotion and that emotion can definitely be conveyed, you know, through music so interesting that it's kind of reverse in the same state what music you're inspired by at that moment is what helps you in your mind, think of what would that theme be? olga gabay 18 26 yes, exactly so you can actually see this picture in your head while you see hear the sound and even i have a few themes that started with a ringtone so i don't know if you noticed, i have many of my themes, actually majority of my themes they have customized sounds, yes and here's the thing, some of the themes it's when i hear that beautiful piece on there in the sound bank, and i like wow, that's a perfect ringtone now, i need to make a picture for this ringtone that's funny, but you know, it's like that the old way reverse way to do things but yes, it's also a source of inspiration tony morelan 19 06 so that's really interesting that you say that because this past year, you actually won the best of galaxy store award for best innovative theme and when i saw your theme nominated, that's what stood out when i heard the ring tones i thought wow, this is really capturing the essence of the theme titled dark warrior so let's talk a little bit about that how did you first learn that you were winning? the best innovative theme for best of galaxy store awards? 2020 olga gabay 19 35 yes, i will justify it and i didn't expect that to be honest tony morelan 19 40 so have you leveraged? you know, the fact that you won this award? olga gabay 19 44 well, it just inspired me to create more themes of that would contain something different or for that i reserved the store market regularly just to check what other designers do and trying to figure out what they didn't try to apply in their themes so something that can be sort of unique element, we all want to be unique and something right because we want to be distinct, not just fluid, the store with the same kind of themes tony morelan 20 15 yes so what was unique with this year's award show was that because of the pandemic, we were not able to have an in-person event so then everything was online for those of you that haven't seen it, go check out on youtube, we have our best of galaxy store awards for 2020 olga wins the best innovative theme award for her theme, dark warrior i actually had the honor of helping olga create the trailer video, when we announce who won the award and what it was for we play a quick little 32nd clips to help the viewers see what this theme was, that was a blast for me to take your theme and the essence that you've created and tried to bring that to film, i was able to, you know, have some fun doing some voiceover work, i had a colleague of mine help with myself, where we both did the voice that is heard overlaid on top of the video and doing the motion behind it so i actually had a blast working on that trailer for your dark warrior theme olga gabay 21 14 and it was a fantastic job of you actually, because i was i was like so much surprised and it was really amazing, you know? tony morelan 21 22 yeah, so that was definitely go check out the video on youtube, you can jump ahead to when olga wins the award and take a look at that it really it was definitely a highlight for me working on that on the theme boards project so let's go back even a little bit further you actually came out to sdc19 to san jose, correct? olga gabay 21 44 yes, correct tony morelan 21 45 yeah, that's when i first met you so tell me about that experience? what was that like to fly down to san jose and get to meet not only the people at samsung, but i'm sure you had the opportunity to meet a lot of the other developers that were there at the event olga gabay 21 58 actually, i can tell straight it was my best experience of this year, as the best event i ever attended the last few years probably or even more, it was actually very exciting because not only i could meet people in the real life, make new connections but i learned a lot i attended your seminar on designing watch face tony morelan 22 19 so the seminar that you're referring to was that the one that i had the comedian up on stage with me, and we were working with the audience yeah yeah, that was a lot of fun yeah, we actually brought in a professional comedian and together, we were able to get the audience to help us inspire to create a watch this and that was a quite a fun event olga gabay 22 41 yeah, absolutely tony morelan 22 44 unfortunately, this year, we were not able to have a live event because of the pandemic can you tell me how the pandemic has affected you in your work? olga gabay 22 53 honestly, it wasn't affected at all, because i just keep doing my things and even my sales were not affected surprisingly, you know, i actually was i was prepared for the worst, but it didn't happen and i would say it, it was rather beneficial, because i spent more time staying home and that gave me opportunity to learn more, you know, now i can see i improve my skills because if not, i would probably spend this time more thinking outside with people like this that's true tony morelan 23 27 and you know what, you're not the first developer who has told me that, you know, due to the pandemic, more people were on their devices, they were at home, we saw a definite uptick in the use of devices, which meant that more people were downloading themes and wallpapers, but likewise, more developers were stuck at home and so they had more time to really work on their marketing their designs just really building their brand so we did see some success stories come out of this you know, unfortunate pandemic that we've all been in so what is in the future for olga gabay and zero studios olga gabay 24 11 so i'm planning to introduce in more of my own artwork like the same as i did in the very beginning, and to be unique tony morelan 24 18 so let's talk about some of the other designers so who out there in the samsung galaxy store inspires you olga gabay 24 24 i will say the theme designers are a sebastian ward cabbage and air design tony morelan 24 29 yes, both are great designers if you want to find them on the galaxy store sebastian wolodkiewicz is sw designs that's the letter s and the letter w and aire designs is spelled a i r e designs yeah, i love all of their themes olga gabay 24 45 in my opinion that's how that perfect theme should look like in terms of interface and usability so something that looks comfortable for the eyes with good looking icons and what i love about these two designers, they always have good choice of colors other icons are clear, readable they don't use color combination that tony morelan 25 04 hurt your eyes when i teach classes, i remind the students if it takes somebody, you know, a few seconds to actually figure out what that icon is, then you failed so yeah, so color, simplicity, when it comes to icons, those are all extremely important so when you're not designing themes, what do you like to do for fun? olga gabay 25 24 first of all, i prefer to spend time outside, especially, and the nature and i stick to the active lifestyle so i love all kinds of alternative workouts that can be performed outside of the gyms, and also, it's traveling and mostly traveling so i have visited many different countries and cities, and i love to do travel photography and then i also sell some disk images on photo banks and that's kind of, i will say, hobby or side hustle, what i enjoyed that's great that's great so not only are you utilizing stock imagery by purchasing the license to use them in your work, but you also are taking your photos and putting them out there for other people to you so tony morelan 26 07 that that's great yes, exactly well, olga, thank you very much for being on the podcast i really appreciate you taking the time to chat with me it's been, it's been a lot of fun olga gabay 26 17 thank you very much to me for this opportunity i really enjoyed this chat closing 26 21 looking to start creating for samsung, download the latest tools to code your next app, or get software for designing apps without coding at all sell your apps to the world on the samsung galaxy store check out developer samsung com today and start your journey with samsung the pow! podcast is brought to you by the samsung developer program and produced by tony morelan
Develop Smart TV
apigetting device capabilities using systeminfo api the following keys are available to obtain the device capability information using systeminfo api device capability keys battery camera content api database download api graphics input iotcon push api led location microphone multi-point touch multimedia transcoder network opengl® es platform profile sensor screen shell dynamic box sip speech tv usb vision web service system keys build information model name platform name tizen id the following table lists the keys to check if a device has a battery key type description version http //tizen org/feature/battery boolean the platform returns true for this key, if the device has a battery if it is true, w3c battery status api, battery property in systeminfo api, and power api must be supported 2 3 the following table lists the camera feature keys key type description version http //tizen org/feature/camera boolean the platform returns true for this key, if the device provides any kind of a camera if it is true, w3c getusermedia and html media capture apis are supported 2 2 1 http //tizen org/feature/camera back boolean the platform returns true for this key and the http //tizen org/feature/camera key, if the device provides a back-facing camera 2 2 1 http //tizen org/feature/camera back flash boolean the platform returns true for this key and the http //tizen org/feature/camera back key, if the device provides a back-facing camera with a flash 2 2 1 http //tizen org/feature/camera front boolean the platform returns true for this key and the http //tizen org/feature/camera key, if the device provides a front-facing camera 2 2 1 http //tizen org/feature/camera front flash boolean the platform returns true for this key and the http //tizen org/feature/camera front key, if the device provides a front-facing camera with a flash 2 2 1 the following table lists the keys related to content api features key type description version http //tizen org/feature/content scanning others boolean the platform returns true for this key, if the device supports the media scanning feature for "other"-type files which are not included in the media content types such as "image", "video", "sound" or "music" 4 0 the following table lists the database feature keys key type description version http //tizen org/feature/database encryption boolean the platform returns true for this key, if the device supports database encryption 2 2 1 the following table lists the keys to check if download api is supported on a tizen device key type description version http //tizen org/feature/download boolean the platform returns true for this key, if the device supports download api 2 3 http //tizen org/feature/network telephony boolean the platform returns true for this key, if the device supports all apis which require telephony feature if it is true, "cellular" in downloadnetworktype is supported 2 2 1 http //tizen org/feature/network wifi boolean the platform returns true for this key, if the device supports all apis which require wi-fi if it is true, "wifi" in downloadnetworktype is supported 2 2 1 the following table lists the graphics feature keys key type description version http //tizen org/feature/graphics acceleration boolean the platform returns true for this key, if the device supports graphics hardware acceleration 2 2 1 the following table lists the input feature keys key type description version http //tizen org/feature/input keyboard boolean the platform returns true for this key, if the device provides a built-in keyboard supporting any keyboard layout 2 2 1 http //tizen org/feature/input keyboard layout domstring the platform returns the keyboard layout such as qwerty supported by the built-in keyboard for this key and returns true for the http //tizen org/feature/input keyboard key if the device does not provide a built-in keyboard, the platform returns an empty string for this key and returns false for the http //tizen org/feature/input keyboard key 2 2 1 http //tizen org/feature/input rotating_bezel boolean the platform returns true for this key, if the device provides a built-in rotating bezel 2 3 1 the following table lists the keys related to iotcon api features key type description version http //tizen org/feature/iot ocf boolean the platform returns true for this key, if the device supports the iot connectivity if it is true, iotcon api is supported 4 0 the following table lists the led feature key key type description version http //tizen org/feature/led boolean the platform returns true for this key, if the device supports led 2 3 the following table lists the location feature keys key type description version http //tizen org/feature/location boolean the platform returns true for this key, if the device supports location positioning 2 2 1 http //tizen org/feature/location batch boolean the platform returns true for this key and the http //tizen org/feature/location key, if the device supports gps batch feature 2 3 http //tizen org/feature/location gps boolean the platform returns true and the http //tizen org/feature/location, if the device supports the global positioning system gps 2 2 1 http //tizen org/feature/location wps boolean the platform returns true for this key and the http //tizen org/feature/location key, if the device supports the wi-fi-based positioning system wps 2 2 1 the following table lists the microphone feature keys key type description version http //tizen org/feature/microphone boolean the platform returns true for this key, if the device supports a microphone if it is true, w3c getusermedia and html media capture apis are supported 2 2 1 http //tizen org/feature/media audio_recording boolean the platform returns true for this key, if the device supports to record audio files on a device if it is true, cordova media api is supported 3 0 the following table lists the multi-point touch feature keys key type description version http //tizen org/feature/multi_point_touch pinch_zoom boolean the platform returns true for this key, if the device supports pinch zoom gestures 2 2 1 http //tizen org/feature/multi_point_touch point_count long the platform returns the maximum number of supported multi-touch points for this key the platform returns a value less than 2 for this key, if the device does not support multi-point touch 2 2 1 the following table lists the multimedia transcoder feature key key type description version http //tizen org/feature/multimedia transcoder boolean the platform returns true for this key, if the device supports multimedia transcoder 2 3 the following table lists the network feature keys key type description version http //tizen org/capability/network bluetooth always_on boolean the platform returns true for this key, if the device must always enable bluetooth it means that an application cannot change the bluetooth's state visibility, connectivity, device name 2 3 http //tizen org/feature/network bluetooth boolean the platform returns true for this key, if the device supports bluetooth 2 2 1 http //tizen org/feature/network bluetooth audio call boolean the platform returns true for this key, if the device supports bluetooth handsfree profile hfp 2 3 http //tizen org/feature/network bluetooth audio media boolean the platform returns true for this key, if the device supports bluetooth advanced audio distribute profile a2dp 2 3 http //tizen org/feature/network bluetooth health boolean the platform returns true for this key, if the device supports bluetooth health device profile hdp 2 3 http //tizen org/feature/network bluetooth hid boolean the platform returns true for this key, if the device supports bluetooth human input device hid 2 3 http //tizen org/feature/network bluetooth le boolean the platform returns true for this key, if the device supports bluetooth low energy related methods in bluetooth api 2 3 http //tizen org/feature/network bluetooth opp boolean the platform returns true for this key, if the device supports bluetooth object push profile opp 2 3 http //tizen org/feature/network ethernet boolean the platform returns true for this key, if the device supports ethernet if it is true, "all" in downloadnetworktype and systeminfoethernetnetwork is supported 2 4 http //tizen org/feature/network internet boolean the platform returns true for this key, if the device supports internet 2 3 1 http //tizen org/feature/network net_proxy boolean the platform returns true for this key, if the device supports network proxy for internet connection 3 0 http //tizen org/feature/network nfc boolean the platform returns true for this key, if the device supports near field communication nfc 2 2 1 http //tizen org/feature/network nfc card_emulation boolean the platform returns true for this key, if the device is recognized by the nfc card readers 2 3 http //tizen org/feature/network nfc card_emulation hce boolean the platform returns true for this key, if the device supports nfc host-based card emulation 2 3 1 http //tizen org/feature/network nfc p2p boolean the platform returns true for this key, if the device supports p2p apis which require near field communication nfc 2 3 1 http //tizen org/feature/network nfc reserved_push boolean the platform returns true for this key and the http //tizen org/feature/network nfc key, if the device supports the nfc reserved push feature 2 2 1 http //tizen org/feature/network nfc tag boolean the platform returns true for this key, if the device supports tag apis which require near field communication nfc 2 3 1 http //tizen org/feature/network push boolean the platform returns true for this key, if the device supports push api which requires the ip push service provided by the tizen reference implementation 2 2 1 http //tizen org/feature/network secure_element boolean the platform returns true for this key, if the device supports secure elements 2 2 1 http //tizen org/feature/network telephony boolean the platform returns true for this key, if the device supports the telephony related apis 2 2 1 http //tizen org/feature/network telephony mms boolean the platform returns true for this key and the http //tizen org/feature/network telephony key, if the device supports mms 2 2 1 http //tizen org/feature/network wifi boolean the platform returns true for this key, if the device supports all apis which require wi-fi 2 2 1 http //tizen org/feature/network wifi direct boolean the platform returns true for this key and the http //tizen org/feature/network wifi key, if the device supports wi-fi direct™ 2 2 1 the following table lists the opengl® es feature keys key type description version http //tizen org/feature/opengles boolean the platform returns true for this key, if the device supports any opengl® es version and any texture format 2 2 1 http //tizen org/feature/opengles texture_format domstring the supported texture formats for the opengl® es e g "3dc/atc/etc/ptc" the platform returns an empty string for this key if opengl® es or compressed texture formats are not supported 2 3 http //tizen org/feature/opengles texture_format 3dc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the 3dc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format atc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the atc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format etc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the etc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format ptc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the ptc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format pvrtc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the pvrtc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format utc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the utc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles version 1_1 boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the opengl® es version 1 1 2 2 1 http //tizen org/feature/opengles version 2_0 boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the opengl® es version 2 0 2 2 1 the following table lists the platform feature keys key type description version http //tizen org/feature/platform core api version domstring the version of the tizen core api in the [major] [minor] format for example, "1 0" represents a web api version where the major version is 1 and the minor version is 0 if a device doesn't provide tizen core api, it returns an empty string "" 2 3 http //tizen org/feature/platform core cpu arch domstring the platform returns the cpu architecture e g "armv7", "x86" of a device 2 3 http //tizen org/feature/platform core cpu arch armv6 boolean the platform returns true for this key, if the device runs on the armv6 cpu architecture 2 2 1 http //tizen org/feature/platform core cpu arch armv7 boolean the platform returns true for this key, if the device runs on the armv7 cpu architecture 2 2 1 http //tizen org/feature/platform core cpu arch x86 boolean the platform returns true for this key, if the device runs on the x86 cpu architecture 2 2 1 http //tizen org/feature/platform core cpu frequency long the platform returns the frequency at which a core cpu is running unit mhz 2 3 http //tizen org/feature/platform core fpu arch domstring the platform returns the fpu architecture e g "vfpv3", "ssse3" of a device if there is no fpu on a device, it returns an empty string "" 2 3 http //tizen org/feature/platform core fpu arch sse2 boolean the platform returns true for this key, if the device runs on the sse2 fpu architecture 2 2 1 http //tizen org/feature/platform core fpu arch sse3 boolean the platform returns true for this key, if the device runs on the sse3 fpu architecture 2 2 1 http //tizen org/feature/platform core fpu arch ssse3 boolean the platform returns true for this key, if the device runs on the ssse3 fpu architecture 2 2 1 http //tizen org/feature/platform core fpu arch vfpv2 boolean the platform returns true for this key, if the device runs on the vfpv2 fpu architecture 2 2 1 http //tizen org/feature/platform core fpu arch vfpv3 boolean the platform returns true for this key, if the device runs on the vfpv3 fpu architecture 2 2 1 http //tizen org/feature/platform native api version domstring the version of the native api in the [major] [minor] format for example, 1 0 represents a native api version where the major version is 1 and the minor version is 0 if a device doesn't provide tizen native api, it returns an empty string "" 2 2 1 http //tizen org/feature/platform native osp_compatible boolean the platform returns true for this key, if the device supports the bada compatibility mode 2 2 1 http //tizen org/feature/platform version domstring the version of the platform in the [major] [minor] [patch version] format for example, 1 0 0 represents a platform version where the major version is 1 and the minor and build versions are 0 2 2 1 http //tizen org/feature/platform web api version domstring the version of the web api in the [major] [minor] format for example, 1 0 represents a web api version where the major version is 1 and the minor version is 0 2 2 1 http //tizen org/feature/platform version name domstring the platform return the platform version name e g tizen 2 0 magnolia, tizen 2 1 nectarine 2 3 the following table lists the profile feature keys key type description version http //tizen org/feature/profile systeminfoprofile the platform returns a compliant device profile such as "mobile", "wearable" for this key 2 2 1 the following table lists the sensor feature keys key type description version http //tizen org/feature/sensor accelerometer boolean the platform returns true for this key, if the device supports the acceleration sensor 2 2 1 http //tizen org/feature/sensor accelerometer wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor accelerometer key, if the device supports the wake-up operation by the acceleration sensor 2 2 1 http //tizen org/feature/sensor activity_recognition boolean the platform returns true for this key, if the device supports activity recognition 2 3 http //tizen org/feature/sensor barometer boolean the platform returns true for this key, if the device supports the barometer pressure sensor 2 2 1 http //tizen org/feature/sensor barometer wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor barometer key, if the device supports the wake-up operation by the barometer sensor 2 2 1 http //tizen org/feature/sensor gesture_recognition boolean the platform returns true for this key, if the device supports the gesture recognition 2 3 http //tizen org/feature/sensor gravity boolean the platform returns true for this key, if the device supports gravity 2 3 http //tizen org/feature/sensor gyroscope boolean the platform returns true for this key, if the device supports gyroscope 2 2 1 http //tizen org/feature/sensor gyroscope_rotation_vector boolean the platform returns true for this key, if the device supports gyroscope rotation vector 3 0 http //tizen org/feature/sensor gyroscope wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor gyroscope key, if the device supports the wake-up operation by the gyro sensor 2 2 1 http //tizen org/feature/sensor heart_rate_monitor boolean the platform returns true for this key if the device supports hrm 2 3 http //tizen org/feature/sensor heart_rate_monitor led_green boolean the platform returns true for this key if the device supports green light spectrum 2 3 1 http //tizen org/feature/sensor heart_rate_monitor led_ir boolean the platform returns true for this key if the device supports infrared spectrum 2 3 1 http //tizen org/feature/sensor heart_rate_monitor led_red boolean the platform returns true for this key if the device supports red light spectrum 2 3 1 http //tizen org/feature/sensor humidity boolean the platform returns true for this key, if the device supports the humidity sensor 2 3 http //tizen org/feature/sensor linear_acceleration boolean the platform returns true for this key, if the device supports the linear acceleration sensor 2 3 http //tizen org/feature/sensor magnetometer boolean the platform returns true for this key, if the device supports the magnetic sensor 2 2 1 http //tizen org/feature/sensor magnetometer wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor magnetometer key, if the device supports the wake-up operation by the magnetic sensor 2 2 1 http //tizen org/feature/sensor pedometer boolean the platform returns true for this key, if the device supports pedometer 2 3 http //tizen org/feature/sensor photometer boolean the platform returns true for this key, if the device supports the photometer sensor 2 2 1 http //tizen org/feature/sensor photometer wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor photometer key, if the device supports the wake-up operation by the photo sensor 2 2 1 http //tizen org/feature/sensor proximity boolean the platform returns true for this key, if the device supports the proximity sensor 2 2 1 http //tizen org/feature/sensor proximity wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor proximity key, if the device supports the wake-up operation by the proximity sensor 2 2 1 http //tizen org/feature/sensor rotation_vector boolean the platform returns true for this key, if the device supports the rotation vector sensor 2 3 http //tizen org/feature/sensor sleep_monitor boolean the platform returns true for this key, if the device supports sleep_monitor 3 0 http //tizen org/feature/sensor temperature boolean the platform returns true for this key, if the device supports the temperature sensor 2 3 http //tizen org/feature/sensor tiltmeter boolean the platform returns true for this key, if the device supports the tilt sensor 2 2 1 http //tizen org/feature/sensor tiltmeter wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor tiltmeter key, if the device supports the wake-up operation by the tilt sensor 2 2 1 http //tizen org/feature/sensor ultraviolet boolean the platform returns true for this key if the device supports ultraviolet sensor 2 3 http //tizen org/feature/sensor wrist_up boolean the platform returns true for this key if the device supports wrist_up 2 3 the following table lists the screen feature keys key type description version http //tizen org/feature/screen boolean the platform returns true for this key, if the device has a display screen 2 3 http //tizen org/feature/screen auto_rotation boolean the platform returns true for this key, if the device supports screen auto-rotation 2 2 1 http //tizen org/feature/screen bpp long the platform returns the number of bits per pixel supported by the device for this key the value depends on the screen, and is typically 8, 16, 24, or 32 2 2 1 http //tizen org/feature/screen coordinate_system size large boolean the platform returns true for this key, if the device supports the large screen size for the coordinate system 2 2 1 http //tizen org/feature/screen coordinate_system size normal boolean the platform returns true for this key, if the device supports the normal screen size for the coordinate system 2 2 1 http //tizen org/feature/screen dpi long the platform returns the number of dots per inch supported by the device for this key 2 2 1 http //tizen org/feature/screen height long the platform returns the height of the screen in pixels supported by the device for this key 2 2 1 http //tizen org/feature/screen output hdmi boolean the platform returns true for this key, if the device supports hdmi output 2 2 1 http //tizen org/feature/screen output rca boolean the platform returns true for this key, if the device supports rca output 2 2 1 http //tizen org/feature/screen shape circle boolean the platform returns true for this key, if the device supports a circular shaped screen 2 3 1 http //tizen org/feature/screen shape rectangle boolean the platform returns true for this key, if the device supports a rectangular shaped screen 2 3 1 http //tizen org/feature/screen size all boolean the platform can return true if the device supports any of screen sizes and resolutions if the device has a display screen, it returns true 2 2 1 http //tizen org/feature/screen size large boolean the platform can return true if the device supports the large screen size 2 2 1 http //tizen org/feature/screen size normal boolean the platform can return true the device supports the normal screen size 2 2 1 http //tizen org/feature/screen size normal 240 400 boolean the platform returns true for this key, if the device supports the 240 x 400 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 320 320 boolean the platform returns true for this key, if the device supports the 320 x 320 resolution for the normal screen size the platform can return true for multiple resolution keys 2 3 http //tizen org/feature/screen size normal 320 480 boolean the platform returns true for this key, if the device supports the 320 x 480 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 360 360 boolean the platform returns true for this key, if the device supports the 360 x 360 resolution for the normal screen size the platform can return true for multiple resolution keys 2 3 2 http //tizen org/feature/screen size normal 360 480 boolean the platform returns true for this key, if the device supports the 360 x 480 resolution for the normal screen size the platform can return true for multiple resolution keys 2 3 http //tizen org/feature/screen size normal 480 800 boolean the platform returns true for this key, if the device supports the 480 x 800 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 540 960 boolean the platform returns true for this key, if the device supports the 540 x 960 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 600 1024 boolean the platform returns true for this key, if the device supports the 600 x 1024 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 720 1280 boolean the platform returns true for this key, if the device supports the 720 x 1280 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 1080 1920 boolean the platform returns true for this key, if the device supports the 1080 x 1920 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen width long the platform returns the width of the screen in pixels supported by the device for this key 2 2 1 the following table lists the shell dynamic box feature keys key type description version http //tizen org/feature/shell appwidget boolean the platform returns true for this key, if the device supports the widget since 2 3 1, this key indicates only native widget 2 2 1 the following table lists the sip feature keys key type description version http //tizen org/feature/sip voip boolean the platform returns true for this key, if the device supports the voice over internet protocol voip 2 2 1 the following table lists the speech feature keys key type description version http //tizen org/feature/speech recognition boolean the platform returns true for this key, if the device supports speech recognition stt 2 2 1 http //tizen org/feature/speech synthesis boolean the platform returns true for this key, if the device supports speech synthesis tts 2 2 1 http //tizen org/feature/speech control boolean the platform returns true for this key, if the device supports speech control 4 0 the following table lists the tv feature keys key type description version http //tizen org/feature/tv audio boolean the platform returns true for this key, if the device supports control of tv audio if it is true, tvaudiocontrol api is supported 2 3 http //tizen org/feature/tv display boolean the platform returns true for this key, if the device supports getting information about the effects of stereoscopy 3d mode if it is true, tv display control api is supported 2 3 http //tizen org/feature/tv inputdevice boolean the platform returns true for this key, if the device supports receiving key events generated when the user presses a key of an input device for example a tv remote control if it is true, tv input device api is supported 2 3 http //tizen org/feature/tv pip boolean the platform returns true for this key, if the device supports control of tv window e g main window, pip window if it is true, tv window api is supported 2 3 the following table lists the usb feature keys key type description version http //tizen org/feature/usb accessory boolean the platform returns true for this key, if the device supports the usb client or accessory mode 2 2 1 http //tizen org/feature/usb host boolean the platform returns true for this key, if the device supports the usb host mode 2 2 1 the following table lists the vision feature keys key type description version http //tizen org/feature/vision face_recognition boolean the platform returns true for this key, if the device supports face recognition 2 2 1 http //tizen org/feature/vision image_recognition boolean the platform returns true for this key, if the device supports image recognition 2 2 1 http //tizen org/feature/vision qrcode_generation boolean the platform returns true for this key, if the device supports qr code generation 2 2 1 http //tizen org/feature/vision qrcode_recognition boolean the platform returns true for this key, if the device supports qr code recognition 2 2 1 the following table lists the web service model feature keys key type description version http //tizen org/feature/web service boolean the platform returns true for this key, if the device supports the web service model 2 3 the following table lists the build information key key type description version http //tizen org/system/build date domstring the platform returns the build date the format yyyy mm dd 2 3 http //tizen org/system/build string domstring the platform returns the build string including build date and time 2 3 http //tizen org/system/build time domstring the platform returns the build time the format hh mm ss 2 3 http //tizen org/system/manufacturer domstring the platform returns the device manufacturer's name 2 3 http //tizen org/system/build release domstring the platform returns the build version information the build version information is made when the platform image is created 3 0 http //tizen org/system/build type domstring the platform returns the build type, such as "user" or "eng" the build type is made when the platform image is created 3 0 http //tizen org/system/build variant domstring the platform returns the variant release information the variant release information is made when the platform image is created 3 0 http //tizen org/system/build id domstring the platform returns the build id the build id is made when the platform image is created 3 0 the following table lists the model name key key type description version http //tizen org/system/model_name domstring the platform returns the model name 2 3 the following table lists the platform system keys key type description version http //tizen org/system/platform communication_processor domstring the platform returns the device communication processor name 2 3 http //tizen org/system/platform name domstring the platform returns the platform name it must be tizen 2 2 1 http //tizen org/system/platform processor domstring the platform returns the device processor name 2 3 the following table lists the tizen id system key key type description version http //tizen org/system/tizenid domstring the platform returns the tizen id it is a randomly generated value based on the model name 2 3
Develop Smart Hospitality Display
apigetting device capabilities using systeminfo api the following keys are available to obtain the device capability information using systeminfo api device capability keys battery camera content api database download api graphics input iotcon push api led location microphone multi-point touch multimedia transcoder network opengl® es platform profile sensor screen shell dynamic box sip speech tv usb vision web service system keys build information model name platform name tizen id the following table lists the keys to check if a device has a battery key type description version http //tizen org/feature/battery boolean the platform returns true for this key, if the device has a battery if it is true, w3c battery status api, battery property in systeminfo api, and power api must be supported 2 3 the following table lists the camera feature keys key type description version http //tizen org/feature/camera boolean the platform returns true for this key, if the device provides any kind of a camera if it is true, w3c getusermedia and html media capture apis are supported 2 2 1 http //tizen org/feature/camera back boolean the platform returns true for this key and the http //tizen org/feature/camera key, if the device provides a back-facing camera 2 2 1 http //tizen org/feature/camera back flash boolean the platform returns true for this key and the http //tizen org/feature/camera back key, if the device provides a back-facing camera with a flash 2 2 1 http //tizen org/feature/camera front boolean the platform returns true for this key and the http //tizen org/feature/camera key, if the device provides a front-facing camera 2 2 1 http //tizen org/feature/camera front flash boolean the platform returns true for this key and the http //tizen org/feature/camera front key, if the device provides a front-facing camera with a flash 2 2 1 the following table lists the keys related to content api features key type description version http //tizen org/feature/content scanning others boolean the platform returns true for this key, if the device supports the media scanning feature for "other"-type files which are not included in the media content types such as "image", "video", "sound" or "music" 4 0 the following table lists the database feature keys key type description version http //tizen org/feature/database encryption boolean the platform returns true for this key, if the device supports database encryption 2 2 1 the following table lists the keys to check if download api is supported on a tizen device key type description version http //tizen org/feature/download boolean the platform returns true for this key, if the device supports download api 2 3 http //tizen org/feature/network telephony boolean the platform returns true for this key, if the device supports all apis which require telephony feature if it is true, "cellular" in downloadnetworktype is supported 2 2 1 http //tizen org/feature/network wifi boolean the platform returns true for this key, if the device supports all apis which require wi-fi if it is true, "wifi" in downloadnetworktype is supported 2 2 1 the following table lists the graphics feature keys key type description version http //tizen org/feature/graphics acceleration boolean the platform returns true for this key, if the device supports graphics hardware acceleration 2 2 1 the following table lists the input feature keys key type description version http //tizen org/feature/input keyboard boolean the platform returns true for this key, if the device provides a built-in keyboard supporting any keyboard layout 2 2 1 http //tizen org/feature/input keyboard layout domstring the platform returns the keyboard layout such as qwerty supported by the built-in keyboard for this key and returns true for the http //tizen org/feature/input keyboard key if the device does not provide a built-in keyboard, the platform returns an empty string for this key and returns false for the http //tizen org/feature/input keyboard key 2 2 1 http //tizen org/feature/input rotating_bezel boolean the platform returns true for this key, if the device provides a built-in rotating bezel 2 3 1 the following table lists the keys related to iotcon api features key type description version http //tizen org/feature/iot ocf boolean the platform returns true for this key, if the device supports the iot connectivity if it is true, iotcon api is supported 4 0 the following table lists the led feature key key type description version http //tizen org/feature/led boolean the platform returns true for this key, if the device supports led 2 3 the following table lists the location feature keys key type description version http //tizen org/feature/location boolean the platform returns true for this key, if the device supports location positioning 2 2 1 http //tizen org/feature/location batch boolean the platform returns true for this key and the http //tizen org/feature/location key, if the device supports gps batch feature 2 3 http //tizen org/feature/location gps boolean the platform returns true and the http //tizen org/feature/location, if the device supports the global positioning system gps 2 2 1 http //tizen org/feature/location wps boolean the platform returns true for this key and the http //tizen org/feature/location key, if the device supports the wi-fi-based positioning system wps 2 2 1 the following table lists the microphone feature keys key type description version http //tizen org/feature/microphone boolean the platform returns true for this key, if the device supports a microphone if it is true, w3c getusermedia and html media capture apis are supported 2 2 1 http //tizen org/feature/media audio_recording boolean the platform returns true for this key, if the device supports to record audio files on a device if it is true, cordova media api is supported 3 0 the following table lists the multi-point touch feature keys key type description version http //tizen org/feature/multi_point_touch pinch_zoom boolean the platform returns true for this key, if the device supports pinch zoom gestures 2 2 1 http //tizen org/feature/multi_point_touch point_count long the platform returns the maximum number of supported multi-touch points for this key the platform returns a value less than 2 for this key, if the device does not support multi-point touch 2 2 1 the following table lists the multimedia transcoder feature key key type description version http //tizen org/feature/multimedia transcoder boolean the platform returns true for this key, if the device supports multimedia transcoder 2 3 the following table lists the network feature keys key type description version http //tizen org/capability/network bluetooth always_on boolean the platform returns true for this key, if the device must always enable bluetooth it means that an application cannot change the bluetooth's state visibility, connectivity, device name 2 3 http //tizen org/feature/network bluetooth boolean the platform returns true for this key, if the device supports bluetooth 2 2 1 http //tizen org/feature/network bluetooth audio call boolean the platform returns true for this key, if the device supports bluetooth handsfree profile hfp 2 3 http //tizen org/feature/network bluetooth audio media boolean the platform returns true for this key, if the device supports bluetooth advanced audio distribute profile a2dp 2 3 http //tizen org/feature/network bluetooth health boolean the platform returns true for this key, if the device supports bluetooth health device profile hdp 2 3 http //tizen org/feature/network bluetooth hid boolean the platform returns true for this key, if the device supports bluetooth human input device hid 2 3 http //tizen org/feature/network bluetooth le boolean the platform returns true for this key, if the device supports bluetooth low energy related methods in bluetooth api 2 3 http //tizen org/feature/network bluetooth opp boolean the platform returns true for this key, if the device supports bluetooth object push profile opp 2 3 http //tizen org/feature/network ethernet boolean the platform returns true for this key, if the device supports ethernet if it is true, "all" in downloadnetworktype and systeminfoethernetnetwork is supported 2 4 http //tizen org/feature/network internet boolean the platform returns true for this key, if the device supports internet 2 3 1 http //tizen org/feature/network net_proxy boolean the platform returns true for this key, if the device supports network proxy for internet connection 3 0 http //tizen org/feature/network nfc boolean the platform returns true for this key, if the device supports near field communication nfc 2 2 1 http //tizen org/feature/network nfc card_emulation boolean the platform returns true for this key, if the device is recognized by the nfc card readers 2 3 http //tizen org/feature/network nfc card_emulation hce boolean the platform returns true for this key, if the device supports nfc host-based card emulation 2 3 1 http //tizen org/feature/network nfc p2p boolean the platform returns true for this key, if the device supports p2p apis which require near field communication nfc 2 3 1 http //tizen org/feature/network nfc reserved_push boolean the platform returns true for this key and the http //tizen org/feature/network nfc key, if the device supports the nfc reserved push feature 2 2 1 http //tizen org/feature/network nfc tag boolean the platform returns true for this key, if the device supports tag apis which require near field communication nfc 2 3 1 http //tizen org/feature/network push boolean the platform returns true for this key, if the device supports push api which requires the ip push service provided by the tizen reference implementation 2 2 1 http //tizen org/feature/network secure_element boolean the platform returns true for this key, if the device supports secure elements 2 2 1 http //tizen org/feature/network telephony boolean the platform returns true for this key, if the device supports the telephony related apis 2 2 1 http //tizen org/feature/network telephony mms boolean the platform returns true for this key and the http //tizen org/feature/network telephony key, if the device supports mms 2 2 1 http //tizen org/feature/network wifi boolean the platform returns true for this key, if the device supports all apis which require wi-fi 2 2 1 http //tizen org/feature/network wifi direct boolean the platform returns true for this key and the http //tizen org/feature/network wifi key, if the device supports wi-fi direct™ 2 2 1 the following table lists the opengl® es feature keys key type description version http //tizen org/feature/opengles boolean the platform returns true for this key, if the device supports any opengl® es version and any texture format 2 2 1 http //tizen org/feature/opengles texture_format domstring the supported texture formats for the opengl® es e g "3dc/atc/etc/ptc" the platform returns an empty string for this key if opengl® es or compressed texture formats are not supported 2 3 http //tizen org/feature/opengles texture_format 3dc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the 3dc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format atc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the atc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format etc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the etc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format ptc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the ptc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format pvrtc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the pvrtc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format utc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the utc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles version 1_1 boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the opengl® es version 1 1 2 2 1 http //tizen org/feature/opengles version 2_0 boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the opengl® es version 2 0 2 2 1 the following table lists the platform feature keys key type description version http //tizen org/feature/platform core api version domstring the version of the tizen core api in the [major] [minor] format for example, "1 0" represents a web api version where the major version is 1 and the minor version is 0 if a device doesn't provide tizen core api, it returns an empty string "" 2 3 http //tizen org/feature/platform core cpu arch domstring the platform returns the cpu architecture e g "armv7", "x86" of a device 2 3 http //tizen org/feature/platform core cpu arch armv6 boolean the platform returns true for this key, if the device runs on the armv6 cpu architecture 2 2 1 http //tizen org/feature/platform core cpu arch armv7 boolean the platform returns true for this key, if the device runs on the armv7 cpu architecture 2 2 1 http //tizen org/feature/platform core cpu arch x86 boolean the platform returns true for this key, if the device runs on the x86 cpu architecture 2 2 1 http //tizen org/feature/platform core cpu frequency long the platform returns the frequency at which a core cpu is running unit mhz 2 3 http //tizen org/feature/platform core fpu arch domstring the platform returns the fpu architecture e g "vfpv3", "ssse3" of a device if there is no fpu on a device, it returns an empty string "" 2 3 http //tizen org/feature/platform core fpu arch sse2 boolean the platform returns true for this key, if the device runs on the sse2 fpu architecture 2 2 1 http //tizen org/feature/platform core fpu arch sse3 boolean the platform returns true for this key, if the device runs on the sse3 fpu architecture 2 2 1 http //tizen org/feature/platform core fpu arch ssse3 boolean the platform returns true for this key, if the device runs on the ssse3 fpu architecture 2 2 1 http //tizen org/feature/platform core fpu arch vfpv2 boolean the platform returns true for this key, if the device runs on the vfpv2 fpu architecture 2 2 1 http //tizen org/feature/platform core fpu arch vfpv3 boolean the platform returns true for this key, if the device runs on the vfpv3 fpu architecture 2 2 1 http //tizen org/feature/platform native api version domstring the version of the native api in the [major] [minor] format for example, 1 0 represents a native api version where the major version is 1 and the minor version is 0 if a device doesn't provide tizen native api, it returns an empty string "" 2 2 1 http //tizen org/feature/platform native osp_compatible boolean the platform returns true for this key, if the device supports the bada compatibility mode 2 2 1 http //tizen org/feature/platform version domstring the version of the platform in the [major] [minor] [patch version] format for example, 1 0 0 represents a platform version where the major version is 1 and the minor and build versions are 0 2 2 1 http //tizen org/feature/platform web api version domstring the version of the web api in the [major] [minor] format for example, 1 0 represents a web api version where the major version is 1 and the minor version is 0 2 2 1 http //tizen org/feature/platform version name domstring the platform return the platform version name e g tizen 2 0 magnolia, tizen 2 1 nectarine 2 3 the following table lists the profile feature keys key type description version http //tizen org/feature/profile systeminfoprofile the platform returns a compliant device profile such as "mobile", "wearable" for this key 2 2 1 the following table lists the sensor feature keys key type description version http //tizen org/feature/sensor accelerometer boolean the platform returns true for this key, if the device supports the acceleration sensor 2 2 1 http //tizen org/feature/sensor accelerometer wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor accelerometer key, if the device supports the wake-up operation by the acceleration sensor 2 2 1 http //tizen org/feature/sensor activity_recognition boolean the platform returns true for this key, if the device supports activity recognition 2 3 http //tizen org/feature/sensor barometer boolean the platform returns true for this key, if the device supports the barometer pressure sensor 2 2 1 http //tizen org/feature/sensor barometer wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor barometer key, if the device supports the wake-up operation by the barometer sensor 2 2 1 http //tizen org/feature/sensor gesture_recognition boolean the platform returns true for this key, if the device supports the gesture recognition 2 3 http //tizen org/feature/sensor gravity boolean the platform returns true for this key, if the device supports gravity 2 3 http //tizen org/feature/sensor gyroscope boolean the platform returns true for this key, if the device supports gyroscope 2 2 1 http //tizen org/feature/sensor gyroscope_rotation_vector boolean the platform returns true for this key, if the device supports gyroscope rotation vector 3 0 http //tizen org/feature/sensor gyroscope wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor gyroscope key, if the device supports the wake-up operation by the gyro sensor 2 2 1 http //tizen org/feature/sensor heart_rate_monitor boolean the platform returns true for this key if the device supports hrm 2 3 http //tizen org/feature/sensor heart_rate_monitor led_green boolean the platform returns true for this key if the device supports green light spectrum 2 3 1 http //tizen org/feature/sensor heart_rate_monitor led_ir boolean the platform returns true for this key if the device supports infrared spectrum 2 3 1 http //tizen org/feature/sensor heart_rate_monitor led_red boolean the platform returns true for this key if the device supports red light spectrum 2 3 1 http //tizen org/feature/sensor humidity boolean the platform returns true for this key, if the device supports the humidity sensor 2 3 http //tizen org/feature/sensor linear_acceleration boolean the platform returns true for this key, if the device supports the linear acceleration sensor 2 3 http //tizen org/feature/sensor magnetometer boolean the platform returns true for this key, if the device supports the magnetic sensor 2 2 1 http //tizen org/feature/sensor magnetometer wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor magnetometer key, if the device supports the wake-up operation by the magnetic sensor 2 2 1 http //tizen org/feature/sensor pedometer boolean the platform returns true for this key, if the device supports pedometer 2 3 http //tizen org/feature/sensor photometer boolean the platform returns true for this key, if the device supports the photometer sensor 2 2 1 http //tizen org/feature/sensor photometer wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor photometer key, if the device supports the wake-up operation by the photo sensor 2 2 1 http //tizen org/feature/sensor proximity boolean the platform returns true for this key, if the device supports the proximity sensor 2 2 1 http //tizen org/feature/sensor proximity wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor proximity key, if the device supports the wake-up operation by the proximity sensor 2 2 1 http //tizen org/feature/sensor rotation_vector boolean the platform returns true for this key, if the device supports the rotation vector sensor 2 3 http //tizen org/feature/sensor sleep_monitor boolean the platform returns true for this key, if the device supports sleep_monitor 3 0 http //tizen org/feature/sensor temperature boolean the platform returns true for this key, if the device supports the temperature sensor 2 3 http //tizen org/feature/sensor tiltmeter boolean the platform returns true for this key, if the device supports the tilt sensor 2 2 1 http //tizen org/feature/sensor tiltmeter wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor tiltmeter key, if the device supports the wake-up operation by the tilt sensor 2 2 1 http //tizen org/feature/sensor ultraviolet boolean the platform returns true for this key if the device supports ultraviolet sensor 2 3 http //tizen org/feature/sensor wrist_up boolean the platform returns true for this key if the device supports wrist_up 2 3 the following table lists the screen feature keys key type description version http //tizen org/feature/screen boolean the platform returns true for this key, if the device has a display screen 2 3 http //tizen org/feature/screen auto_rotation boolean the platform returns true for this key, if the device supports screen auto-rotation 2 2 1 http //tizen org/feature/screen bpp long the platform returns the number of bits per pixel supported by the device for this key the value depends on the screen, and is typically 8, 16, 24, or 32 2 2 1 http //tizen org/feature/screen coordinate_system size large boolean the platform returns true for this key, if the device supports the large screen size for the coordinate system 2 2 1 http //tizen org/feature/screen coordinate_system size normal boolean the platform returns true for this key, if the device supports the normal screen size for the coordinate system 2 2 1 http //tizen org/feature/screen dpi long the platform returns the number of dots per inch supported by the device for this key 2 2 1 http //tizen org/feature/screen height long the platform returns the height of the screen in pixels supported by the device for this key 2 2 1 http //tizen org/feature/screen output hdmi boolean the platform returns true for this key, if the device supports hdmi output 2 2 1 http //tizen org/feature/screen output rca boolean the platform returns true for this key, if the device supports rca output 2 2 1 http //tizen org/feature/screen shape circle boolean the platform returns true for this key, if the device supports a circular shaped screen 2 3 1 http //tizen org/feature/screen shape rectangle boolean the platform returns true for this key, if the device supports a rectangular shaped screen 2 3 1 http //tizen org/feature/screen size all boolean the platform can return true if the device supports any of screen sizes and resolutions if the device has a display screen, it returns true 2 2 1 http //tizen org/feature/screen size large boolean the platform can return true if the device supports the large screen size 2 2 1 http //tizen org/feature/screen size normal boolean the platform can return true the device supports the normal screen size 2 2 1 http //tizen org/feature/screen size normal 240 400 boolean the platform returns true for this key, if the device supports the 240 x 400 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 320 320 boolean the platform returns true for this key, if the device supports the 320 x 320 resolution for the normal screen size the platform can return true for multiple resolution keys 2 3 http //tizen org/feature/screen size normal 320 480 boolean the platform returns true for this key, if the device supports the 320 x 480 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 360 360 boolean the platform returns true for this key, if the device supports the 360 x 360 resolution for the normal screen size the platform can return true for multiple resolution keys 2 3 2 http //tizen org/feature/screen size normal 360 480 boolean the platform returns true for this key, if the device supports the 360 x 480 resolution for the normal screen size the platform can return true for multiple resolution keys 2 3 http //tizen org/feature/screen size normal 480 800 boolean the platform returns true for this key, if the device supports the 480 x 800 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 540 960 boolean the platform returns true for this key, if the device supports the 540 x 960 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 600 1024 boolean the platform returns true for this key, if the device supports the 600 x 1024 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 720 1280 boolean the platform returns true for this key, if the device supports the 720 x 1280 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 1080 1920 boolean the platform returns true for this key, if the device supports the 1080 x 1920 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen width long the platform returns the width of the screen in pixels supported by the device for this key 2 2 1 the following table lists the shell dynamic box feature keys key type description version http //tizen org/feature/shell appwidget boolean the platform returns true for this key, if the device supports the widget since 2 3 1, this key indicates only native widget 2 2 1 the following table lists the sip feature keys key type description version http //tizen org/feature/sip voip boolean the platform returns true for this key, if the device supports the voice over internet protocol voip 2 2 1 the following table lists the speech feature keys key type description version http //tizen org/feature/speech recognition boolean the platform returns true for this key, if the device supports speech recognition stt 2 2 1 http //tizen org/feature/speech synthesis boolean the platform returns true for this key, if the device supports speech synthesis tts 2 2 1 http //tizen org/feature/speech control boolean the platform returns true for this key, if the device supports speech control 4 0 the following table lists the tv feature keys key type description version http //tizen org/feature/tv audio boolean the platform returns true for this key, if the device supports control of tv audio if it is true, tvaudiocontrol api is supported 2 3 http //tizen org/feature/tv display boolean the platform returns true for this key, if the device supports getting information about the effects of stereoscopy 3d mode if it is true, tv display control api is supported 2 3 http //tizen org/feature/tv inputdevice boolean the platform returns true for this key, if the device supports receiving key events generated when the user presses a key of an input device for example a tv remote control if it is true, tv input device api is supported 2 3 http //tizen org/feature/tv pip boolean the platform returns true for this key, if the device supports control of tv window e g main window, pip window if it is true, tv window api is supported 2 3 the following table lists the usb feature keys key type description version http //tizen org/feature/usb accessory boolean the platform returns true for this key, if the device supports the usb client or accessory mode 2 2 1 http //tizen org/feature/usb host boolean the platform returns true for this key, if the device supports the usb host mode 2 2 1 the following table lists the vision feature keys key type description version http //tizen org/feature/vision face_recognition boolean the platform returns true for this key, if the device supports face recognition 2 2 1 http //tizen org/feature/vision image_recognition boolean the platform returns true for this key, if the device supports image recognition 2 2 1 http //tizen org/feature/vision qrcode_generation boolean the platform returns true for this key, if the device supports qr code generation 2 2 1 http //tizen org/feature/vision qrcode_recognition boolean the platform returns true for this key, if the device supports qr code recognition 2 2 1 the following table lists the web service model feature keys key type description version http //tizen org/feature/web service boolean the platform returns true for this key, if the device supports the web service model 2 3 the following table lists the build information key key type description version http //tizen org/system/build date domstring the platform returns the build date the format yyyy mm dd 2 3 http //tizen org/system/build string domstring the platform returns the build string including build date and time 2 3 http //tizen org/system/build time domstring the platform returns the build time the format hh mm ss 2 3 http //tizen org/system/manufacturer domstring the platform returns the device manufacturer's name 2 3 http //tizen org/system/build release domstring the platform returns the build version information the build version information is made when the platform image is created 3 0 http //tizen org/system/build type domstring the platform returns the build type, such as "user" or "eng" the build type is made when the platform image is created 3 0 http //tizen org/system/build variant domstring the platform returns the variant release information the variant release information is made when the platform image is created 3 0 http //tizen org/system/build id domstring the platform returns the build id the build id is made when the platform image is created 3 0 the following table lists the model name key key type description version http //tizen org/system/model_name domstring the platform returns the model name 2 3 the following table lists the platform system keys key type description version http //tizen org/system/platform communication_processor domstring the platform returns the device communication processor name 2 3 http //tizen org/system/platform name domstring the platform returns the platform name it must be tizen 2 2 1 http //tizen org/system/platform processor domstring the platform returns the device processor name 2 3 the following table lists the tizen id system key key type description version http //tizen org/system/tizenid domstring the platform returns the tizen id it is a randomly generated value based on the model name 2 3
Develop Smart Signage
apigetting device capabilities using systeminfo api the following keys are available to obtain the device capability information using systeminfo api device capability keys battery camera content api database download api graphics input iotcon push api led location microphone multi-point touch multimedia transcoder network opengl® es platform profile sensor screen shell dynamic box sip speech tv usb vision web service system keys build information model name platform name tizen id the following table lists the keys to check if a device has a battery key type description version http //tizen org/feature/battery boolean the platform returns true for this key, if the device has a battery if it is true, w3c battery status api, battery property in systeminfo api, and power api must be supported 2 3 the following table lists the camera feature keys key type description version http //tizen org/feature/camera boolean the platform returns true for this key, if the device provides any kind of a camera if it is true, w3c getusermedia and html media capture apis are supported 2 2 1 http //tizen org/feature/camera back boolean the platform returns true for this key and the http //tizen org/feature/camera key, if the device provides a back-facing camera 2 2 1 http //tizen org/feature/camera back flash boolean the platform returns true for this key and the http //tizen org/feature/camera back key, if the device provides a back-facing camera with a flash 2 2 1 http //tizen org/feature/camera front boolean the platform returns true for this key and the http //tizen org/feature/camera key, if the device provides a front-facing camera 2 2 1 http //tizen org/feature/camera front flash boolean the platform returns true for this key and the http //tizen org/feature/camera front key, if the device provides a front-facing camera with a flash 2 2 1 the following table lists the keys related to content api features key type description version http //tizen org/feature/content scanning others boolean the platform returns true for this key, if the device supports the media scanning feature for "other"-type files which are not included in the media content types such as "image", "video", "sound" or "music" 4 0 the following table lists the database feature keys key type description version http //tizen org/feature/database encryption boolean the platform returns true for this key, if the device supports database encryption 2 2 1 the following table lists the keys to check if download api is supported on a tizen device key type description version http //tizen org/feature/download boolean the platform returns true for this key, if the device supports download api 2 3 http //tizen org/feature/network telephony boolean the platform returns true for this key, if the device supports all apis which require telephony feature if it is true, "cellular" in downloadnetworktype is supported 2 2 1 http //tizen org/feature/network wifi boolean the platform returns true for this key, if the device supports all apis which require wi-fi if it is true, "wifi" in downloadnetworktype is supported 2 2 1 the following table lists the graphics feature keys key type description version http //tizen org/feature/graphics acceleration boolean the platform returns true for this key, if the device supports graphics hardware acceleration 2 2 1 the following table lists the input feature keys key type description version http //tizen org/feature/input keyboard boolean the platform returns true for this key, if the device provides a built-in keyboard supporting any keyboard layout 2 2 1 http //tizen org/feature/input keyboard layout domstring the platform returns the keyboard layout such as qwerty supported by the built-in keyboard for this key and returns true for the http //tizen org/feature/input keyboard key if the device does not provide a built-in keyboard, the platform returns an empty string for this key and returns false for the http //tizen org/feature/input keyboard key 2 2 1 http //tizen org/feature/input rotating_bezel boolean the platform returns true for this key, if the device provides a built-in rotating bezel 2 3 1 the following table lists the keys related to iotcon api features key type description version http //tizen org/feature/iot ocf boolean the platform returns true for this key, if the device supports the iot connectivity if it is true, iotcon api is supported 4 0 the following table lists the led feature key key type description version http //tizen org/feature/led boolean the platform returns true for this key, if the device supports led 2 3 the following table lists the location feature keys key type description version http //tizen org/feature/location boolean the platform returns true for this key, if the device supports location positioning 2 2 1 http //tizen org/feature/location batch boolean the platform returns true for this key and the http //tizen org/feature/location key, if the device supports gps batch feature 2 3 http //tizen org/feature/location gps boolean the platform returns true and the http //tizen org/feature/location, if the device supports the global positioning system gps 2 2 1 http //tizen org/feature/location wps boolean the platform returns true for this key and the http //tizen org/feature/location key, if the device supports the wi-fi-based positioning system wps 2 2 1 the following table lists the microphone feature keys key type description version http //tizen org/feature/microphone boolean the platform returns true for this key, if the device supports a microphone if it is true, w3c getusermedia and html media capture apis are supported 2 2 1 http //tizen org/feature/media audio_recording boolean the platform returns true for this key, if the device supports to record audio files on a device if it is true, cordova media api is supported 3 0 the following table lists the multi-point touch feature keys key type description version http //tizen org/feature/multi_point_touch pinch_zoom boolean the platform returns true for this key, if the device supports pinch zoom gestures 2 2 1 http //tizen org/feature/multi_point_touch point_count long the platform returns the maximum number of supported multi-touch points for this key the platform returns a value less than 2 for this key, if the device does not support multi-point touch 2 2 1 the following table lists the multimedia transcoder feature key key type description version http //tizen org/feature/multimedia transcoder boolean the platform returns true for this key, if the device supports multimedia transcoder 2 3 the following table lists the network feature keys key type description version http //tizen org/capability/network bluetooth always_on boolean the platform returns true for this key, if the device must always enable bluetooth it means that an application cannot change the bluetooth's state visibility, connectivity, device name 2 3 http //tizen org/feature/network bluetooth boolean the platform returns true for this key, if the device supports bluetooth 2 2 1 http //tizen org/feature/network bluetooth audio call boolean the platform returns true for this key, if the device supports bluetooth handsfree profile hfp 2 3 http //tizen org/feature/network bluetooth audio media boolean the platform returns true for this key, if the device supports bluetooth advanced audio distribute profile a2dp 2 3 http //tizen org/feature/network bluetooth health boolean the platform returns true for this key, if the device supports bluetooth health device profile hdp 2 3 http //tizen org/feature/network bluetooth hid boolean the platform returns true for this key, if the device supports bluetooth human input device hid 2 3 http //tizen org/feature/network bluetooth le boolean the platform returns true for this key, if the device supports bluetooth low energy related methods in bluetooth api 2 3 http //tizen org/feature/network bluetooth opp boolean the platform returns true for this key, if the device supports bluetooth object push profile opp 2 3 http //tizen org/feature/network ethernet boolean the platform returns true for this key, if the device supports ethernet if it is true, "all" in downloadnetworktype and systeminfoethernetnetwork is supported 2 4 http //tizen org/feature/network internet boolean the platform returns true for this key, if the device supports internet 2 3 1 http //tizen org/feature/network net_proxy boolean the platform returns true for this key, if the device supports network proxy for internet connection 3 0 http //tizen org/feature/network nfc boolean the platform returns true for this key, if the device supports near field communication nfc 2 2 1 http //tizen org/feature/network nfc card_emulation boolean the platform returns true for this key, if the device is recognized by the nfc card readers 2 3 http //tizen org/feature/network nfc card_emulation hce boolean the platform returns true for this key, if the device supports nfc host-based card emulation 2 3 1 http //tizen org/feature/network nfc p2p boolean the platform returns true for this key, if the device supports p2p apis which require near field communication nfc 2 3 1 http //tizen org/feature/network nfc reserved_push boolean the platform returns true for this key and the http //tizen org/feature/network nfc key, if the device supports the nfc reserved push feature 2 2 1 http //tizen org/feature/network nfc tag boolean the platform returns true for this key, if the device supports tag apis which require near field communication nfc 2 3 1 http //tizen org/feature/network push boolean the platform returns true for this key, if the device supports push api which requires the ip push service provided by the tizen reference implementation 2 2 1 http //tizen org/feature/network secure_element boolean the platform returns true for this key, if the device supports secure elements 2 2 1 http //tizen org/feature/network telephony boolean the platform returns true for this key, if the device supports the telephony related apis 2 2 1 http //tizen org/feature/network telephony mms boolean the platform returns true for this key and the http //tizen org/feature/network telephony key, if the device supports mms 2 2 1 http //tizen org/feature/network wifi boolean the platform returns true for this key, if the device supports all apis which require wi-fi 2 2 1 http //tizen org/feature/network wifi direct boolean the platform returns true for this key and the http //tizen org/feature/network wifi key, if the device supports wi-fi direct™ 2 2 1 the following table lists the opengl® es feature keys key type description version http //tizen org/feature/opengles boolean the platform returns true for this key, if the device supports any opengl® es version and any texture format 2 2 1 http //tizen org/feature/opengles texture_format domstring the supported texture formats for the opengl® es e g "3dc/atc/etc/ptc" the platform returns an empty string for this key if opengl® es or compressed texture formats are not supported 2 3 http //tizen org/feature/opengles texture_format 3dc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the 3dc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format atc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the atc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format etc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the etc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format ptc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the ptc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format pvrtc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the pvrtc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles texture_format utc boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the utc texture format for opengl® es 2 2 1 http //tizen org/feature/opengles version 1_1 boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the opengl® es version 1 1 2 2 1 http //tizen org/feature/opengles version 2_0 boolean the platform returns true for this key and the http //tizen org/feature/opengles key, if the device supports the opengl® es version 2 0 2 2 1 the following table lists the platform feature keys key type description version http //tizen org/feature/platform core api version domstring the version of the tizen core api in the [major] [minor] format for example, "1 0" represents a web api version where the major version is 1 and the minor version is 0 if a device doesn't provide tizen core api, it returns an empty string "" 2 3 http //tizen org/feature/platform core cpu arch domstring the platform returns the cpu architecture e g "armv7", "x86" of a device 2 3 http //tizen org/feature/platform core cpu arch armv6 boolean the platform returns true for this key, if the device runs on the armv6 cpu architecture 2 2 1 http //tizen org/feature/platform core cpu arch armv7 boolean the platform returns true for this key, if the device runs on the armv7 cpu architecture 2 2 1 http //tizen org/feature/platform core cpu arch x86 boolean the platform returns true for this key, if the device runs on the x86 cpu architecture 2 2 1 http //tizen org/feature/platform core cpu frequency long the platform returns the frequency at which a core cpu is running unit mhz 2 3 http //tizen org/feature/platform core fpu arch domstring the platform returns the fpu architecture e g "vfpv3", "ssse3" of a device if there is no fpu on a device, it returns an empty string "" 2 3 http //tizen org/feature/platform core fpu arch sse2 boolean the platform returns true for this key, if the device runs on the sse2 fpu architecture 2 2 1 http //tizen org/feature/platform core fpu arch sse3 boolean the platform returns true for this key, if the device runs on the sse3 fpu architecture 2 2 1 http //tizen org/feature/platform core fpu arch ssse3 boolean the platform returns true for this key, if the device runs on the ssse3 fpu architecture 2 2 1 http //tizen org/feature/platform core fpu arch vfpv2 boolean the platform returns true for this key, if the device runs on the vfpv2 fpu architecture 2 2 1 http //tizen org/feature/platform core fpu arch vfpv3 boolean the platform returns true for this key, if the device runs on the vfpv3 fpu architecture 2 2 1 http //tizen org/feature/platform native api version domstring the version of the native api in the [major] [minor] format for example, 1 0 represents a native api version where the major version is 1 and the minor version is 0 if a device doesn't provide tizen native api, it returns an empty string "" 2 2 1 http //tizen org/feature/platform native osp_compatible boolean the platform returns true for this key, if the device supports the bada compatibility mode 2 2 1 http //tizen org/feature/platform version domstring the version of the platform in the [major] [minor] [patch version] format for example, 1 0 0 represents a platform version where the major version is 1 and the minor and build versions are 0 2 2 1 http //tizen org/feature/platform web api version domstring the version of the web api in the [major] [minor] format for example, 1 0 represents a web api version where the major version is 1 and the minor version is 0 2 2 1 http //tizen org/feature/platform version name domstring the platform return the platform version name e g tizen 2 0 magnolia, tizen 2 1 nectarine 2 3 the following table lists the profile feature keys key type description version http //tizen org/feature/profile systeminfoprofile the platform returns a compliant device profile such as "mobile", "wearable" for this key 2 2 1 the following table lists the sensor feature keys key type description version http //tizen org/feature/sensor accelerometer boolean the platform returns true for this key, if the device supports the acceleration sensor 2 2 1 http //tizen org/feature/sensor accelerometer wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor accelerometer key, if the device supports the wake-up operation by the acceleration sensor 2 2 1 http //tizen org/feature/sensor activity_recognition boolean the platform returns true for this key, if the device supports activity recognition 2 3 http //tizen org/feature/sensor barometer boolean the platform returns true for this key, if the device supports the barometer pressure sensor 2 2 1 http //tizen org/feature/sensor barometer wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor barometer key, if the device supports the wake-up operation by the barometer sensor 2 2 1 http //tizen org/feature/sensor gesture_recognition boolean the platform returns true for this key, if the device supports the gesture recognition 2 3 http //tizen org/feature/sensor gravity boolean the platform returns true for this key, if the device supports gravity 2 3 http //tizen org/feature/sensor gyroscope boolean the platform returns true for this key, if the device supports gyroscope 2 2 1 http //tizen org/feature/sensor gyroscope_rotation_vector boolean the platform returns true for this key, if the device supports gyroscope rotation vector 3 0 http //tizen org/feature/sensor gyroscope wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor gyroscope key, if the device supports the wake-up operation by the gyro sensor 2 2 1 http //tizen org/feature/sensor heart_rate_monitor boolean the platform returns true for this key if the device supports hrm 2 3 http //tizen org/feature/sensor heart_rate_monitor led_green boolean the platform returns true for this key if the device supports green light spectrum 2 3 1 http //tizen org/feature/sensor heart_rate_monitor led_ir boolean the platform returns true for this key if the device supports infrared spectrum 2 3 1 http //tizen org/feature/sensor heart_rate_monitor led_red boolean the platform returns true for this key if the device supports red light spectrum 2 3 1 http //tizen org/feature/sensor humidity boolean the platform returns true for this key, if the device supports the humidity sensor 2 3 http //tizen org/feature/sensor linear_acceleration boolean the platform returns true for this key, if the device supports the linear acceleration sensor 2 3 http //tizen org/feature/sensor magnetometer boolean the platform returns true for this key, if the device supports the magnetic sensor 2 2 1 http //tizen org/feature/sensor magnetometer wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor magnetometer key, if the device supports the wake-up operation by the magnetic sensor 2 2 1 http //tizen org/feature/sensor pedometer boolean the platform returns true for this key, if the device supports pedometer 2 3 http //tizen org/feature/sensor photometer boolean the platform returns true for this key, if the device supports the photometer sensor 2 2 1 http //tizen org/feature/sensor photometer wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor photometer key, if the device supports the wake-up operation by the photo sensor 2 2 1 http //tizen org/feature/sensor proximity boolean the platform returns true for this key, if the device supports the proximity sensor 2 2 1 http //tizen org/feature/sensor proximity wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor proximity key, if the device supports the wake-up operation by the proximity sensor 2 2 1 http //tizen org/feature/sensor rotation_vector boolean the platform returns true for this key, if the device supports the rotation vector sensor 2 3 http //tizen org/feature/sensor sleep_monitor boolean the platform returns true for this key, if the device supports sleep_monitor 3 0 http //tizen org/feature/sensor temperature boolean the platform returns true for this key, if the device supports the temperature sensor 2 3 http //tizen org/feature/sensor tiltmeter boolean the platform returns true for this key, if the device supports the tilt sensor 2 2 1 http //tizen org/feature/sensor tiltmeter wakeup boolean the platform returns true for this key and the http //tizen org/feature/sensor tiltmeter key, if the device supports the wake-up operation by the tilt sensor 2 2 1 http //tizen org/feature/sensor ultraviolet boolean the platform returns true for this key if the device supports ultraviolet sensor 2 3 http //tizen org/feature/sensor wrist_up boolean the platform returns true for this key if the device supports wrist_up 2 3 the following table lists the screen feature keys key type description version http //tizen org/feature/screen boolean the platform returns true for this key, if the device has a display screen 2 3 http //tizen org/feature/screen auto_rotation boolean the platform returns true for this key, if the device supports screen auto-rotation 2 2 1 http //tizen org/feature/screen bpp long the platform returns the number of bits per pixel supported by the device for this key the value depends on the screen, and is typically 8, 16, 24, or 32 2 2 1 http //tizen org/feature/screen coordinate_system size large boolean the platform returns true for this key, if the device supports the large screen size for the coordinate system 2 2 1 http //tizen org/feature/screen coordinate_system size normal boolean the platform returns true for this key, if the device supports the normal screen size for the coordinate system 2 2 1 http //tizen org/feature/screen dpi long the platform returns the number of dots per inch supported by the device for this key 2 2 1 http //tizen org/feature/screen height long the platform returns the height of the screen in pixels supported by the device for this key 2 2 1 http //tizen org/feature/screen output hdmi boolean the platform returns true for this key, if the device supports hdmi output 2 2 1 http //tizen org/feature/screen output rca boolean the platform returns true for this key, if the device supports rca output 2 2 1 http //tizen org/feature/screen shape circle boolean the platform returns true for this key, if the device supports a circular shaped screen 2 3 1 http //tizen org/feature/screen shape rectangle boolean the platform returns true for this key, if the device supports a rectangular shaped screen 2 3 1 http //tizen org/feature/screen size all boolean the platform can return true if the device supports any of screen sizes and resolutions if the device has a display screen, it returns true 2 2 1 http //tizen org/feature/screen size large boolean the platform can return true if the device supports the large screen size 2 2 1 http //tizen org/feature/screen size normal boolean the platform can return true the device supports the normal screen size 2 2 1 http //tizen org/feature/screen size normal 240 400 boolean the platform returns true for this key, if the device supports the 240 x 400 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 320 320 boolean the platform returns true for this key, if the device supports the 320 x 320 resolution for the normal screen size the platform can return true for multiple resolution keys 2 3 http //tizen org/feature/screen size normal 320 480 boolean the platform returns true for this key, if the device supports the 320 x 480 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 360 360 boolean the platform returns true for this key, if the device supports the 360 x 360 resolution for the normal screen size the platform can return true for multiple resolution keys 2 3 2 http //tizen org/feature/screen size normal 360 480 boolean the platform returns true for this key, if the device supports the 360 x 480 resolution for the normal screen size the platform can return true for multiple resolution keys 2 3 http //tizen org/feature/screen size normal 480 800 boolean the platform returns true for this key, if the device supports the 480 x 800 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 540 960 boolean the platform returns true for this key, if the device supports the 540 x 960 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 600 1024 boolean the platform returns true for this key, if the device supports the 600 x 1024 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 720 1280 boolean the platform returns true for this key, if the device supports the 720 x 1280 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen size normal 1080 1920 boolean the platform returns true for this key, if the device supports the 1080 x 1920 resolution for the normal screen size the platform can return true for multiple resolution keys 2 2 1 http //tizen org/feature/screen width long the platform returns the width of the screen in pixels supported by the device for this key 2 2 1 the following table lists the shell dynamic box feature keys key type description version http //tizen org/feature/shell appwidget boolean the platform returns true for this key, if the device supports the widget since 2 3 1, this key indicates only native widget 2 2 1 the following table lists the sip feature keys key type description version http //tizen org/feature/sip voip boolean the platform returns true for this key, if the device supports the voice over internet protocol voip 2 2 1 the following table lists the speech feature keys key type description version http //tizen org/feature/speech recognition boolean the platform returns true for this key, if the device supports speech recognition stt 2 2 1 http //tizen org/feature/speech synthesis boolean the platform returns true for this key, if the device supports speech synthesis tts 2 2 1 http //tizen org/feature/speech control boolean the platform returns true for this key, if the device supports speech control 4 0 the following table lists the tv feature keys key type description version http //tizen org/feature/tv audio boolean the platform returns true for this key, if the device supports control of tv audio if it is true, tvaudiocontrol api is supported 2 3 http //tizen org/feature/tv display boolean the platform returns true for this key, if the device supports getting information about the effects of stereoscopy 3d mode if it is true, tv display control api is supported 2 3 http //tizen org/feature/tv inputdevice boolean the platform returns true for this key, if the device supports receiving key events generated when the user presses a key of an input device for example a tv remote control if it is true, tv input device api is supported 2 3 http //tizen org/feature/tv pip boolean the platform returns true for this key, if the device supports control of tv window e g main window, pip window if it is true, tv window api is supported 2 3 the following table lists the usb feature keys key type description version http //tizen org/feature/usb accessory boolean the platform returns true for this key, if the device supports the usb client or accessory mode 2 2 1 http //tizen org/feature/usb host boolean the platform returns true for this key, if the device supports the usb host mode 2 2 1 the following table lists the vision feature keys key type description version http //tizen org/feature/vision face_recognition boolean the platform returns true for this key, if the device supports face recognition 2 2 1 http //tizen org/feature/vision image_recognition boolean the platform returns true for this key, if the device supports image recognition 2 2 1 http //tizen org/feature/vision qrcode_generation boolean the platform returns true for this key, if the device supports qr code generation 2 2 1 http //tizen org/feature/vision qrcode_recognition boolean the platform returns true for this key, if the device supports qr code recognition 2 2 1 the following table lists the web service model feature keys key type description version http //tizen org/feature/web service boolean the platform returns true for this key, if the device supports the web service model 2 3 the following table lists the build information key key type description version http //tizen org/system/build date domstring the platform returns the build date the format yyyy mm dd 2 3 http //tizen org/system/build string domstring the platform returns the build string including build date and time 2 3 http //tizen org/system/build time domstring the platform returns the build time the format hh mm ss 2 3 http //tizen org/system/manufacturer domstring the platform returns the device manufacturer's name 2 3 http //tizen org/system/build release domstring the platform returns the build version information the build version information is made when the platform image is created 3 0 http //tizen org/system/build type domstring the platform returns the build type, such as "user" or "eng" the build type is made when the platform image is created 3 0 http //tizen org/system/build variant domstring the platform returns the variant release information the variant release information is made when the platform image is created 3 0 http //tizen org/system/build id domstring the platform returns the build id the build id is made when the platform image is created 3 0 the following table lists the model name key key type description version http //tizen org/system/model_name domstring the platform returns the model name 2 3 the following table lists the platform system keys key type description version http //tizen org/system/platform communication_processor domstring the platform returns the device communication processor name 2 3 http //tizen org/system/platform name domstring the platform returns the platform name it must be tizen 2 2 1 http //tizen org/system/platform processor domstring the platform returns the device processor name 2 3 the following table lists the tizen id system key key type description version http //tizen org/system/tizenid domstring the platform returns the tizen id it is a randomly generated value based on the model name 2 3
Learn Developers Podcast
docreservation when it comes to actually trying it out and that i think that's really powerful i think the technology used to build that particular demo you were talking about was google's model viewer project and model viewer is fantastic for stuff like store pages and product views you add the script to your page, and then you use the model view or tag to display a 3d model on the page which is already ready to go for augmented reality so if you couldn't get it 3d model of your product in the gltf model format, then it's ready to go and that's really powerful tony morelan 35 06 what i really enjoyed was the fact that there was nothing to download, i clicked a few buttons, and there was, so i can definitely see the benefit where webex are, there isn't that hurdle that somebody has to go over, which is the whole download installation, just to experience it, what would be the best way for developers to get started with web xr? ada rose cannon 35 26 well, if you depend how quickly you want to get started so if you want to get started, and you just you already have the 3d model, and you want to just be done straight away, model viewer is a great place to start it lets you just with a single html tag and a script tag, you can have a 3d model, augmented reality ready in your browser and in your website so that's really great if you want something that's like still html based, and a great way to start if you're more of a beginner, and a frame is a fantastic place to start i'll be honest, i've been doing graphics development for years and i also still use a frame for almost all my products, just because it's so quick to get started but also lets you dive in deep because a frame is based on the library three j s, which is a javascript 3d library for working on web gl, which has been around for a long time is extremely powerful and so a frame kind of gives you the best of both worlds but if you really want to get stuck in with the javascript and really get in with the nitty gritty, working directly with three js, or with babylon js is a great way to go but if you want more of an of a fully like integrated development environment for this kind of thing, so if you prefer the kind of all in one it solution, then there's actually quite a few solutions here so there's amazon sumerian, there's play canvas, which is a fantastic engine and there's a really new one that seems really powerful wonderland engine and of course, as the old classic unity, which has a unity export for what xr tony morelan 37 07 excellent sounds like there's a lot of great tools for developers to get started with, with web xr kevin, let me ask you, how is samsung internet involved with web xr? kevin picchi 37 18 well, we shipped web xi by default inside of browser and we always make sure to ship the latest modules out so the developers can benefit all the good from the tony morelan 37 32 api and what about samsung phones? how well do they work with webxr? kevin picchi 37 37 all of them are compatible? as long as you have the samsung internet browser installed on your phone? you can experience webex are tony morelan 37 45 excellent in ad, i know that you're working also on web standards can you tell me a little bit about web standards, maybe some of the challenges with that? ada rose cannon 37 54 yeah, so as i mentioned earlier, i'm co-chair of the immersive web groups these are the groups that are working on the standards that get built into web browsers that become the api's developers work with to build these experiences and working on the web standards can be really challenging, because people have high expectations for the privacy you'd get from the web like you don't go to a website and expect them to immediately start spying on you through your camera, or doing anything really super dodgy the web browser is there to protect you and because we're adding new api's to the browser, we can't do anything that's going to breach this expectation of privacy and security and because it's the web, it's also got to work for as many people as possible so accessibility is also an incredibly important task so these are the kinds of constraints you've got to work in but on top of this, as graphics developers, we really want to get people working with the very latest features you can find in immersive hardware and we want people to build the kinds of experiences that rival what you can find on native and so balancing these privacy and security expectations against letting people have the most access to the hardware is a real challenge, because a lot of the hardware to do with immersive hardware, such as augmented reality is to deal with revealing more information about the environment and letting the developers work with it so for example, for something like working out where the user can place 3d models in the environment, the underlying engine actually can fully scan your environment and work out what the exact shape of stuff is and its color but this is a lot of information, which is too much that a lot of experiences don't actually need and so it would very easily let someone write an abusive application without giving too much additional functionality so actually the early versions of real-world sensing in web xr just let you query a single point from a single ray at a time so this lets you do stuff like placing a single object on the floor on the walls but we're not exactly scanner through someone's room and this is the kind of balances we have to make and because we have had developers come back to us and say they do need like higher precision, more wide scope, scan, like room scanning this is the kind of thing where we can build an additional api to, to let developers have this but at the same time, we can warn the users that what the developer is trying to do might potentially be more dangerous just like when a website is trying to turn your camera or microphone on, it will warn you yes, in the same way, if the website is trying to get a 3d scan of your entire apartment, we want to warn you about that, too and so this is the kind of balances we have to make tony morelan 41 04 so i know that is one of the big benefits around samsung internet is all of the privacy that you get when you use samsung internet nice to see how that's carrying over to web xr how stable would you say vr is on web xr? ada rose cannon 41 22 so vr itself is very stable, vr was one of the first parts we completed in in web xr, there's actually been vr in the web for like a long time, there was an old api called web vr, that was deprecated last year, but since then, web xr, we pushed very hard to be able to totally replace web vr with web xr with the same capabilities so what vr is pretty stable, i doubt there'll be any more changes to it at all so if you write something, targeting vr, yeah, lots will probably stay the same ar is a little newer and there are newer api's to help with augmented reality so some of the more hit testing, depth sensing stuff, some of this is like a little newer, there may still be some privacy issues that need to be resolved, which may have some interface changes but generally, these are also getting pretty stable a lot of the stuff that might be arriving in the next couple of months, or have arrived in the last month or so might have a few changes so it's important that developers do continue testing that stuff and do keep an eye out for when the api's do change because occasionally, we will get feedback that some that we've developed has a major security flaw we've missed and we can't just leave that out in the wild, we do have to change the api to fix that issue tony morelan 42 50 so are there any new features that you can share related to web standards ada rose cannon 42 55 so there's new features being developed all the time and the really nice thing about web standards is that the develop totally in the open so if you want to see all the latest work that's going on, you can check out the immersive web github, where you can see all of the issues that are being worked on in real time on web xr and all the related modules there’re a few modules i'm really excited about one, which is still super early days would be some kind of dom layer, api that would let us put dom content into a web xr scene so like html elements, and css, this is like kind of a tricky thing to do and it's something we've wanted for a long time and i'm hoping it won't be too far in the future when we eventually get it so what tony morelan 43 42 it is, is, since i am new to web xr, myself, what is dom content? ada rose cannon 43 47 so dom content is like html and css content so like, the normal stuff you'd see on a website, so like, forms, images, buttons, you know, that kind of thing? links, okay, so is this where if i am in either a vr and ar environment, this is where you can actually have like buttons that are clickable within that space? yeah, exactly so in addition to making your 3d environment where the user can grab stuff and pull stuff, and have 3d models, you can also have part of a web page in the environment and that may sound quite boring, because it's just going to be like a 2d rectangle with content in it this lets you use the heck demand css api's that are already available in browsers to build 2d interfaces in vr and ar as well so for example, if you had html form reimplementing, that whole thing out of rectangles and shape in 3d modeling application is kind of a pain, sure, but just being able to write some html and take advantage of all the really powerful 2d layout capabilities of the web is just a fantastic feature and will let developers make the most out of both 3d and 2d tony morelan 45 03 nice, nice yeah so what are some other technologies that go well with web xr? ada rose cannon 45 08 so the first one that comes to mind is like web rtc so this is what lets you do video sharing and audio sharing over the web tony morelan 45 17 in web rtc stands for real time communication, correct? it does, yes ada rose cannon 45 21 so this lets you, for example, if a means kind of some kind of social vr situation, i could do some kind of cool between me and another person so i can chat with them in an efficient manner that's peer to peer without needing to go up to a central service okay and another thing that's really useful for social vr stuff is websockets so websockets lets you do incredibly high bandwidth, very, very fast data connections between your client and the server so you could have many people in a single room, or with having all their positions and rotations shared over websockets so you can see people moving around and walking around in real time and so using their free web rtc is like the kind of the two things you need to get a really good social web experience tony morelan 46 15 so what about the technology, web audio? how was that working with web xr? ada rose cannon 46 20 so web audio is a really interesting api so web xr doesn't actually bother dealing with any audio stuff out of the box there's not like specific information you need for working with audio but the really powerful thing about web audio is that it has stuff like a 3d panner node with hrtf built in so you can already do 3d audio in the web long before web xr came along, which is incredibly cool so you can have correct 3d audio, using the web audio api using the web and it's something that's like a little tricky to set up there's a really great library by google called the resonance project and it lets you like define the surfaces around you so you can say the floor is hard there's no ceiling is where the walls are, and will correctly work out the echoes and the reverb and so you could have multiple sound sources, that will sound really good and you'll be able to know where they are instinctually? because they're done in 3d wow and this is really powerful tony morelan 47 22 yeah, cuz i could see where if you're like moving throughout that environment, your audio is going to be changing the sound reflection from within the room to be able to experience those changes yeah, that seems really powerful ada rose cannon 47 35 yeah, so you can take the information from web xr, for example, the position of the user's head, and then you feed that into a library like resonance and that will automatically handle the correct sound from the user's perspective, which is pretty amazing tony morelan 47 53 yeah so what about 5g? how is webex r and 5g working together? ada rose cannon 48 00 so 5g is totally amazing and this is definitely kevin's cup of tea so he should answer this one kevin picchi 48 06 so 5g would essentially improve your experience using webex so for example, you could have way bigger models downloaded on your phone with a higher quality, and it would simply load faster you could also imagine having multiplayer experiences and having almost zero lag or latency tony morelan 48 29 now, i know that you're working on 5g tours, what exactly is 5g tours kevin picchi 48 34 so 5g tour is a european project in which samsung participates and we test the 5g performances in different environments, in which the first one is touristic environment where we try to enhance the experience of tourists while they're visiting a city there is another one which is the mobility one, we try to enhance the way people move in the city and we also try to improve and create new experiences in a way that we make the city safer so let's say there is an evacuation, we can provide guides and we basically use 5g in all of those verticals to improve them tony morelan 49 19 so to talk a little bit more about making cities more secure or safer what exactly do you mean by that? kevin picchi 49 24 so we have a use case that we're working on internally to take all of it is making evacuation easier and faster by leveraging 5g, for example, have some sort of augmented reality application lunch instantly on the phone after people in the airport and the application would basically guide the people out of the airports in a safe way so let's say there would be a fire and you would be guided around the fire and in the right direction nice tony morelan 49 55 so can you tell me how is samsung internet involved with the with 5g tours? kevin picchi 49 59 well, it's so we're working on basically three sub projects in the 5g tour, where we take advantage of web technologies so what would those technologies be? we're using web xi web rtc, web sockets, and web each id those are the web api that ada just talked about we're trying to fuse them with 5g to improve those verticals tony morelan 50 25 so tell me a little bit more what is web rtc kevin picchi 50 28 one of the use cases we're working on is making museum experience experienceable by multiple people so the goal of it is having two or three persons in a room in a museum room with a piece of art, and being able to have them both in the room and been like letting them experience the artwork, take a look at the artwork, maybe move things around the room and all that taking advantage of 5g, which reduces latency and people tony morelan 51 01 feel better nice and this is in a vr environment is what you're referring to correct? kevin picchi 51 05 yes tony morelan 51 06 so what about web h id, which i think stands for human interface device? is that correct? kevin picchi 51 12 yes that's kind of like the gamepad api in a way that this api lets us send probe packets to the devices so to put it in a simple way, let's say you'd have a remote controller that is not compatible with the gamepad api, you could use this api to basically send bro comments to a controller and you could have some kind of communication going and we're using that api with the remote controller that we're using in another use case, in which were basically communicating with remote and getting sensors data and we're using them as a controller basically tony morelan 51 59 nice, nice to see the versatility of it is there any news coming out that you can share that's related to webex r and samsung internet? ada rose cannon 52 08 web xr is evolving really quickly the best way to keep up to date with new news and events and all the cool stuff that's happening in web xr is to subscribe to the immersive web weekly newsletter it's a newsletter that comes out on tuesdays and is a really great way to stay up to date with everything that's happening in the immersive web world tony morelan 52 26 nicely and we'll include a link to that newsletter in the in the show notes what advice do you have for developers looking to start building for samsung internet and in webex are? ada rose cannon 52 39 probably my best advice is to find an environment you're happy working with i really like a frame, there's quite a few out there, i have a few getting started guides on a website i maintain called immersive web dot dev so it's a great place to look at the different ways you can try out building web xr there's also some really useful tools out there, such as an emulator that lets you emulate immersive headsets in the web browser so you can test your site without needing to actually put on a headset, which is a really great way just to like experiment with stuff as you're building it and is a tool that i use an awful lot right so that's great to hear tony morelan 53 18 so are there other ways for developers to follow you and learn more about by what you have to offer? kevin picchi 53 23 yes, surely we're mostly active on twitter at samsung internet and you can also find our blog and our samsung internet page on the developer samsung com slash internet website you can also follow us here and i on twitter my ad is kevin peaky p icc h ii ada rose cannon 53 46 and mine is at ada rose cannon tony morelan 53 49 well, even kevin, it was great to have you on the podcast just wanted to say thanks for giving us a little insight into samsung internet and web xr ada rose cannon 53 57 thank you so much for having us it's been really good kevin picchi 53 59 yeah thanks for having us sunny dan appelquist 54 03 yeah, so good to hear about what we're doing with web xr and the immersive web i it's a technology that i think is really game changing, especially in the way that it democratizes xu, democratizes, ar and vr and really brings the value of that technology to more people across different types of handsets different types of devices it's really, it's so important we've talked a lot about different aspects of samsung internet, what would be the best way for developers to even learn more? well, you can first of all, visit us on our homepage, which is developer samsung com/internet or you can just click on samsung internet once you go to developer samsung com there you can read about our latest releases, you can read about the team you can have links to all our social media we are samsung internet on twitter, our dms are open there and now account is managed by our team directly so if you're dm’ing, samsung internet, the entire team here will read it and we will try to get back to you but also, if you have bugs or if you have problems, you can use that as a great channel to reach us or you can just add mention us on twitter, and we'll be happy to have a conversation with you there we're also on linkedin, if you search for us on linkedin, samsung internet, you'll find our linkedin page and we're happy to interact there as well we're on medium if you search for samsung internet, again, that's linked from our page at developer samsung com/internet we blog on medium and we also reflect that blog on developer samsung com so that you can see us everywhere you go hey, dan, it was great to have you on the podcast just wanted to say thanks to you and your team, for all the great and exciting things that are coming with samsung internet thanks for the opportunity and thank you for all the work that you've put in closing 55 59 looking to start creating for samsung download the latest tools to code your next app, or get software for designing apps without coding at all sell your apps to the world on the samsung galaxy store check out developer samsung com today and start your journey with samsung the pow! podcast is brought to you by the samsung developer program and produced by tony morelan
Develop Samsung Pay
doc3 1 android sdk 3 1 1 introduction the samsung pay sdk allows android-based partner apps—such as merchant apps and issuer banking apps—to securely integrate features of integration wallet, enabling in-app payments, push provisioning, and more the following major operations are supported in-app payment - gives customers the option of paying for products and services with samsung wallet push provisioning - allows customers add a bank card to samsung wallet from the issuer app by providing the required card details to integrate your partner application with the samsung pay sdk, the following components are included your sdk download samsungpay jar - contains classes and interfaces of the samsung pay sdk which need to be integrated to partner apps javadoc - provides descriptions of the apis included in the samsung pay sdk, along with sample code showing how to use them sample merchant app and sample issuer app showing how samsung pay apis can be coded in a finished android project all major operations of samsung pay sdk are implemented for demonstration purposes 3 1 2 samsung pay sdk architecture the following diagram shows a high-level architecture revealing the general interactions between the samsung pay sdk and a partner app viewed at this level, the partner apps leverage the samsung pay sdk to perform the operations shown ― push provisioning and opening favorite cards for issuers; online payments for merchants ― with samsung pay the key components involved are partner app - merchant- or issuer-developed app for making online/offline payments and provisioning payment cards through samsung wallet samsung pay sdk - sdk integrated into the partner app for direct communication with samsung wallet samsung wallet app - wallet app that the samsung pay sdk communicates with financial network - comprises the payment gateways, acquirers, card associations, and issuers that participate in transaction processing under agreement with the merchant the main classes comprising the samsung pay sdk include samsungpay – used by the partner app to get the samsung pay sdk information and the status of samsung wallet app on the device paymentmanager – provides payment/transaction functionality cardmanager – manages card list get, add, update functionality watchmanager – manages all functions related to samsung pay watch cardinfolistener – interface for requestcardinfo result from samsung wallet customsheettransactioninfolistener – interface for transaction success/failure callbacks from samsung wallet 3 1 3 uses cases in-app payment the most common in-app online payment use case take the following form merchant app presents user with the option of making payment with samsung wallet upon the user selecting the samsung pay option, the merchant app calls the apis included in the samsung pay sdk to initiate a transaction with samsung wallet app samsung wallet app responds with the tokenized payment information necessary to complete the transaction merchant app forwards this payment information to the designated payment gateway pg , either directly through the merchant's web server, or indirectly via the samsung-pg interface server for normal transaction processing app-to-app push provisioning the push provisioning use case ― adding payment cards to samsung wallet from the card issuer’s app ― typically takes this form the user logs into the issuer app the issuer app checks if samsung wallet is activated on the device and ready to use if it is in the ready status, the issuer app displays an add button for cards not currently registered/enrolled with the samsung wallet app if the add card option is selected, the issuer app calls an api to push the proper payload data to samsung wallet while the card is being provisioned, samsung wallet stays in background 3 1 4 setting up sdk development environment the importance of maintaining a good development environment cannot be overstated for integrating the samsung pay sdk with your partner app, the following prerequisites and recommendations help ensure a successful sdk implementation system requirements the samsung pay sdk is designed exclusively for samsung mobile devices supporting samsung pay and running android lollipop 5 1 android api level 22 or later versions of the android os the sdk’s in-app payments functionality requires android 6 0 m android api level 23 or later versions of the android os note as of sdk version 1 5, if the device runs android lollipop 5 1 android api level 22 or an earlier version, the getsamsungpaystatus api method returns a spay_not supported status code merchant apps still using samsung pay sdk 1 4 or earlier not recommended must check the android version running their app use the following snippet to determine the os version running on a device and whether or not to display the samsung pay button in your partner app import android os build; // in-app payment supported on android m or above // check android version of the device if build version sdk_int < build version_codes m { //hide samsung pay button} service registration to develop a samsung pay sdk service, merchants and issuers need to register for an account with samsung pay developers in order to create the appropriate service type for their applications here are some helpful links inside the portal become a member https //pay samsung com/developers/tour/memberguide create services https //pay samsung com/developers/tour/svcguide register apps https //pay samsung com/developers/tour/appsguide manage services and apps https //pay samsung com/developers/tour/svcnappsguide add samsung pay sdk to your project be sure to do the following before attempting to use the sdk if not already part of your environment, download and install an ide android studio is recommended download the samsung pay sdk the sdk package has the following directory structure folder contents docs javadoc – api reference documentation libs samsungpay jar sdk java archive file – contains the samsung pay apis to be used by your partner app samples sample apps configure your ide to integrate the samsung pay sdk with your partner app a add samsungpay jar to the libs folder of your android project b go to gradle scripts > build gradle and enter the following dependency dependencies { compile files 'libs/samsungpay jar' } c import the sdk package into your code import com samsung android sdk samsungpay v2; d proguard rules - if your app s have any issue with proguard, the following rules are recommended to enter in debug mode dontwarn com samsung android sdk samsungpay ** -keep class com samsung android sdk ** { *; } -keep interface com samsung android sdk ** { *; } -keepresourcexmlelements manifest/application/meta-data@name=spay_sdk_api_level -keepresourcexmlelements manifest/application/meta-data@name=debug_mode -keepresourcexmlelements manifest/application/meta-data@name=spay_debug_api_key dontwarn com samsung android sdk samsungpay ** -keep class com samsung android sdk ** { *; } -keep interface com samsung android sdk ** { *; } -keepresourcexmlelements manifest/application/meta-data@name=spay_sdk_api_level -keepresourcexmlelements manifest/application/meta-data@name=debug_mode -keepresourcexmlelements manifest/application/meta-data@name=spay_debug_api_key e when dexguard is employed, the following additional rules apply -keepresourcexmlelements manifest/application/meta-data@name=spay_sdk_api_level android r os targetsdkversion 30 informationfrom android r os if the target sdk version is 30 , you must include the following <queries> element in the androidmanifest <?xml version="1 0" encoding="utf-8"?> <manifest xmlns android="http //schemas android com/apk/res/android" xmlns tools="http //schemas android com/tools" package="xxx xxx xxx xxx"> <queries> <package android name="com samsung android spay" /> <package android name="com samsung android samsungpay gear" /> </queries> 3 1 5 configuring api level api level attributes as of sdk version 1 4, enhanced version control management has been introduced to improve backward compatibility and handle api dependency from country and service type for example, if a partner integrates the latest sdk―for instance, api level 2 22―but continues to use apis based in level 1 4, the partner app remains compatible with samsung wallet apps supporting api level 1 4 without the necessity of upgrading the samsung pay app the chief characteristics and properties of the api level include every api starting from version 1 4 has an api level assigned based on the sdk version number in which it is introduced the sdk’s javadoc reference can be filtered by api level so you can determine the minimum api level you need to configure in the metadata section of your app’s androidmanifest file the earliest possible version is 1 4 this lets you use the api level defined in your androidmanifest without having to trigger an upgrade of the samsung wallet app on the user’s device implement the following usage in your androidmanifest <application <meta-data android name="spay_sdk_api_level" android value="2 22" /> // most recent sdk version is recommended to leverage the latest apis but it need to be set to 2 17 for russia </application> partner app verification in partner verification process samsung pay sdk verify your registered app, version in samsung pay portal and service it also determines device and app compatibility your app needs to verify the presence of the samsung wallet app on the device, its status, and whether or not its version is sufficient to support your implementation of the sdk 3 1 6 common terminology terminology description aavs automatic add value service aidl android interface definition language for communication merchant a business entity engaged in retail e-commerce that provides an online checkout service for purchasing its products and/or services to registered end users issuer financial institution empowered to issue credit and/or debit payment cards to qualified consumers and businesses payment gateway pg e-commerce app service provider equipped to authorize credit card payments for e-businesses, online retailers, bricks and clicks, or traditional brick and mortar payment token secure method for payment ensuring that a cardholder’s information is not exploited by unauthorized parties samsung pay samsung’s proprietary mobile wallet app and payment system samsung pay service the server and service components of samsung pay samsung pay watch samsung pay app on samsung galaxy watches to support payment system eligibility check a query by third-party apps to check whether or not samsung pay is supported/activated/ready-to-use on a samsung device mst magnetic secure transmission tui trusted user interface 3 1 7 api common flow once setup is complete, you’re ready to add the sdk code within your partner app for calling the sdk’s apis and receiving callbacks when a partner app calls one of the sdk’s apis, the following interaction flow is processed to check whether the caller is authenticated and authorized before responding to the request the steps of the interaction are enumerated below step 1 the partner app calls a samsung pay sdk api the partner app initiates a call to the samsung pay sdk this could be to request in-app payment push provisioning status checks, etc step 2 sdk validates the preconditions the sdk performs initial checks before proceeding is samsung wallet installed on the device? is the integrity of the samsung pay system intact e g , no tampering or missing files ? step 3 sdk initiates communication with samsung wallet if preconditions are met, the sdk uses aidl android interface definition language to securely open a communication channel with the samsung wallet app step 4 samsung wallet app status validation samsung wallet app checks has the samsung pay setup been completed on the device? does the app require a mandatory update? is the samsung pay sdk api level used by the partner app compatible? step 5 partner app eligibility verification sdk triggers a backend verification with the samsung pay server to confirm the app’s package name, service id, and csr match what’s registered on the samsung pay developers portal the app is authorized to use the requested samsung pay functionality step 6 samsung wallet responds to sdk based on the above validations samsung wallet responds via aidl to the sdk it sends status codes, eligibility results, or additional prompts if needed e g , update required step 7 sdk triggers callback in the partner app the sdk invokes a callback function in the partner app this informs the app whether it can proceed with payment/provisioning an error or restriction has occurred step 8 partner app executes business logic based on sdk callback if successful initiate samsung pay payment ui or push provisioning complete transaction or card enrollment via the wallet app if unsuccessful inform the user offer fallback payment options provide guidance on enabling/updating samsung wallet 3 1 8 checking samsung pay status the first step in integrating the samsung pay sdk into your partner app is to create a samsung pay instance and check the status of samsung pay on the user's device this check determines whether the device supports samsung pay and if the samsung pay button should be shown as a payment or provisioning option the samsung pay button serves two key purposes for merchant apps, it enables users to select samsung pay for in-app payments for issuer apps, it allows users to add a card directly to samsung pay via push provisioning setting partnerinfo for verification before checking the status, the partner app must configure and pass a valid partnerinfo object to the samsungpay instance this is essential for verifying the calling app and enabling further sdk functionality the partnerinfo must include serviceid sid a unique identifier assigned by the samsung pay developer portal servicetype defines the type of service e g , merchant or issuer this value is also assigned during service registration samsung pay uses partnerinfo for validating the app’s identity and registration performing sdk version and api compatibility checks verifying allowlist/blocklist status note servicetype is required without it, you cannot call other samsung pay apis once partnerinfo is set correctly, you can proceed to call getsamsungpaystatus to check if samsung pay is available and ready for use on the device val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, samsungpay servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle after setting partnerinfo, your partner app can now call getsamsungpaystatus this method of the samsungpay class must be called before using any other feature in the samsung pay sdk noteif you want to get the status of samsung pay watch, you have to use the watchmanager class instead of the samsungpay class fun getsamsungpaystatus callback statuslistener copy the result is delivered to statuslistener and provides the following events onsuccess ‒ called when the requested operation is successful it provides the status of the request, as well as extra bundle data related to the request onfail ‒ called when the request operation fails it returns the error code and extra bundle data related to the request the samsung pay status code returned is one of the following spay_not_supported - indicates samsung wallet is not supported on this device; typically returned if the device is incompatible with samsung pay or if the samsung wallet app is not installed spay_not_ready - indicates samsung wallet is not completely activated; usually returned if the user did not complete a mandatory update or if the user has not signed in with a valid samsung account in which case, the partner app can activate or update the samsung wallet app on the device according to the 'extra_error_reason' bundle keys below error_spay_setup_not_complete - tells the partner app to display a popup message asking if the user wishes to activate samsung pay if the user agrees, the partner app calls activatesamsungpay to activate the samsung wallet app error_spay_app_need_to_update - tells the partner app to display a popup message asking if the user wishes to update samsung pay if user agrees, the partner app calls gotoupdatepage to open the app update page error_partner_info_invalid - indicates that partner app information is invalid; typically, the partner app is using a sdk version that is not allowed, an invalid service type, or the wrong api level error_partner_sdk_api_level - tells the partner app it is using the wrong api level to resolve the error condition, the partner app must set a valid api level error_partner_service_type - tells the partner app that it did not set a service type, or that the service type it did set is invalid service type is set in partnerinfo spay_ready - indicates that samsung pay is activated and ready to use; typically returned after the user completes all mandatory updates and signs in extra bundle data can have the following values extra_country_code - for both onsuccess and onfail , this is the current device’s country code iso 3166-1 alpha-2 set by samsung pay if the partner app is not supported in this particular country, the partner app can decide not to display samsung pay button extra_error_reason - for onfailure , this is the reason for failure set by samsung pay when the returned status code is spay_ready, the partner app can safely display the samsung pay button for user selection as a payment option, push provisioning, and so on the following sample code shows how to use the getsamsungpaystatus api method val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, samsungpay servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle val samsungpay = samsungpay context, partnerinfo /* * method to get the samsung pay status on the device * partner issuers, merchants applications must call this method to * check the current status of samsung pay before doing any operation */ samsungpay getsamsungpaystatus object statuslistener { override fun onsuccess status int, bundle bundle { when status { samsungpay spay_not_supported -> // samsung pay is not supported samsungpaybutton setvisibility view invisible samsungpay spay_not_ready -> { // activate samsung pay or update samsung pay, if needed samsungpaybutton setvisibility view invisible val errorreason = bundle getint samsungpay extra_error_reason if errorreason == samsungpay error_setup_not_completed { // display an appropriate popup message to the user samsungpay activatesamsungpay } else if errorreason == samsungpay error_spay_app_need_to_update { // display an appropriate popup message to the user samsungpay gotoupdatepage } else { toast maketext context, "error reason $errorreason", toast length_long show } } samsungpay spay_ready -> // samsung pay is ready samsungpaybutton setvisibility view visible else -> // not expected result samsungpaybutton setvisibility view invisible } } override fun onfail errorcode int, bundle bundle { samsungpaybutton setvisibility view invisible log d tag, "checksamsungpaystatus onfail $errorcode" } } 3 1 9 activating the samsung wallet app the samsungpay class provides the following api method to activate the samsung wallet app on a device fun activatesamsungpay activatesamsungpay is called to activate the samsung wallet app on the same device on which the partner app is running first, however, the partner app must check the samsung pay status with a getsamsungpaystatus call see section 4 2 above if the status is spay_not_ready and extra_error_reason is error_spay_setup_not_complete, the partner app needs to display an appropriate message to user, then call activatesamsungpay to launch the samsung wallet app so the user can sign in here’s an example of how to code this val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, spaysdk servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle val samsungpay = samsungpay context, partnerinfo samsungpay activatesamsungpay 3 1 10 updating the samsung wallet app the samsungpay class provides the following api method to update the samsung wallet app on the device fun gotoupdatepage gotoupdatepage is called to update samsung wallet app on the same device on which the partner app is running as with all api calls, the partner app must first check the samsung pay status with getsamsungpaystatus if this returns spay_not_ready and extra_error_reason is error_spay_app_need_to_update, then the partner app needs to display an appropriate message to the user and call gotoupdatepage , which launches the samsung pay update page the following code sample reflects how to update samsung pay val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, spaysdk servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle val samsungpay = samsungpay context, partnerinfo samsungpay gotoupdatepage 3 1 11 in-app online the main classes and interfaces involved here are samsungpay– class for a merchant app to get samsung pay sdk information and the status of samsung pay on the device paymentmanager – class to provide payment/transaction functionality cardinfolistener – interface for requestcardinfo result callbacks from samsung wallet customsheettransactioninfolistener – interface for transaction success/failure callbacks from samsung wallet; payment information is provided with a success callback and must be used by the merchant app for processing the payment the flow pictured next captures the essential online payment api process between merchant apps integrated with the samsung pay sdk and samsung wallet and the merchant’s payment gateway pg 3 1 12 api flow for in-app payments the api flow for samsung pay in-app payments involves a series of operations that ensure secure, seamless, and verified payment processing between the merchant app, samsung wallet, and the payment gateway pg these steps are illustrated in the flow diagram above and described below check the ready status of samsung pay use samsungpay getsamsungpaystatus to verify whether samsung pay is installed and supported on the device samsung pay is activated and ready for transactions the user has completed mandatory updates and account setup start the payment manager to establish the service binding and verify the merchant app establish a binding between your app and the samsung wallet app validate that the merchant app is authorized and registered prepare the sdk to handle payment operations get payment card information and the payment amount, including updates this step also includes displaying eligible cards to the user allowing the user to select a card for the transaction collecting or updating the payment amount get/update the user’s billing and shipping addresses, including an updated payment amount if shipping charges will be incurred if required by the transaction retrieve or update the user’s billing and shipping address recalculate and update the total payment amount e g , shipping cost impact authenticate the user trigger authentication via trusted user interface tui , using biometrics or other secure methods supported by samsung wallet submit payment information to pg this ensures the user has authorized the transaction send the tokenized payment data received from samsung pay to your designated payment gateway pg for transaction processing this can be done via a direct merchant server-to-pg connection, or samsung pg interface server if applicable verify transaction success or failure receive confirmation of transaction success or failure from the payment gateway communicate the result back to the user and update your app's ui and backend accordingly 3 1 13 token modes network vs gateway to complete the payment, the merchant’s designated payment gateway pg handles one of two types of tokens gateway tokens indirect or network tokens direct the samsung pay sdk supports both types the essential difference between the two types is who decrypts the token information network tokens require that the merchant app handles decryption of the token bundle or work with the pg to handle decryption, whereas gateway token decryption is handled by the pg via the samsung-pg interface server network token mode direct user selects samsung pay as the payment method at checkout in the merchant app and the samsung pay app requests partner verification from the samsung pay online payment server encrypted payment information is passed from the samsung pay app to the pg through the merchant app via the pg sdk applying the merchant's private key, pg decrypts the payment information structure and processes the payment through the acquirer and payment network upon receiving authorization or rejection, pg notifies the merchant app through its pg sdk gateway token mode indirect user selects samsung pay as the payment method at checkout in the merchant app and the samsung pay app requests partner verification from the samsung pay online payment server encrypted payment information and the partner id are passed to the samsung-pg interface server samsung-pg interface server sends a transaction authorization request to the pg on behalf of the merchant; pg authenticates the partner id before generating a transaction reference id reference id is passed to merchant app via sdk callback merchant app then passes the reference id to the pg for payment process execution samsung-pg interface server returns the payment token to the pg i e , gateway token it received from samsung pay app in step 2 pg continues payment processing with the acquirer and payment network the result approved/declined is returned to the merchant app on the device for display to the user check with your pg to determine its specific requirements for payment processing regardless of the pg model employed, direct or indirect, the goal is to offer samsung pay as a secure payment method within your merchant app the most common use case involves the following general steps to make a purchase, the user selects to “buy” or got to checkout after adding items to a shopping cart now in checkout, the user selects a payment option; for example, either the merchant’s “standard” method or samsung pay upon selecting samsung pay, the user is presented with a payment sheet that allows for card selection and shipping address confirmation with the option to add/modify information for this order, whereupon the user makes payment card selection from the list of enrolled cards chooses to change or add the delivery address enters required address information in the form presented and saves it authenticates the payment method, amount, and delivery with a biometric verification fingerprint, iris… or pin 3 1 14 checking registered/enrolled card information before displaying the samsung pay button, a partner app can query card brand information for the user’s currently enrolled payment cards in samsung wallet to determine if payment is supported with the enrolled card for example, if a merchant app accepts one card brand exclusively but the user has not registered any cards matching this brand in samsung wallet, the merchant app needs to determine whether or not to display the samsung pay button for this purchase checkout to query the card brand, use the requestcardinfo api method of the paymentmanager class the requestfilter is optional bundle data reserved for future use the merchant app does not need to set a value for it now however, before calling this method, cardinfolistener must be registered so its listener can provide the following events onresult - called when the samsung pay sdk returns card information from samsung wallet; returns information about enrolled cards or is empty if no card is registered onfailure - called when the query fails; for example, if sdk service in the samsung wallet app ends abnormally the following snippet shows how to retrieve the list of supported card brands from samsung pay val serviceid = "partner_app_service_id" val bundle = bundle bundle putstring samsungpay partner_service_type, spaysdk servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle val paymentmanager = paymentmanager context, partnerinfo paymentmanager requestcardinfo bundle , cardinfolistener // get card brand list //cardinfolistener is for listening requestcardinfo callback events val cardinfolistener cardinfolistener = object cardinfolistener { // this callback is received when the card information is received successfully override fun onresult cardresponse list<cardinfo> { var visacount = 0 var mccount = 0 var amexcount = 0 var dscount = 0 var brandstrings = "card info " var brand spaysdk brand? for i in cardresponse indices { brand = cardresponse[i] brand when brand { spaysdk brand americanexpress -> amexcount++ spaysdk brand mastercard -> mccount++ spaysdk brand visa -> visacount++ spaysdk brand discover -> dscount++ else -> { /* other card brands */ } } } brandstrings += " vi = $visacount, mc = $mccount, ax = $amexcount, ds = $dscount" log d tag, "cardinfolistener onresult $brandstrings" toast maketext context, "cardinfolistener onresult" + brandstrings, toast length_long show } /* * this callback is received when the card information cannot be retrieved * for example, when sdk service in the samsung wallet app dies abnormally */ override fun onfailure errorcode int, errordata bundle { //called when an error occurs during in-app cryptogram generation toast maketext context, "cardinfolistener onfailure " + errorcode, toast length_long show } } 3 1 15 creating a transaction request upon successful initialization of the samsungpay class, the merchant app needs to create a transaction request with payment information note as of sdk v2 0 00, the normal payment sheet is deprecated all merchant apps must now use the custom payment sheet, which offers more dynamic controls for tailoring the ui look and feel with additional customer order and payment data merchant app developers choosing to temporarily continue offering the normal sheet will need to configure their android manifest to reflect the pre-2 0 00 version of the sdk used to implement their app’s existing normal sheet, although this is not recommended in all cases, merchant app developers should update their apps with the latest version of the sdk as soon as possible to avoid timing out using an earlier version of the sdk when responding to samsung pay callbacks using the custom payment sheet to initiate a payment transaction with samsung pay’s custom payment sheet, your merchant app must populate the following mandatory fields in customsheetpaymentinfo merchant name - as it will appear in samsung pay’s payment sheet, as well as the user's card account statement amount - the constituent transaction properties currency, item price, shipping price, tax, total price which together determine the total amount the user is agreeing to pay the merchant cautionnot populating the mandatory fields throws an illegalargumentexception optionally, the following fields can be added to the payment information merchant id- can be used for the merchant’s own designated purpose at its discretion unless the merchant uses an indirect pg like stripe or braintree if an indirect pg is used, this field must be set to the merchant’s payment gateway id fetched from the samsung pay developers portal merchant id is mandatory if a merchant requests with a mada token, this field should be included in the payload order number - usually created by the merchant app via interaction with a pg this number is required for refunds and chargebacks in the case of visa cards, the value is mandatory the allowed characters are [a-z][a-z][0-9,-] and the length of the value can be up to 36 characters address - the user’s billing and/or shipping address see applying an addresscontrol for details allowed card brands - specifies card brands accepted by the merchant if no brand is specified, all brands are accepted by default if at least one brand is specified, all other card brands not specified are set to "card not supported’ on the payment sheet here’s the 'customsheetpaymentinfo' structure class customsheetpaymentinfo parcelable { private val version string? = null private val merchantid string? = null private val merchantname string? = null private val ordernumber string? = null private val addressinpaymentsheet addressinpaymentsheet = addressinpaymentsheet do_not_show private val allowedcardbrand list<spaysdk brand>? = null private val cardinfo cardinfo? = null private val iscardholdernamerequired = false private val isrecurring = false private val merchantcountrycode string? = null private val customsheet customsheet? = null private val extrapaymentinfo bundle? = null } your merchant app sends this customsheetpaymentinfo to samsung wallet via the applicable samsung pay sdk api methods upon successful user authentication in direct mode, samsung wallet returns the above "payment info" structure and a result string the result string is forwarded to the pg by your merchant app to complete the transaction it will vary based on the pg you’re using note if you want to add any other information for any card brand, you can add them in the extrapaymentinfo bundle the following example demonstrates how to populate customsheet in the customsheetpaymentinfo class see sample merchant app using custom payment sheet below for example usage of each customsheet control /* * make user's transaction details * the merchant app should send customsheetpaymentinfo to samsung wallet via * the applicable samsung pay sdk api method for the operation being invoked */ private fun makecustomsheetpaymentinfo customsheetpaymentinfo { val brandlist = arraylist<spaysdk brand> // if the supported brand is not specified, all card brands in samsung wallet are // listed in the payment sheet brandlist add paymentmanager brand visa brandlist add paymentmanager brand mastercard brandlist add paymentmanager brand americanexpress /* * make the sheetcontrols you want and add them to custom sheet * place each control in sequence with amountboxcontrol listed last */ val customsheet = customsheet customsheet addcontrol makebillingaddresscontrol customsheet addcontrol makeshippingaddresscontrol customsheet addcontrol makeplaintextcontrol customsheet addcontrol makeshippingmethodspinnercontrol customsheet addcontrol makeamountcontrol val extrapaymentinfo = bundle /* * you can add transaction type for mada card brand * the supported values are purchase and preauthorization * if you don't set any value, the default value is purchase */ extrapaymentinfo putstring spaysdk extra_online_transaction_type, spaysdk transactiontype preauthorization tostring val customsheetpaymentinfo = customsheetpaymentinfo builder setmerchantid "123456" setmerchantname "sample merchant" // merchant requires billing address from samsung wallet and // sends the shipping address to samsung wallet // show both billing and shipping address on the payment sheet setaddressinpaymentsheet customsheetpaymentinfo addressinpaymentsheet need_billing_send_shipping setallowedcardbrands brandlist setcardholdernameenabled true setrecurringenabled false setcustomsheet customsheet setextrapaymentinfo extrapaymentinfo build return customsheetpaymentinfo } 3 1 16 requesting payment with a custom payment sheet the startinapppaywithcustomsheet method of the paymentmanager class is applied to request payment using a custom payment sheet in samsung wallet the two methods are defined as follows startinapppaywithcustomsheet - initiates the payment request with a custom payment sheet the payment sheet persists for 5 minutes after the api is called if the time limit expires, the transaction fails updatesheet - must be called to update current payment sheet as of api level 1 5, a merchant app can update the custom sheet with a custom error message refer to updating sheet with custom error message when you call the startinapppaywithcustomsheet method, a custom payment sheet is displayed on the merchant app screen from it, the user can select a registered card for payment and change the billing and shipping addresses, as necessary the result is delivered to customsheettransactioninfolistener, which provides the following events onsuccess - called when samsung pay confirms payment it provides the customsheetpaymentinfo object and the paymentcredential json string customsheetpaymentinfo is used for the current transaction it contains amount, shippingaddress, merchantid, merchantname, ordernumber api methods exclusively available in the onsuccess callback comprise getpaymentcardlast4dpan – returns the last 4 digits of the user's digitized personal/primary identification number dpan getpaymentcardlast4fpan – returns the last 4 digits of the user's funding personal/primary identification number fpan getpaymentcardbrand – returns the brand of the card used for the transaction getpaymentcurrencycode – returns the iso currency code in which the transaction is valued getpaymentshippingaddress – returns the shipping/delivery address for the transaction getpaymentshippingmethod – returns the shipping method for the transaction for pgs using the direct model network tokens , the paymentcredential is a json object containing encrypted cryptogram which can be passed to the pg pgs using the indirect model gateway tokens like stripe, it is a json object containing reference card reference – a token id generated by the pg and status i e , authorized, pending, charged, or refunded refer to payment credential sample for details oncardinfoupdated - called when the user changes the payment card in this callback, updatesheet method must be called to update current payment sheet onfailure - called when the transaction fails; returns the error code and errordata bundle for the failure here’s how to call the startinapppaywithcustomsheet method of the paymentmanager class /* * customsheettransactioninfolistener is for listening callback events of in-app custom sheet payment * this is invoked when card is changed by the user on the custom payment sheet, * and also with the success or failure of online in-app payment */ private val transactionlistener = object customsheettransactioninfolistener { // this callback is received when the user changes card on the custom payment sheet in samsung pay override fun oncardinfoupdated selectedcardinfo cardinfo, customsheet customsheet { /* * called when the user changes card in samsung wallet * newly selected cardinfo is passed so merchant app can update transaction amount * based on different card if needed , */ val amountboxcontrol = customsheet getsheetcontrol amount_control_id as amountboxcontrol amountboxcontrol updatevalue product_item_id, 1000 0 //item price amountboxcontrol updatevalue product_tax_id, 50 0 // sales tax amountboxcontrol updatevalue product_shipping_id, 10 0 // shipping fee amountboxcontrol updatevalue product_fuel_id, 0 0, "pending" // additional item status amountboxcontrol setamounttotal 1060 0, amountconstants format_total_price_only // grand total customsheet updatecontrol amountboxcontrol // call updatesheet with amountboxcontrol; mandatory try { paymentmanager updatesheet customsheet } catch e java lang illegalstateexception { e printstacktrace } catch e java lang nullpointerexception { e printstacktrace } } /* * this callback is received when the payment is approved by the user and the transaction payload * is generated payload can be an encrypted cryptogram network token mode or the pg's token * reference id gateway token mode */ override fun onsuccess response customsheetpaymentinfo, paymentcredential string, extrapaymentdata bundle { /* * called when samsung pay creates the transaction cryptogram, which merchant app then sends * to merchant server or pg to complete in-app payment */ try { val dpan = response cardinfo cardmetadata getstring spaysdk extra_last4_dpan, "" val fpan = response cardinfo cardmetadata getstring spaysdk extra_last4_fpan, "" toast maketext context, "dpan " + dpan + "fpan " + fpan, toast length_long show } catch e java lang nullpointerexception { e printstacktrace } toast maketext context, "transaction onsuccess", toast length_long show } override fun onfailure errorcode int, errordata bundle { // called when an error occurs during cryptogram generation toast maketext context, "transaction onfailure $errorcode", toast length_long show } } private fun startinapppaywithcustomsheet { // show custom payment sheet try { val bundle = bundle bundle putstring samsungpay partner_service_type, spaysdk servicetype inapp_payment tostring val partnerinfo = partnerinfo serviceid, bundle paymentmanager = paymentmanager context, partnerinfo // request payment using samsung wallet paymentmanager startinapppaywithcustomsheet makecustomsheetpaymentinfo , transactionlistener } catch e illegalstateexception { e printstacktrace } catch e numberformatexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } catch e illegalargumentexception { e printstacktrace } } when an address is provided by samsung wallet, onaddressupdated is called whenever address information is updated in the custom payment sheet you can use the updatesheet method to update the shipping fee or any other relevant information in the payment sheet set the errorcode to determine if the address provided by samsung wallet app is invalid, out of delivery, or does not exist for example, when the merchant does not support the product delivery to the designated location billing address from samsung wallet is not valid for tax recalculation for all such cases, the merchant app should call updatesheet with one of the following error codes error_shipping_address_invalid error_shipping_address_unable_to_ship error_shipping_address_not_exist error_billing_address_invalid error_billing_address_not_exist the sample code included below under applying the address control demonstrates how to use the updatesheet method for 'addresscontrol' in the payment sheet 3 1 17 payment credential sample the paymentcredential is the resulting output of the startinapppaywithcustomsheet method the structure varies depending on the pg you’re using and the integration model—direct or indirect the following paymentcredential is for a visa card for pg using direct network token mode – e g first data, adyen, visa cybersourse sample paymentcredential json output using jwe-only { "billing_address" {"city" "billingcity","country" "usa","state_province" "ca","street" "billingaddr1","zip_postal_code" "123456"}, "card_last4digits" "1122", "3ds" {"data" "eyjhbgcioijsu0exxzuilcjrawqioijcak91a1h2afv4wu5wofiwvgs2y25oactzwwfqzxhiehrvz0vfdhlhyy9npsisinr5cci6ikppu0uilcjjagfubmvsu2vjdxjpdhldb250zxh0ijoiulnbx1blssisimvuyyi6ikexmjhhq00ifq fg2oouvhdgkkivyba2s5kturpwueujkzeyxz7n6kalhqahszv3p5jabaoj-rokcznfjdg3qierzjktu7zxst9gwv4oclahpfdw64w0x6ttaxeyjiivkjug-edxxtwajeyeikgc68wehf1cltsqg4zlwi6upvcaywdppbn0hl0c5wcf5az4wabytv_fda5ahguypne70keqrtwdlacw9mzejx2xth7msd9ohoulr8luq-7gha17jhoobwgmoq9q0haocnm0ljwiuhkoryyu-njulnbkk8fzus_aiumgdv2yn9ygfqilmculb0vwuf0yekx6isgaxi0zqhliusjkcz_w auzzxog46lnrtk3q qe2llws30vzh-zduue8b045cnfrm2p-rjzgbnzchels3v26n64cfg1av5mtp5f-fswbj3ntp5x4v1nk8fmdy0uspxzemfvl5badgac7w9frxt6x5xv1fqu6-q-zkbxcb9bygownt983bckoe1bd5djxfbodlrc4j68ikdjc5m3lebdx6hv0aqzkmilch-jevl3awqykbny4vj7m3fizw7u1prli2zfwukxdfs4vwv3bpm4qudemvnhxj qtymdmn4ne93juljnmwkjg","type" "s","version" "100"}, "merchant_ref" "merchantid", "method" "3ds", "recurring_payment" false } decrypt using the merchant’s private key below is sample private key -----begin rsa private key----- miieowibaakcaqea4lzyjqr+dqd/xleoxct9jwtjxhd2ptjke9djtmijki0h2oc2ghow4ujhhy/1jvft2+zcnjtoxuvlp+76/dwa3bcwfrj+fpp6x5kkylpb+djdyo1ttumltnqcwymjb3u7jbc+xr4vkfrzqjxke7xhn/sbb82ue8c3smzvkynuji<…> -----end rsa private key----- the decrypted output will be similar to this { "amount" "1000", "currency_code" "usd", "utc" "1490266732173", "eci_indicator" "5", "tokenpan" "1234567890123456", "tokenpanexpiration" "0420", //the format is **mmyy** "cryptogram" "ak+zkbpmcorcabcd3agraoacfa==" } note for amex, it needs to be displayed in the format “yymmdd”, so i would like to add this processing the payload depending on the structure of the payment processing api provided by your pg, your merchant app can send either of these directly to the pg entire paymentcredential output extracted “3ds” part only consult your pg documentation for specific guidance when using indirect model e g stripe in indirect gateway token mode, paymentcredential is the pg’s token reference id and its status here’s a sample of the json output { "reference" "tok_18rje5e6szui23f2mefakep7", "status" "authorized" } for stripe, your merchant app should be able to pass this token object directly to charge or another appropriate payment processing api provided by the pg 3 1 18 push provisioning the following diagram illustrates the flows of the app-to-app apis for payment card push provisioning the main classes involved are samsung pay – for fetching samsung wallet app status and wallet information on the device paymentmanager – for push provisioning and invoking favorite cards payment functionalities cardmanager – for payment card management watchmanager – for all functions related to samsung pay watch 3 1 19 requesting registered card list in the samsung pay the getallcards method of the cardmanager class is used to request a list of all cards currently registered/enrolled in samsung wallet on the same device running the issuer’s app to succeed, the issuer app must pass valid partnerinfo to 'cardmanager' for caller verification 'cardfilter' narrows the card list returned by samsung wallet to the issuername specified please be noted that getsamsungpaystatus must be called before getallcards getallcards could not return a cards list when getsamsungpaystatus responds with a code other than spay_ready noteto get the cards list of samsung pay watch, you have to use the watchmanager class instead of the cardmanager class as of api level sdk version 1 4, cardfilter retrieves this information from the samsung pay developers portal certain issuers may need to register multiple issuer name s with the portal, depending on their app and/or the requirements of their token service provider tsp the getallcards parameter cardfilter matches the issuer name s specified with those registered in the portal only complete matches are returned this method is typically called when your partner app wants to check the card status it does not need to be called every time the partner app resumes therefore, you should create the card list with the 'oncreate ' method, rather than the 'onresume ' method the result of a getallcards call is delivered to getcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides the list of all filtered cards and their status card information includes cardid, cardstatus, and extra cardinfo data onfail - called when the operation fails here’s an example of how to use the 'getallcards ' api method in your issuer app val cardfilter = bundle // since api level 1 4, cardfilter param is ignored partner does not need to use it here // it is retrieved from the samsung pay developers portal cardfilter putstring cardmanager extra_issuer_name, issuername cardmanager getallcards null, object getcardlistener{ override fun onsuccess cards mutablelist<card>? { // getting card status is success if cards == null || cards isempty { log e tag, "no card is found" return } else { // perform operation with card data for s in cards { log d tag, "cardid " + s cardid + "cardstatus " + s cardstatus // get extra card data if s cardinfo != null { val cardid = s cardid // since api level 2 13, id from card network val last4fpan = s cardinfo getstring cardmanager extra_last4_fpan val last4dpan = s cardinfo getstring cardmanager extra_last4_dpan val cardtype = s cardinfo getstring cardmanager extra_card_type val cardissuername = s cardinfo getstring cardmanager extra_issuer_name log d tag, "last4fpan $last4fpan last4dpan $last4dpan cardid $cardid" } } } } override fun onfail errorcode int, errordata bundle? { // getting card status is failed } } 3 1 20 getting wallet information the samsungpay class provides the getwalletinfo api method, which is called to request wallet information from the samsung wallet app prior to calling the addcard api, when you want to avoid duplicate provisioning your issuer app uses this information to uniquely identify the user and the samsung wallet app on a particular device wallet device management id, device id, and wallet user id note to get wallet information of samsung pay watch, you have to use the watchmanager class instead of the cardmanager class fun getwalletinfo list<string> keys, statuslistener callback the following example demonstrates how to use it // set the serviceid assigned by the samsung pay developers portal during service creation val serviceid = "sampleserviceid" val bundle = bundle bundle putstring samsungpay extra_issuer_name, "issuer name" bundle putstring samsungpay partner_service_type, servicetype app2app tostring val pinfo = partnerinfo serviceid, bundle val samsungpay = samsungpay context, pinfo // add bundle keys to get wallet information from samsung pay // this information can be delivered to the partner server for an eligibility check val keys = arraylist<string> keys add samsungpay wallet_user_id keys add samsungpay device_id samsungpay getwalletinfo keys, object statuslistener{ override fun onsuccess status int, walletdata bundle { // log d tag, "dowalletinfo onsuccess callback is called" ; // for visa, deviceid can be set to "clientdeviceid" as defined by visa val deviceid = walletdata getstring samsungpay device_id // for visa, walletuserid can be set to "clientwalletaccountid" as defined by visa val walletuserid = walletdata getstring samsungpay wallet_user_id } override fun onfail errorcode int, errordata bundle? { log e tag, "onfail callback is called, errorcode " + errorcode ; // check the extra error codes in the errordata bundle for all the reasons in // samsungpay extra_error_reason, when provided } } 3 1 21 adding a card to samsung pay your issuer app calls the 'addcard ' api method of cardmanager to add a card to samsung wallet by providing the required card details, your app can make it convenient and easy for users to add their bank-issued debit/credit cards to samsung wallet directly from your app without additional steps, like switching between apps note if you want to add a card to samsung pay watch, you have to use the 'watchmanager' class instead of the cardmanager class for most issuers, getwalletinfo suffices for requesting current wallet information the response from samsung wallet tells the issuer app whether or not the user’s card has already been added to samsung wallet or is ineligible for provisioning it is therefore recommended that you call getwalletinfo before displaying the add to samsung pay button if the card is eligible, display the “add” button and, if the user taps it, call addcard important remember to obtain the governing issuer implementation guide s and specifications from the respective card network and implement each network’s required handling in your partner app and server the 'addcard ' result is delivered to addcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides information and status regarding the added card onfail - called when the operation fails; returns the error code and extra bundle data such as extra_error_reason or extra_request_id if provided onprogress - called to indicate the current progress of the 'addcard ' operation; can be used to show a progress bar to the user in the issuer app this callback is supported for tsm solution issuers in china and spain here’s an example of how to use the addcard api method in your issuer app val cardtype = card card_type_credit val tokenizationprovider string = addcardinfo provider_abcd // samsung pay does not provide detailed payload information; generate the provisioning payload in // accordance with your card network specifications val testpayload = "thisistestpayloadcardinfo1234567890" //bin bank identification number can be set to issuerid it is mandatory for some card network val issuerid = "123456" val carddetail = bundle carddetail putstring extra_provision_payload, testpayload carddetail putstring extra_issuer_id, issuerid val addcardinfo = addcardinfo cardtype, tokenizationprovider, carddetail cardmanager addcard addcardinfo, object addcardlistener { override fun onsuccess status int, card card? { log d tag, "onsuccess callback is called" ; } override fun onfail errorcode int, errordata bundle? { log d tag, "onfail callback is called" ; // check some extra error codes in the errordata bundle // such as samsungpay extra_error_reason or samsungpay extra_request_id if provided } override fun onprogress currentcount int, totalcount int, bundledata bundle? { log d tag,"onprogress callback is called " + currentcount + " / " + totalcount ; } } 3 1 22 adding a co-badge card to samsung pay co-badge payment cards combine two payment brands/networks to add a co-badge card through push provisioning, you must provide two different card network details one for the primary card network and another for the secondary card network issuer app calls the addcobadgecard api method of cardmanager to add a co-badge card to samsung pay in most cases, calling getwalletinfo will suffice to request current wallet information the response from samsung pay indicates whether the user's co-badge card has already been added to samsung pay or is ineligible for provisioning therefore, it is advisable to call getwalletinfo before displaying the add to samsung pay button if the co-badge card is eligible, display the "add" button and, upon user tapping, call addcobadgecard important please remember to refer to the relevant issuer implementation guide s and specifications provided by each card network and ensure that your partner app and server adhere to their specific requirements the addcobadgecard result is delivered to addcardlistener, which provides the following events onsuccess - called when the operation succeeds; provides information and status regarding the added card onfail - called when the operation fails; returns the error code and extra bundle data such as extra_error_reason or extra_request_id if provided onprogress - called to indicate the current progress of the 'addcard ' operation; can be used to show a progress bar to the user in the issuer app this callback is supported for tsm solution issuers in china and spain here’s an example of how to use the addcobadgecard api method in your issuer app notesamsung pay does not provide detailed payload information; generate the provisioning payload in accordance with your card networks specifications string cardtype = card card_type_credit; string primarytokenizationprovider = addcardinfo provider_abcd; //provide your primary card network payload string testprimarypayload = "thisistestprimarypayloadcardinfo1234567890"; string secondarytokenizationprovider = addcardinfo provider_efgh; //provide your secondary card network payload string testsecondarypayload = "thisistestsecondarypayloadcardinfo1234567890"; bundle primarycarddetail = new bundle ; primarycarddetail putstring addcardinfo extra_provision_payload, testprimarypayload ; addcardinfo primaryaddcardinfo = new addcardinfo cardtype, primarytokenizationprovider, primarycarddetail ; bundle secondarycarddetail = new bundle ; secondarycarddetail putstring addcardinfo extra_provision_payload, testsecondarypayload ; addcardinfo secondaryaddcardinfo = new addcardinfo cardtype, secondarytokenizationprovider, secondarycarddetail ; cardmanager addcobadgecard primaryaddcardinfo, secondaryaddcardinfo, new addcardlistener { @override public void onsuccess int status, card card { log d tag, "onsuccess callback is called" ; } @override public void onfail int error, bundle errordata { log d tag, "onfail callback is called" ; check some extra error codes in the errordata bundle such as samsungpay extra_error_reason or samsungpay extra_request_id if provided } @override public void onprogress int currentcount, int totalcount, bundle bundledata { log d tag,"onprogress callback is called " + currentcount + " / " + totalcount ; } } ; 3 1 23 sample applications sample apps, use cases, and ux strategies are included here to aid you in understanding the sdk and implementing it in your application sample source code and apks can be downloaded from download section sample merchant app included with the samsung pay sdk to demonstrate its features, the sample merchant app shows you how to implement the payment sheet’s dynamic controls to leverage additional customer order and payment data and/or create a more custom ui look and feel the following payment sheet controls are available addresscontrol plaintextcontrol amountboxcontrol spinnercontrol controls are applied to suit a particular purpose or need for example, displaying a promotion notice in the payment sheet using the plaintextcontrol applying an addresscontrol this control is used to display the billing or shipping address on the payment sheet based on samsung pay’s my info user profile or addresses provided by your merchant app during the transaction request when creating the control, controlld and sheetitemtype are needed to distinguish the billing address from the shipping address otherwise, your merchant app sets the following properties address title – displays a merchant-defined title on the payment sheet if empty, the default title such as “billing address” is displayed address – provides various methods to retrieve address details the merchant app can retrieve the phone number using the 'getphonenumber' method of 'customsheetpaymentinfo' address starting from api level 1 5, the addressee’s email address has also been added retrieve the email address using 'getemail' you can also set a display option for the shipping address with 'setdisplayoption' for more information, see the samsung pay sdk-api reference javadoc and the sample code included with the samsung pay sdk sheetupdatedlistener – used to capture the response from the samsung wallet app; merchant app must deliver to the samsung wallet app an amountboxcontrol to display payment information on a custom payment sheet when the onresult callback is called, the updatesheet method must also be called to update the current payment sheet errorcode – used for containing error codes directly related to the address the workflows for billingaddresscontrol the workflow for shippingaddresscontrol the following sample code demonstrates use of addresscontrol on the payment sheet fun makebillingaddresscontrol addresscontrol { val billingaddresscontrol = if !iszipcodeonly { // for billing address addresscontrol billing_address_id, sheetitemtype billing_address billingaddresscontrol addresstitle = "billing address" } else { /* * for billing address with zip code only * since api level 2 19, sheetitemtype zip_only_address * for us country only */ addresscontrol billing_address_id, sheetitemtype zip_only_address billingaddresscontrol addresstitle = "zip code" } //this callback is received when controls are updated billingaddresscontrol sheetupdatedlistener = sheetupdatedlistener return billingaddresscontrol } //listener for billing or zip code only billing address fun sheetupdatedlistener sheetupdatedlistener { return sheetupdatedlistener { updatedcontrolid string, customsheet customsheet -> log d tag, "onresult billingaddresscontrol updatedcontrolid $updatedcontrolid" val addresscontrol = customsheet getsheetcontrol updatedcontrolid as addresscontrol val billaddress = addresscontrol address //validate only zipcode or billing address and set errorcode if needed if addresscontrol sheetitem sheetitemtype == sheetitemtype zip_only_address { val errorcode int = validatezipcodebillingaddress billaddress log d tag, "onresult updatesheetbilling errorcode $errorcode" addresscontrol errorcode = errorcode customsheet updatecontrol addresscontrol } else { val errorcode = validatebillingaddress billaddress log d tag, "onresult updatesheetbilling errorcode $errorcode" addresscontrol errorcode = errorcode customsheet updatecontrol addresscontrol } // update transaction values val amountboxcontrol = customsheet getsheetcontrol amount_control_id as amountboxcontrol amountboxcontrol updatevalue product_item_id, 1000 0 amountboxcontrol updatevalue product_tax_id, 50 0 amountboxcontrol updatevalue product_shipping_id, 10 0 amountboxcontrol updatevalue product_fuel_id, 0 0, "pending" amountboxcontrol setamounttotal 1060 0, amountconstants format_total_price_only customsheet updatecontrol amountboxcontrol try { // call updatesheet for the full amountboxcontrol; mandatory paymentmanager updatesheet customsheet } catch e illegalstateexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } } } // for shipping address fun makeshippingaddresscontrol addresscontrol { val shippingaddresscontrol = addresscontrol shipping_address_id, sheetitemtype shipping_address shippingaddresscontrol addresstitle = "shipping address" val shippingaddress = customsheetpaymentinfo address builde setaddressee "name" setaddressline1 "addline1" setaddressline2 "addline2" setcity "city" setstate "state" setcountrycode "usa" setpostalcode "zip" setphonenumber "555-123-1234" setemail "user@samsung com" build shippingaddresscontrol address = shippingaddress /* * set address display option on custom payment sheet * if displayoption is not set, then default addresscontrol is displayed on custom payment sheet * the possible values are combination of below constants * {display_option_addressee} * {display_option_address} * {display_option_phone_number} * {display_option_email} */ var displayoption_val = addressconstants display_option_addressee // addressee is mandatory displayoption_val += addressconstants display_option_address displayoption_val += addressconstants display_option_phone_number displayoption_val += addressconstants display_option_email shippingaddresscontrol displayoption = displayoption_val return shippingaddresscontrol } here’s how these controls display on a custom payment sheet billing address control zip code billing address control shipping address control applying a plaintextcontrol this control is used for displaying a title with two lines of text or a single line of text without a title on the payment sheet when allocating this control, a controlid is needed the merchant app sets both the title, as applicable, and the text diagrammed below is the flow between your merchant app and samsung pay plaintextcontrol flow the merchant app code invoking this class would look something like the following fun makeplaintextcontrol plaintextcontrol { val plaintextcontrol = plaintextcontrol "exampleplaintextcontrolid" plaintextcontrol settext "plain text [example]", "this is example of plaintextcontrol" return plaintextcontrol } and this is how it displays on the custom payment sheet applying an amountboxcontrol amountboxcontrol is used for displaying purchase amount information on the payment sheet it requires a controlid and a currencycode, and consists of item s and amounttotal, defined as follows and diagrammed on the next page item – consists of id, title, price, and extraprice if there is an extraprice in amountboxcontrol, its text is displayed on the payment sheet even though there is an actual numerical price value if there is no extraprice, then currencycode with the price value is displayed amounttotal – consists of price and displayoption the displayoption allows predefined strings only your merchant app can set the text to “estimated amount”, “amount pending”, “pending”, “free”, and so forth the ui format for the string is different for each option note the setamounttotal api may accept strings that are not predefined as an argument, but it generates an invalid parameter condition or returns an error code in such cases for details, see the javadoc samsung pay sdk-api reference, available in the documentation folder of your downloaded sdk package here’s a coding example to demonstrate the use of amountboxcontrol in a payment sheet fun makeamountcontrol amountboxcontrol { val amountboxcontrol = amountboxcontrol amount_control_id, "usd" amountboxcontrol additem product_item_id, "item", 1000 0, "" amountboxcontrol additem product_tax_id, "tax", 50 0, "" amountboxcontrol additem product_shipping_id, "shipping", 10 0, "" amountboxcontrol setamounttotal 1060 0, amountconstants format_total_price_only amountboxcontrol additem 3, product_fuel_id, "fuel", 0 0, "pending" return amountboxcontrol } the merchant app can also add new items using the 'additem' method of 'amountcontrolbox' during callback important your merchant app needs to call the updatevalue item_id method of amountboxcontrol to update each amount item then call customsheet updatecontrol to make the changes take effect in customsheet eventually, paymentmanager updatesheet 'customsheet' must be called to let samsung pay know that no further action is pending in the merchant app when the custom sheet is updated, the merchant can add new items to amountboxcontrol for example, if the user selects a specific card in the payment sheet which the merchant offers, a discount item can be added via the updatesheet // example for adding new item while updating values val amount = sheet getsheetcontroll "id_amount" amount updatevalue "itemid", 900 0 amount updatevalue "taxid", 50 0 amount updatevalue "shippingid", 10 0 amount updatevalue "fuelid", 0 0 // add “discount” item amount additem 4, "discountid", "discount", -60 0, "" amount setamounttotal 1000 0, amountconstants format_total_price_only sheet updatecontrol amount // call updatesheet with amountboxcontrol; mandatory try { paymentmanager updatesheet sheet } catch e illegalstateexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } applying the spinnercontrol this control is used for displaying spinner options on a payment sheet when creating the control, controlid, title, and sheetitemtype are needed to distinguish between the types of spinner to be displayed your merchant app sets the following properties with spinnercontrol title – the merchant-defined spinner title to appear the payment sheet sheetitemtype – provides various types of spinner a shipping_method_spinner and an installment_spinner are the two types of spinner available as of api level 1 6 note shipping_method_spinner can be used when the shipping address comes from the samsung wallet app; i e , when the customsheetpaymentinfo addressinpaymentsheet option is set to need_billing_and_shipping or need_ shipping_spay when the shipping address is provided by the merchant app send_shipping or need_billing_ send_shipping , it is not changeable in the payment sheet the shipping fee if applied must be pre-calculated on the merchant app side here’s an example of constructing a spinnercontrol within your merchant app // construct spinnercontrol for shipping method val spinnercontrol = spinnercontrol shippingmethod_spinner_id, "shipping method ", sheetitemtype shipping_method_spinner // let the user can select one shipping method option on the payment sheet spinnercontrol additem "shipping_method_1", getstring android r string standard_shipping_free spinnercontrol additem "shipping_method_2", getstring android r string twoday_shipping spinnercontrol additem "shipping_method_3", getstring android r string oneday_shipping spinnercontrol selecteditemid = "shipping_method_1" // set default option // listen for sheetcontrol events spinnercontrol setsheetupdatedlistener sheetupdatedlistener { updatedcontrolid, customsheet -> val amountboxcontrol = customsheet getsheetcontrol amount_control_id as amountboxcontrol val spinnercontrol = customsheet getsheetcontrol updatedcontrolid as spinnercontrol when spinnercontrol selecteditemid { "shipping_method_1" -> amountboxcontrol updatevalue product_shipping_id, 10 0 "shipping_method_2" -> amountboxcontrol updatevalue product_shipping_id, 10 + 0 1 "shipping_method_3" -> amountboxcontrol updatevalue product_shipping_id, 10 + 0 2 else -> amountboxcontrol updatevalue product_shipping_id, 10 0 } amountboxcontrol setamounttotal 1000 + amountboxcontrol getvalue product_shipping_id , amountconstants format_total_price_only customsheet updatecontrol amountboxcontrol // call updatesheet with amountboxcontrol; mandatory try { paymentmanager updatesheet customsheet } catch e illegalstateexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } } // construct spinnercontrol for installment plan val spinnercontrol = spinnercontrol installment_spinner_id, "installment", sheetitemtype installment_spinner spinnercontrol additem "installment_1", "1 month without interest" spinnercontrol additem "installment_2", "2 months with 2% monthly interest" spinnercontrol additem "installment_3", "3 months with 2 2% monthly interest" spinnercontrol selecteditemid = "installment_1" // set default option // listen for sheetcontrol events spinnercontrol setsheetupdatedlistener sheetupdatedlistener { updatedcontrolid, customsheet -> val amountboxcontrol amountboxcontrol = customsheet getsheetcontrol amount_control_id as amountboxcontrol val spinnercontrol = customsheet getsheetcontrol updatedcontrolid as spinnercontrol val totalinterest = 0 0 when spinnercontrol selecteditemid { "installment1" -> amountboxcontrol updatevalue product_total_interest_id, totalinterest "installment2" -> // calculate total interest again and updatevalue amountboxcontrol updatevalue product_total_interest_id, totalinterest "installment3" -> // calculate total interest again and updatevalue amountboxcontrol updatevalue product_total_interest_id, totalinterest else -> amountboxcontrol updatevalue product_total_interest_id, totalinterest } amountboxcontrol setamounttotal 1000 + amountboxcontrol getvalue product_total_interest_id , amountconstants format_total_price_only customsheet updatecontrol amountboxcontrol // call updatesheet with amountboxcontrol; mandatory try { paymentmanager updatesheet customsheet } catch e illegalstateexception { e printstacktrace } catch e nullpointerexception { e printstacktrace } } update sheet with custom error message to display a custom error message on the payment sheet, use updatesheet with customerrormessage fun updatesheet sheet customsheet, errorcode int, customerrormessage string this api method is an extended version of the existing updatesheet sheet method which gives the merchant the ability to display a custom error message in the payment sheet’s authentication area it can be used to inform the user of any foreseen error scenarios encountered // update sheet with custom_messsage error code paymentmanager updatesheet customsheet, paymentmanager custom_message,"phone number entered is not valid please change your phone number " sample issuer app the samsung pay sdk also provides a sample issuer app to showcase samsung pay sdk features issuer app can add card to samsung wallet by selecting specific token service provider tsp from the dropdown menu to add cobadge card you need to select primary and secondary token service providers tsp from the dropdown menus for more information, refer to the samsung pay sdk api reference and sample code 3 1 24 api references
We use cookies to improve your experience on our website and to show you relevant advertising. Manage you settings for our cookies below.
These cookies are essential as they enable you to move around the website. This category cannot be disabled.
These cookies collect information about how you use our website. for example which pages you visit most often. All information these cookies collect is used to improve how the website works.
These cookies allow our website to remember choices you make (such as your user name, language or the region your are in) and tailor the website to provide enhanced features and content for you.
These cookies gather information about your browser habits. They remember that you've visited our website and share this information with other organizations such as advertisers.
You have successfully updated your cookie preferences.