Filter
-
Content Type
-
Category
Mobile/Wearable
Visual Display
Digital Appliance
Platform
Recommendations
Filter
Learn Code Lab
codelabdevelop a secure blockchain app objective learn how to create your own decentralized applications dapp using samsung blockchain keystore sdk overview integrating with new technology like blockchain is a burden to most developers for this reason, we offer a way to interwork with samsung blockchain keystore sdk with less effort developers can easily become a dapp developer with our samsung blockchain keystore sdk decentralized applications dapps run and store data on the blockchain network instead of a central server dapps offer increased security and reliability compared to centralized applications moreover, it provides a simple method for in-app payments using cryptocurrency samsung blockchain keystore sdk is used to obtain account information and sign a transaction to transfer cryptocurrency or execute smart contract execution in this code lab, you can learn how to integrate samsung blockchain keystore sdk into your app and how to implement blockchain basic concepts such as account information and signing transactions set up your environment you will need the following java se development kit 8 or later android studio latest version recommended mobile phone which supports samsung blockchain sample code here is a sample code for you to start coding in this code lab download it and start your learning experience! keystore sdk sample code 897 12 kb enable developer mode the developer mode helps developers test the samsung blockchain keystore in developer mode, app id verification is bypassed, so samsung blockchain keystore apis will be enabled to activate developer mode on your mobile device, follow the steps below navigate through settings > biometrics and security > samsung blockchain keystore and click about blockchain keystore tap the samsung blockchain keystore app name quickly, ten times or more if succeeded, developer mode will show noteonly a limited number of devices can be activated for one test app open project file after downloading the sample code, open the given android application project this project is a simple comments dapp based on ethereum ropsten test network it retrieves comments data from smart contract, displays them on the screen, and makes a transaction to execute smart contract function to post user’s comment in the next steps, you can get an account address and execute dapp service with blockchain keystore and you can see the result of successful dapp execution set the app id here, you don’t need to set the application id to use samsung blockchain keystore sdk instead, you must enable developer mode as described previously for the release version of your android app, in your android manifest file, add a metadata with a name as scw_app_id and a value as the app id issued by samsung blockchain keystore team samsung blockchain keystore aar file will read this value when your android app is initialized and help your android app connect to samsung blockchain keystore <manifest xmlns android="http //schemas android com/apk/res/android" package="com samsung android sdk coldwallet test" android versioncode="1" android versionname="1 0"> <application> <meta-data android name="scw_app_id" android value= <!-- put your app id here --> /> </application> </manifest> import samsung blockchain keystore sdk library into the project the sdk library is located at aar/keystoresdk_v1 5 1 aar of the project file to import the library go to gradle scripts > build gradle and enter the following dependencies dependencies { repositories { flatdir{ dirs 'aar' } } implementation 'com samsung android sdk coldwallet keystoresdk_v1 5 1@aar' } check the status of samsung blockchain keystore the first thing to do is to check the status of samsung blockchain keystore in the sample application, it is implemented at initializekeystore in presenter intropresenter java you can find the following steps to check the status of keystore in your android app, call scwservice getinstance if the returned value is an instance and not null, then it means samsung blockchain keystore is supported on the device however, if null is returned, the user must use a different keystore in the sample code, toast a message to notify that the device doesn’t support the keystore // check samsung blockchain keystore is supported or not if scwservice getinstance == null { mcontract toastmessage "samsung blockchain keystore is not supported on your device " ; } call getkeystoreapilevel api to see if the current samsung blockchain keystore being used, properly supports the features that your android app is currently aiming for if the required api level is higher than the current samsung blockchain keystore level, users are directed to samsung blockchain keystore app page in galaxy store through the provided deeplink to update // check installed api level else if scwservice getinstance getkeystoreapilevel < 1 { // if api level is lower, jump to galaxy apps to update keystore app mcontract showdialog "" , "ok" , "the api level is too low jump to galaxy store" , -> mcontract launchdeeplink scwdeeplink galaxy_store ; } check if a user has set up the samsung blockchain keystore and is ready to use it by calling getseedhash api if the seed hash value in string is zero-length, this means the user has not set up samsung blockchain keystore yet hence, your app will need to guide the user to jump to samsung blockchain keystore via deeplink to either create or import a wallet // check seed hash exist else if scwservice getinstance getseedhash length == 0 { // if seed hash is empty, // jump to blockchain keystore to create or import wallet mcontract showdialog "" , "ok" , "the seed hash is empty " + "jump to blockchain keystore to create/import wallet " , -> mcontract launchdeeplink scwdeeplink main ; } if the getseedhash api returned value is not zero-length, it means that the user has successfully set up samsung blockchain keystore if there is a previously saved or cached seed hash value, compare the two seed hash values if those two values are not equal, nor if there is no such saved cached seed hash value, then the address has to be checked again if the seed hash value has been changed, it means the master seed has been changed as well, meaning the address that your android app was linked to may no longer be the same address // check seed hash cached else if !textutils equals cachedseedhash, scwservice getinstance getseedhash { // if the seed hash is different from cached, update seed hash and address // go to next activity final string ethereumhdpath = "m/44'/60'/0'/0/0"; getethereumaddress ethereumhdpath , success, errorcode, address, seedhash -> { if success { updateaddress address ; updateseedhash seedhash ; mcontract showtimelineactivity true ; } else { mcontract toastmessage "cannot get address error code " + errorcode ; } mcontract setloading false ; } ; return false; } if those two values are equal, it means checking the keystore status was successful, and you can move on to the next step // success else { // set address from cached value // go to next activity string address = prefshelper getinstance getcachedaddress ; updateseedhash cachedseedhash ; updateaddress address ; mcontract showtimelineactivity false ; } get the ethereum address in the blockchain network, the address can be used like a user’s account as the balance and the transaction history can be checked using the address in this sample project, get the address from keystore and display the address and account balance in the bottom sheet of the screen keystore is a hierarchical deterministic hd wallet, a standard tree structure represented by derivation paths for the ethereum address, use “m/44'/60'/0'/0/0” follow bip44 it is implemented at getethereumaddress string hdpath, getethereumaddresscallback callback in presenter/intropresenter java arraylist<string> path = new arraylist<> ; path add hdpath ; scwservice getinstance getaddresslist new scwservice scwgetaddresslistcallback { @override public void onsuccess list<string> list { string seedhash = scwservice getinstance getseedhash ; string address = list get 0 ; callback onaddressreceived true, 0, address, seedhash ; } @override public void onfailure int errorcode, string errormessage { callback onaddressreceived false, errorcode, "", "" ; } }, path ; sign a transaction ether value transfer or smart contract execution is executed by transactions that users create and sign signing a transaction is the process of generating a signature on it using the private key of the transaction sender samsung blockchain keystore can be utilized to sign a cryptocurrency transaction, such as ethereum by implementing the following steps creates an unsigned transaction, and requests samsung blockchain keystore to sign the transaction via apis like signethtransaction then the user will see a transaction confirmation page on a secure screen called, trusted user interface tui executed in trusted execution environment tee by samsung blockchain keystore once the user confirms the transaction with pin or biometrics authentication, like fingerprint, samsung blockchain keystore will sign a transaction with the private key derived from the given hd path when samsung blockchain keystore returns the signed transaction, your app can submit or send the signed transaction to the blockchain network in this sample project, create an unsigned transaction to execute posting a comment smart contract in addition, sign the transaction with keystore and send the transaction it is implemented at signtransaction in presenter/writefeedpresenter java // sign the transaction with samsung blockchain keystore // use hdpath m/44'/60'/0'/0/0 final string hdpath = "m/44'/60'/0'/0/0"; scwservice getinstance signethtransaction new scwservice scwsignethtransactioncallback { @override public void onsuccess byte[] signedtransaction { boolean result = sendsignedtransaction signedtransaction ; listener transactiondidfinish result, "" ; } @override public void onfailure int errorcode, string errormessage { listener transactiondidfinish false, "error code " + errorcode ; } }, unsignedtx, hdpath, null ; run the app and try it out the app screen should look like below you're done! congratulations! you have successfully achieved the goal of this code lab now, you can create a decentralized app by yourself! if you're having trouble, you may download this file keystore sdk complete code 897 07 kb
Develop Samsung Pay
apioverview package class tree index help package com samsung android sdk samsungpay v2 interface apptoappconstants all known implementing classes cardmanager, watchmanager public interface apptoappconstants this interface provides the common values of watchmanager and cardmanager since api level 2 5 field summary fields modifier and type field description static final int error_auth_code_expired this error indicates that auth code is expired this is returned as spaysdk extra_error_reason for error_verify_card error static final int error_auth_code_invalid this error indicates that auth code is invalid this is returned as spaysdk extra_error_reason for error_verify_card error static final int error_auth_code_max_try_reached this error indicates that maximum idnv try reached this is returned as spaysdk extra_error_reason for error_verify_card error static final int error_auth_code_type_invalid this error indicates that auth code type is invalid this is returned as spaysdk extra_error_reason for error_verify_card error static final int error_authentication_closed this error indicates that authentication is force closed during update card service static final int error_authentication_failed this error indicates that authentication is failed during update card service static final int error_authentication_not_ready this error indicates that authentication is not ready state during update card service static final int error_authentication_timed_out this error indicates that authentication is closed due to timeout during update card service static final int error_card_already_registered this error indicates that the requested operation is already done and this operation cannot be performed again this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error static final int error_card_idv_not_supported this error indicates that the card does not support any idnv this is returned as spaysdk extra_error_reason for error_verify_card error static final int error_card_not_supported this error indicates that card is not supported this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error static final int error_framework_internal this error indicates that an error occurred in payment framework while processing the request this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error for example, unable to load certificate from ta, unable to access payment framework db, and so on static final int error_invalid_card this error indicates that the card is invalid this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error static final int error_invalid_cardinput this error indicates that the user entered invalid card information this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error static final int error_max_card_num_reached this error indicates that the maximum number of card limit has reached and user cannot add more card to samsung pay this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error static final int error_max_pan_provision_num_reached this error indicates that the limit number of enrollments of this pan has reached and user cannot add this pan this time static final int error_server_reject this error indicates that the server declined the request this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error static final int error_tsm_fail this error indicates that tsm error is reported during card downloading static final int error_verify_card this error indicates that server was unable to verify the card operation this may be due to invalid verification code static final int error_wallet_id_mismatch this error indicates that wallet id is mismatch this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error static final string extra_app2app_intent key to represent app2app intent name defined by issuer server static final string extra_app2app_payload key to represent app2app payload sent by issuer server static final string extra_card_balance key to represent card balance static final string extra_card_status_reason key to represent extra card status for issuer app static final string extra_issuer_app_card_linked key to represent extra card information for card link field details error_verify_card static final int error_verify_card this error indicates that server was unable to verify the card operation this may be due to invalid verification code since api level 1 2 see also constant field values error_card_already_registered static final int error_card_already_registered this error indicates that the requested operation is already done and this operation cannot be performed again this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error since api level 1 2 see also constant field values error_framework_internal static final int error_framework_internal this error indicates that an error occurred in payment framework while processing the request this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error for example, unable to load certificate from ta, unable to access payment framework db, and so on since api level 1 2 see also constant field values error_invalid_card static final int error_invalid_card this error indicates that the card is invalid this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error since api level 1 2 see also constant field values error_invalid_cardinput static final int error_invalid_cardinput this error indicates that the user entered invalid card information this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error since api level 1 2 see also constant field values error_server_reject static final int error_server_reject this error indicates that the server declined the request this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error since api level 1 2 see also constant field values error_max_card_num_reached static final int error_max_card_num_reached this error indicates that the maximum number of card limit has reached and user cannot add more card to samsung pay this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error since api level 1 2 see also constant field values error_tsm_fail static final int error_tsm_fail this error indicates that tsm error is reported during card downloading this is for tsm solution only since api level 1 4 see also constant field values error_authentication_not_ready static final int error_authentication_not_ready this error indicates that authentication is not ready state during update card service since api level 1 8 see also constant field values error_authentication_failed static final int error_authentication_failed this error indicates that authentication is failed during update card service since api level 1 8 see also constant field values error_authentication_closed static final int error_authentication_closed this error indicates that authentication is force closed during update card service since api level 1 8 see also constant field values error_authentication_timed_out static final int error_authentication_timed_out this error indicates that authentication is closed due to timeout during update card service since api level 1 8 see also constant field values error_card_not_supported static final int error_card_not_supported this error indicates that card is not supported this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error since api level 2 5 see also constant field values error_max_pan_provision_num_reached static final int error_max_pan_provision_num_reached this error indicates that the limit number of enrollments of this pan has reached and user cannot add this pan this time user needs to contact issuer to resolve this issue this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error since api level 2 5 see also constant field values error_wallet_id_mismatch static final int error_wallet_id_mismatch this error indicates that wallet id is mismatch this is returned as spaysdk extra_error_reason for spaysdk error_registration_fail error since api level 2 5 see also constant field values error_auth_code_invalid static final int error_auth_code_invalid this error indicates that auth code is invalid this is returned as spaysdk extra_error_reason for error_verify_card error since api level 2 7 see also constant field values error_auth_code_expired static final int error_auth_code_expired this error indicates that auth code is expired this is returned as spaysdk extra_error_reason for error_verify_card error since api level 2 7 see also constant field values error_auth_code_max_try_reached static final int error_auth_code_max_try_reached this error indicates that maximum idnv try reached this is returned as spaysdk extra_error_reason for error_verify_card error since api level 2 7 see also constant field values error_auth_code_type_invalid static final int error_auth_code_type_invalid this error indicates that auth code type is invalid this is returned as spaysdk extra_error_reason for error_verify_card error since api level 2 7 see also constant field values error_card_idv_not_supported static final int error_card_idv_not_supported this error indicates that the card does not support any idnv this is returned as spaysdk extra_error_reason for error_verify_card error since api level 2 7 see also constant field values extra_app2app_intent static final string extra_app2app_intent key to represent app2app intent name defined by issuer server since api level 1 1 see also constant field values extra_app2app_payload static final string extra_app2app_payload key to represent app2app payload sent by issuer server since api level 1 1 see also constant field values extra_card_balance static final string extra_card_balance key to represent card balance since api level 1 8 see also constant field values extra_card_status_reason static final string extra_card_status_reason key to represent extra card status for issuer app since api level 1 4 see also constant field values extra_issuer_app_card_linked static final string extra_issuer_app_card_linked key to represent extra card information for card link since api level 2 2 see also constant field values samsung electronics samsung pay sdk 2 22 00 - nov 19 2024
Develop Samsung Blockchain
docgetting started the following steps should be followed before integrating the samsung blockchain platform sdk prepare samsung galaxy device to run your apk check your development environment android minimum api level for samsung blockchain platform sdk 24 noteminimum build level for samsung blockchain platform sdk is 21, but will properly work from level 24 configure your ide to integrate samsung blockchain platform sdk with your android app create an “aar” directory if you don’t have one, and add the blockchainplatformsdk_1 2 03 aar to ”aar” directory in your android project go to gradle scripts > build gradle and enter the following dependencies dependencies { repositories { flatdir{ dirs 'aar' } } implementation name 'blockchainplatformsdk_1 2 03', ext 'aar' // network implementation 'com squareup retrofit2 retrofit 2 6 0' implementation 'com squareup retrofit2 converter-gson 2 6 0' implementation 'com squareup okhttp3 logging-interceptor 3 8 0' implementation 'com google code gson gson 2 8 5' // web3j implementation 'org web3j core 4 8 8-android' // for check developer mode implementation 'org ini4j ini4j 0 5 4' // dagger implementation 'com google dagger dagger 2 21' annotationprocessor 'com google dagger dagger-compiler 2 21' implementation "io reactivex rxjava2 rxjava 2 2 8" implementation "io reactivex rxjava2 rxandroid 2 1 1" // protobuf implementation 'com google protobuf protobuf-java 3 9 1' implementation 'com google protobuf protobuf-gradle-plugin 0 8 10' } import the package into your code import com samsung android sdk blockchain *; samsung blockchain platform sdk supports 2 kinds of hardware wallet samsung blockchain keystore ledger's devices like nano x, nano s notetransactions on evm-compatible networks binance smart chain, klaytn, polygon, avalanche c-chain and fantom are signed from the hardware wallets using the same pathway as that of ethereum for these transactions, currency unit displayed on hardwarewallet, such as samsung keystore or ledger, will show eth as currency unit instead of bnb, klay, matic, avax and ftm development setting guide for each environment is as follows integration with samsung blockchain keystore samsung blockchain keystore is compatible with selected samsung devices only you need to have one of selected samsung devices to run your app with samsung blockchain keystore please refer to the restrictions check your development environment android minimum api level for samsung blockchain keystore 28 notesamsung blockchain platform sdk requires samsung blockchain keystore that is higher than 1 5 1 download the samsung blockchain keystore sdk set 'developer mode' to test your app without app id verification you can find more information about app id scw_app_id , here add "blockchainkeystoresdk_v1 6 0 aar" to "aar" directory in your android project go to gradle script > build gradle and add below dependency dependencies { // keystore sdk implementation name 'blockchainkeystoresdk_v1 6 0', ext 'aar' } integration with nano x or nano s by ledger there is no restrictions to link with ledger device so any samsung galaxy mobile is ok to test your app which is integrated with samsung blockchain platform sdk when you sign with ledger device check your development environment ledger nano x 1 2 4-1 or higher ledger nano s 1 6 or higher ledger ethereum app 1 9 8 or higher you can refer ledger's guide page to get started go to gradle > build gradle and add below dependency dependencies { // ledger implementation 'com ledger lib ledger-android-library 1 2 2' }
Learn Code Lab
codelabintegrate in-app payment into merchant apps using samsung pay sdk objective learn how to integrate in-app payment with your merchant apps using samsung pay sdk partnership request to use the samsung pay sdk, you must become an official samsung partner once done, you can fully utilize this code lab you can learn more about the partnership process by visiting samsung pay page, here in samsung developers notein accordance with the applicable samsung partner agreements, this code lab covers setup and use of the samsung pay sdk for purposes of integrating the samsung pay app with partner apps the use cases and corresponding code samples included are representative examples only and should not be construed as either recommended or required overview the samsung pay sdk is an application framework for integrating selected samsung pay features with android-based partner apps on samsung devices in-app payment, which allows customers to pay for products and services with samsung pay, is one of the operations supported alongside push provisioning and open favorite cards partner apps can leverage the samsung pay sdk to perform different operations ― push provisioning and open favorite cards for issuers; in-app payment for merchants key components include partner app app developed by merchant or issuer for making online or offline payments and provisioning payment cards through samsung pay samsung pay sdk sdk integrated into the partner app for direct communication with samsung pay samsung pay app pay app with which the samsung pay sdk communicates financial network comprises the payment gateways, acquirers, card associations, and issuers that participate in transaction processing under agreement with the merchant most common use case for in-app payment the merchant app allows the user to make payments with samsung pay upon user selection of the samsung pay option, the merchant app calls the apis included in the samsung pay sdk to initiate a transaction with the samsung pay app the samsung pay app responds with the tokenized payment information necessary to complete the transaction the 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 standard transaction processing for more detailed information, see the official samsung pay sdk programming guide set up your environment you will need the following samsung wallet or samsung pay app depending on the country a compatible mobile device with android marshmallow 6 0 or android api level 23 or later android os versions samsung pay sdk android studio latest version recommended java se development kit jdk 11 or later sample code here is a sample code for you to start coding in this code lab download it and start your learning experience! in-app payment sample code 1 90 mb integrate the samsung pay sdk with your app the following steps comprise the general process for integrating the samsung pay sdk with your app sign up for the samsung pay developers site by clicking sign up and register your samsung account or create it if you don't already have one , then sign in follow the on-screen instructions for adding your app and creating a new service to generate the service id you'll need to use in your project download the samsung pay sdk by going to resources > sdk download add the samsung pay sdk jar file samsungpay jar to your android project using android studio or file explorer develop your partner app with the required api calls and callbacks for samsung pay integration upload a release version of your app to the samsung pay developers site for approval upon samsung approval, publish your partner app to the google play store and samsung galaxy apps notethe service id is already provided in the sample code for this code lab however, this service id is for test purposes only and cannot be used for an actual application or service using the provided test service id enforces your app to use the fixed properties below service id 0915499788d6493aa3a038 package name com test beta pay app version 1 0/ 1 or higher start your project after downloading the sample code containing the project files, in android studio click open to open existing project locate the downloaded android project sampleonlinepay from the directory and click ok add the samsungpaysdk_2 18 00_release jar file from the sdk's libs folder to your android project's libs folder go to gradle scripts > build gradle module sampleonlinepay app and enter the following to the dependencies block implementation files 'libs/samsungpaysdk_2 18 00_release jar' if the target sdk version is 30 android 11 or the r-os , you must include the following <queries> element in androidmanifest xml <queries> <package android name="com samsung android spay" /> </queries> configure the api level 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 18—but continues to use apis based on level 1 4, the partner app remains compatible with samsung pay apps supporting api level 1 4 without upgrading the samsung pay app implement the following in application tag of androidmanifest xml <meta-data android name="spay_sdk_api_level" android value="2 17" /> // most recent sdk version is recommended to leverage the latest apis add an xml layout and modify the activity next, replace the xml layout in res > layout > activity_main xml this layout shows the sample item information such as image, name, and price <?xml version="1 0" encoding="utf-8"?> <layout xmlns tools="http //schemas android com/tools" xmlns app="http //schemas android com/apk/res-auto" xmlns android="http //schemas android com/apk/res/android"> <androidx constraintlayout widget constraintlayout android layout_width="match_parent" android layout_height="match_parent" tools context=" mainactivity"> <imageview android id="@+id/imageview" android layout_width="350dp" android layout_height="184dp" android layout_margintop="100dp" app layout_constraintend_toendof="parent" app layout_constraintstart_tostartof="parent" app layout_constrainttop_totopof="parent" android src="@drawable/galaxy_s23_ultra_image"/> <imageview android id="@+id/samsung_pay_button" android layout_width="wrap_content" android layout_height="75dp" app layout_constraintbottom_tobottomof="parent" app layout_constraintend_toendof="parent" app layout_constraintstart_tostartof="parent" android src="@drawable/pay_rectangular_full_screen_black" android visibility="invisible"/> <textview android id="@+id/textview" android layout_width="wrap_content" android layout_height="wrap_content" android layout_margintop="10dp" android text="galaxy s23 ultra" android textsize="16sp" android textstyle="bold" app layout_constraintend_toendof="parent" app layout_constraintstart_tostartof="parent" app layout_constrainttop_tobottomof="@+id/imageview" /> <textview android id="@+id/textview2" android layout_width="wrap_content" android layout_height="wrap_content" android layout_margintop="5dp" android text="$1,199 00" android textsize="14sp" app layout_constraintend_toendof="parent" app layout_constrainthorizontal_bias="0 517" app layout_constraintstart_tostartof="parent" app layout_constrainttop_tobottomof="@+id/textview" /> </androidx constraintlayout widget constraintlayout> </layout> since you added a data binding layout, you need to inflate the xml file differently go to java > com > test > beta > pay > mainactivity kt, and declare the databinding variable in the mainactivity class private lateinit var databinding activitymainbinding replace the standard setcontentview declaration with the data binding version inside the oncreate method databinding = databindingutil setcontentview this, r layout activity_main check samsung pay status in the mainactivity, create the samsungpay instance to determine if the device supports samsung pay and if the samsung pay button can be displayed as the user's payment option, check the samsung pay status samsungpay requires a valid partnerinfo from the merchant app, which consists of service id and service type during onboarding, the samsung pay developers site assigns the service id and service type in the mainactivity, declare the partnerinfo variable private lateinit var partnerinfo partnerinfo then, set the partnerinfo in the oncreate method val bundle = bundle bundle putstring spaysdk partner_service_type, spaysdk servicetype inapp_payment tostring partnerinfo = partnerinfo service_id, bundle after setting partnerinfo, call the getsamsungpaystatus method via updatesamsungpaybutton function inside the oncreate method updatesamsungpaybutton the getsamsungpaystatus method of the samsungpay class must be called before using any other feature in the samsung pay sdk write the updatesamsungpaybutton function as follows private fun updatesamsungpaybutton { val samsungpay = samsungpay this, partnerinfo samsungpay getsamsungpaystatus object statuslistener { override fun onsuccess status int, bundle bundle { when status { spaysdk spay_ready -> { databinding samsungpaybutton visibility = view visible // perform your operation } spaysdk spay_not_ready -> { // samsung pay is supported but not fully ready // if extra_error_reason is error_spay_app_need_to_update, // call gotoupdatepage // if extra_error_reason is error_spay_setup_not_completed, // call activatesamsungpay databinding samsungpaybutton visibility = view invisible } spaysdk spay_not_allowed_temporally -> { // if extra_error_reason is error_spay_connected_with_external_display, // guide user to disconnect it databinding samsungpaybutton visibility = view invisible } spaysdk spay_not_supported -> { databinding samsungpaybutton visibility = view invisible } else -> databinding samsungpaybutton visibility = view invisible } } override fun onfail errorcode int, bundle bundle { databinding samsungpaybutton visibility = view invisible toast maketext applicationcontext, "getsamsungpaystatus fail", toast length_short show } } } tipfor the list and detailed definition of status codes such as spay_ready, refer to checking samsung pay status noteas of sdk version 1 5, if the device has android lollipop 5 1 android api level 22 or earlier versions, the getsamsungpaystatus api method returns a spay_not supported status code merchant apps using sdk 1 4 or earlier must check their app's android version activate the samsung pay app the samsungpay class provides an api method called activatesamsungpay to activate the samsung pay app on the same device where the partner app is running if the getsamsungpaystatus returns spay_not_ready and the extra_error_reason is error_spay_setup_not_complete, the partner app needs to display an appropriate message to the user then, call activatesamsungpay to launch samsung pay app and request the user to sign in in updatesamsungpaybutton function, add the code to call activatesamsungpay method via doactivatesamsungpay function when the status is spay_not_ready // if extra_error_reason is error_spay_setup_not_completed, // call activatesamsungpay val extraerror = bundle getint samsungpay extra_error_reason if extraerror == samsungpay error_spay_setup_not_completed { doactivatesamsungpay spaysdk servicetype inapp_payment tostring } create the doactivatesamsungpay function as below private fun doactivatesamsungpay servicetype string { val bundle = bundle bundle putstring samsungpay partner_service_type, servicetype val partnerinfo = partnerinfo service_id, bundle val samsungpay = samsungpay this, partnerinfo samsungpay activatesamsungpay } create a transaction request upon successfully initializing the samsungpay class, the merchant app should create a transaction request with payment information samsung pay offers two types of online payment sheet―normal and custom the normal payment sheet has fixed display items ― items, tax, and shipping the custom payment sheet offers more dynamic controls for customizing the ui, together with additional customer order and payment data for this code lab, use the custom payment sheet and populate the fields in customsheetpaymentinfo to initiate a payment transaction /* * make user's transaction details * the merchant app should send paymentinfo to samsung pay via the applicable samsung pay sdk api method for the operation * being invoked * upon successful user authentication, samsung pay returns the "payment info" structure and the result string * the result string is forwarded to the pg for transaction completion and will vary based on the requirements of the pg used * the code example below illustrates how to populate payment information in each field of the paymentinfo class */ private fun maketransactiondetailswithsheet customsheetpaymentinfo? { val brandlist = brandlist val extrapaymentinfo = bundle val customsheet = customsheet customsheet addcontrol makeamountcontrol return customsheetpaymentinfo builder setmerchantid "123456" setmerchantname "sample merchant" setordernumber "amz007mar" // if you want to enter address, please refer to the javadoc // reference/com/samsung/android/sdk/samsungpay/v2/payment/sheet/addresscontrol html setaddressinpaymentsheet customsheetpaymentinfo addressinpaymentsheet do_not_show setallowedcardbrands brandlist setcardholdernameenabled true setrecurringenabled false setcustomsheet customsheet setextrapaymentinfo extrapaymentinfo build } private fun makeamountcontrol amountboxcontrol { val amountboxcontrol = amountboxcontrol amount_control_id, "usd" amountboxcontrol additem product_item_id, "item", 1199 00, "" amountboxcontrol additem product_tax_id, "tax", 5 0, "" amountboxcontrol additem product_shipping_id, "shipping", 1 0, "" amountboxcontrol setamounttotal 1205 00, amountconstants format_total_price_only return amountboxcontrol } private val brandlist arraylist<spaysdk brand> get { val brandlist = arraylist<spaysdk brand> brandlist add spaysdk brand visa brandlist add spaysdk brand mastercard brandlist add spaysdk brand americanexpress brandlist add spaysdk brand discover return brandlist } request 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 pay when you call the startinapppaywithcustomsheet method, a custom payment sheet is displayed on the merchant app screen from there, the user can select a registered card for payment and change the billing and shipping addresses as necessary the payment sheet lasts for 5 minutes after calling the api if the time limit expires, the transaction fails in the mainactivity class, declare the paymentmanager variable private lateinit var paymentmanager paymentmanager then, in oncreate , set an onclicklistener method before calling the updatesamsungpaybutton function to trigger the startinapppaywithcustomsheet function when the samsungpaybutton is clicked databinding samsungpaybutton setonclicklistener { startinapppaywithcustomsheet } lastly, create a function to call startinapppaywithcustomsheet method of the paymentmanager class /* * paymentmanager startinapppaywithcustomsheet is a method to request online in-app payment with samsung pay * partner app can use this method to make in-app purchase using samsung pay from their * application with custom payment sheet */ private fun startinapppaywithcustomsheet { paymentmanager = paymentmanager applicationcontext, partnerinfo paymentmanager startinapppaywithcustomsheet maketransactiondetailswithsheet , transactioninfolistener } /* * customsheettransactioninfolistener is for listening callback events of online 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 transactioninfolistener paymentmanager customsheettransactioninfolistener = object paymentmanager 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 pay * newly selected cardinfo is passed and partner app can update transaction amount based on new card if needed * call updatesheet method this is mandatory */ paymentmanager updatesheet customsheet } override fun onsuccess response customsheetpaymentinfo, paymentcredential string, extrapaymentdata bundle { /* * you will receive the payloads shown below in paymentcredential parameter * the output paymentcredential structure varies depending on the pg you're using and the integration model direct, indirect with samsung */ toast maketext applicationcontext, "onsuccess ", toast length_short show } // this callback is received when the online payment transaction has failed override fun onfailure errorcode int, errordata bundle? { toast maketext applicationcontext, "onfailure ", toast length_short show } } run the app after building the apk, you can run the sample merchant app and see how it connects to samsung pay upon clicking the button at the bottom of the screen to thoroughly test the sample app, you must add at least one card to the samsung pay app you're done! congratulations! you have successfully achieved the goal of this code lab now, you can integrate in-app payment with your app by yourself! if you face any trouble, you may download this file in-app payment complete code 2 26 mb to learn more about developing apps for samsung pay devices, visit developer samsung com/pay
Develop Samsung Blockchain
docsamsung blockchain keystore api flow and use cases the following are api flow charts and use cases that describe when and how samsung blockchain keystore apis can be implemented use case 1 get the address to link to your android app use case 2 sign a cryptocurrency transaction use case 1 get the address to link to your android app the most common use case of checking the status of samsung blockchain keystore and linking the user’s address to your android app includes the following steps in your android app, call scwservice getinstance if the returned value is an instance and not null, then it means samsung blockchain keystore is supported on the device however, if null is returned, the user must use a different keystore call getkeystoreapilevel api to see if the current samsung blockchain keystore is being used properly and supports the features that your android app is currently aiming for if the required api level is higher than the current samsung blockchain keystore level, users are directed to samsung blockchain keystore app page in galaxy store through the provided deeplink to update check if a user has set up the samsung blockchain keystore and is ready to use it by calling getseedhash api if the seed hash value in string is zero length, this means the user has not set up samsung blockchain keystore yet hence, your app will need to guide the user to jump to samsung blockchain keystore via deeplink to either create or import a wallet if the getseedhash api returned value is not zero-length, it means that the user has successfully set up samsung blockchain keystore if there is a previously saved or cached seed hash value, compare the two seed hash values if those two values are not equal, nor if there is no such saved cached seed hash value, then the address has to be checked again if the seed hash value has been changed, it means the root seed has been changed as well, meaning the address that your android app was linked to may no longer be the same address call getaddresslist api to get a list of addresses that corresponds to the hd paths given as input parameter of getaddresslist api function developers should store the seed hash value and the user’s address for further reference the address can be used as a user’s account to link to your android app developers can check balances and transaction details with the saved user’s address users can jump to samsung blockchain keystore settings page via deeplink in the settings page, users can manage authentication methods, such as changing pin or setting up a fingerprint, checking recovery phrase, reading notices, checking app information, asking questions, or even removing samsung blockchain keystore other options, such as checking whether there is a mandatory app update checkformandatoryappupdate api or which coins are supported in the current version getsupportedcoins api can also be implemented use case 2 signing a cryptocurrency transaction samsung blockchain keystore can be utilized to sign a cryptocurrency transaction, such as ethereum by implementing the following steps follow steps 1-4 found in use case 1 get address to link to your android app your android app creates an unsigned transaction, and requests samsung blockchain keystore to sign the transaction via apis like signethtransaction or signethpersonalmessage then the user will see a transaction confirmation page from samsung blockchain keystore app once the user confirms the transaction with pin or biometrics authentication, like fingerprint, samsung blockchain keystore signs a transaction with the private key derived from the root seed stored safely in the secure file system when samsung blockchain keystore returns the signed transaction, your app can submit or send the signed transaction to the main network of each cryptocurrency
Develop Samsung Pay
apioverview package class tree index help package com samsung android sdk samsungpay v2 class spaysdk java lang object com samsung android sdk samsungpay v2 spaysdk direct known subclasses cardmanager, paymentmanager public abstract class spaysdk extends object this class allows to define samsung pay sdk information, common error codes, and constants since api level 1 1 nested class summary nested classes modifier and type class description static enum spaysdk brand this enumeration provides sdk supported card brands such as american express, mastercard, visa, discover, china unionpay, octopus, eci, pagobancomat, mada and elo static enum spaysdk servicetype this enumeration provides service types partners must set their service type in the partnerinfo when they call any apis static enum spaysdk transactiontype this value is specifically supported for mada tokens and will not apply to other token types field summary fields modifier and type field description static final string common_status_table this table shows the status codes used commonly status bundle keys bundle values spay_not_supported 0 extra_error_reason error_device_not_samsung -350 error_spay_pkg_not_found -351 error_spay_sdk_service_not_available -352 error_device_integrity_check_fail -353 error_spay_app_integrity_check_fail -360 error_android_platform_check_fail -361 spay_not_ready 1 extra_error_reason error_spay_setup_not_completed -356 error_spay_app_need_to_update -357 error_spay_internal -1 extra_error_reason error_server_internal -311 n/a n/a error_not_allowed -6 extra_error_reason error_invalid_parameter -12 error_sdk_not_supported_for_this_region -300 error_service_id_invalid -301 error_service_unavailable_for_this_region -302 error_partner_app_signature_mismatch -303 error_partner_app_version_not_supported -304 error_partner_app_blocked -305 error_user_not_registered_for_debug -306 error_service_not_approved_for_release -307 error_partner_not_approved -308 error_unauthorized_request_type -309 error_expired_or_invalid_debug_key -310 error_missing_information -354 error_unable_to_verify_caller -359 error_invalid_parameter -12 n/a n/a error_no_network -21 n/a n/a error_server_no_response -22 n/a n/a error_partner_info_invalid -99 extra_error_reason error_partner_sdk_api_level -10 error_partner_service_type -11 error_partner_sdk_version_not_allowed -358 error_initiation_fail -103 n/a n/a spay_not_allowed_temporally 3 extra_error_reason error_spay_connected_with_external_display -605 error_spay_fmm_lock -604 n/a n/a paymentmanager error_making_sheet_failed -115 n/a n/a static final string cryptogram_type_icc key to represent the icc cryptogram type of mastercard static final string cryptogram_type_ucaf key to represent the ucaf cryptogram type of mastercard static final string device_id key to represent unique device id static final string device_type_gear device type is gear static final string device_type_phone device type is phone static final int error_android_platform_check_fail this error indicates that android platform version check has failed for in-app payment, the samsung pay sdk requires android 6 0 m android api level 23 or later versions of the android os this is returned as extra_error_reason for spay_not_supported error static final int error_device_integrity_check_fail this error indicates that device integrity check has failed this is returned as extra_error_reason for spay_not_supported error static final int error_device_not_samsung this error indicates that the device is not a samsung device this is returned as extra_error_reason for spay_not_supported error static final int error_duplicated_sdk_api_called this error indicates that duplicate api called by partner static final int error_expired_or_invalid_debug_key this error indicates that debug key is invalid or expired this is returned as extra_error_reason for error_not_allowed error for example, if the partner app uses expired debug-api-key, then the partner app verification will be failed static final int error_initiation_fail this error indicates that session initiation or service binding has failed for example, if the service connection with samsung pay was not successful static final int error_invalid_parameter this error indicates that requested operation contains invalid parameter or invalid bundle key/value static final int error_missing_information this error indicates that some information of partner is missing this error code is returned as an extra_error_reason of error_not_allowed error for example, if the partner app does not deliver a required information to samsung pay to get the wallet information, then samsung pay will send this error to partner app also if the partner does not define the issuer name in samsung pay developer portal, samsung pay will send this error to partner app static final int error_no_network this error indicates that samsung pay is unable to connect to the server since there is no network for example, partner app tries to verify with server while network is not connected static final int error_none this error indicates that requested operation is success with no error static final int error_not_allowed this error indicates that requested operation is not allowed for example, partner app verification has failed in samsung pay server static final int error_not_found this error indicates that given card id is not found in samsung pay static final int error_not_supported this error indicates that requested operation is not supported in samsung pay static final int error_partner_app_blocked this error indicates that partner app version is removed/blocked by the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is blocked, then the partner app verification will be failed static final int error_partner_app_signature_mismatch this error indicates that the app signature is different from the one registered from samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if different signature is used for signing apk, the partner app verification will be failed checking signature logic will be activated in case debug mode is "n" static final int error_partner_app_version_not_supported this error indicates that app version is not supported by samsung pay this is returned as extra_error_reason for error_not_allowed error for example, if the version registered from developer portal is higher than current version or no any version registered , then the partner app verification will be failed static final int error_partner_info_invalid this error indicates that partner information is invalid for example, partner app is using sdk version not allowed, invalid service type, wrong api level, and so on static final int error_partner_not_approved this error indicates that partner registration is not done on the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is submitted but not approved, then the partner app verification will be failed static final int error_partner_sdk_api_level this error indicates that sdk api level is missing or invalid partner must set valid api level in the androidmanifest file static final int error_partner_sdk_version_not_allowed this error indicates that the partner app is using samsung pay sdk not allowed this is returned as extra_error_reason for error_partner_info_invalid error static final int error_partner_service_type this error indicates that the service type is invalid partner must set valid service type in partnerinfo when calling apis this is returned as extra_error_reason for spay_not_ready error static final int error_registration_fail this error indicates that the card provisioning has failed static final int error_sdk_not_supported_for_this_region this error indicates that the samsung pay sdk is not supported in particular region this is returned as extra_error_reason for error_not_allowed error for example, if the device is from the country that samsung pay sdk is not supported, then the partner app verification will be failed static final int error_server_internal this error indicates that server fails to proceed request due to unknown internal error this is returned as extra_error_reason for error_spay_internal error for example, if the server error occurred while the partner verification is going on, then the partner app verification will be failed static final int error_server_no_response this error indicates that server did not respond to the samsung pay request static final int error_service_id_invalid this error indicates that service id is not registered with the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if invalid service id was used in partner app, then the partner app verification will be failed static final int error_service_not_approved_for_release this error indicates that service version is not approved for release by the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is not registered for release mode, then the partner app verification will be failed static final int error_service_unavailable_for_this_region this error indicates that sdk support is not available for partner's service in particular region static final int error_spay_app_integrity_check_fail this error indicates that samsung pay app integrity check has failed this is returned as extra_error_reason for spay_not_supported error static final int error_spay_app_need_to_update this error indicates that the samsung pay should be updated partner app need to ask user to update samsung pay app static final int error_spay_connected_with_external_display this error indicates that device is connected with an external display due to security reason, samsung pay cannot be launched at this moment in this case, partner can guide user to disconnect any external display if connected static final int error_spay_fmm_lock this error indicates that device is locked due to fmm find my mobile partner app needs to ask user to unlock the samsung pay app static final int error_spay_internal this error indicates that internal error has occurred while the requested operation is going on static final int error_spay_pkg_not_found this error indicates that the samsung pay application is not on the device this is returned as extra_error_reason for spay_not_supported error this could mean that the device does not support samsung pay static final int error_spay_sdk_service_not_available this error indicates that sdk service is not available on this device this is returned as extra_error_reason for spay_not_supported error static final int error_spay_setup_not_completed this error indicates that the samsung pay setup was not completed partner app need to ask user to set up samsung pay app static final int error_unable_to_verify_caller this error indicates that samsung pay is unable to verify partner app at this moment this is returned as extra_error_reason for error_not_allowed error for example, samsung pay tried to connect to the server and validate partner id, but the device does not have the network connectivity static final int error_unauthorized_request_type this error indicates that the partner is not authorized for this request type such as payment or enrollment this is returned as extra_error_reason for error_not_allowed error for example, if the merchant app calls enrollment api, then the partner app verification will be failed static final int error_user_canceled this error indicates that user has cancelled before completing the requested operation for example, user taps the cancel or back key on the payment sheet static final int error_user_not_registered_for_debug this error indicates that user account is not registered for using debug mode on the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is in debug mode but the samsung account is not registered for the debug-api-key, then the partner app verification will be failed static final string extra_accept_combo_card key to represent that a merchant accepts combo card partner can use this key to let customers to choose debit/credit in case of combo card static final string extra_card_type key to represent card type the possible values are card card_type_credit_debit card card_type_credit card card_type_debit card card_type_gift card card_type_loyalty card card_type_transit static final string extra_country_code key to represent country code device country code iso 3166-1 alpha-2 static final string extra_cpf_holder_name key to get cpf holder name in extra payment data when partner requests cpf by extra_require_cpf key, the samsung pay would bundle cpf information in the extrapaymentdata parameter of paymentmanager customsheettransactioninfolistener onsuccess com samsung android sdk samsungpay v2 payment customsheetpaymentinfo, java lang string, android os bundle callback static final string extra_cpf_number key to get cpf number in extra payment data when partner requests cpf by extra_require_cpf key, the samsung pay would bundle cpf information in the extrapaymentdata parameter of paymentmanager customsheettransactioninfolistener onsuccess com samsung android sdk samsungpay v2 payment customsheetpaymentinfo, java lang string, android os bundle callback static final string extra_cryptogram_type key to represent the dsrp digital secure remote payments cryptogram type of mastercard static final string extra_device_card_limit_reached key to represent the maximum registered card number has reached or not static final string extra_device_type key to represent type of the device mobile or gear static final string extra_error_reason key to represent extra error reasons static final string extra_error_reason_message key to represent extra error reason messages static final string extra_issuer_name key to represent name of the issuer this key can be used in the bundle for partnerinfo string, bundle static final string extra_issuer_pkgname key to represent package name of the issuer app on android static final string extra_last4_dpan key to represent the last four digits of digitalized personal identification number dpan static final string extra_last4_fpan key to represent the last four digits of funding personal identification number fpan static final string extra_member_id key to represent member id of the issuer this is for korean issuers only static final string extra_merchant_ref_id key to set/get merchant reference id beyond marketplace app or service i e static final string extra_online_transaction_type static final string extra_partner_name key to represent name of the partner app this key can be used in the bundle for partnerinfo string, bundle static final string extra_request_id key to represent request id when a request is failed, tr will send this key to partner app static final string extra_require_cpf key to represent that a partner requires cpf partner can use this key to ask samsung pay to show cpf information in the payment sheet static final string extra_resolved_1 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay static final string extra_resolved_2 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay static final string extra_resolved_3 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay static final string extra_resolved_4 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay static final string extra_resolved_5 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay static final string extra_resolved_6 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay static final string extra_resolved_7 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay static final string partner_service_type key to represent unique service type this key must be set in the bundle for partnerinfo string, bundle static final int spay_has_no_transit_card this code is returned if samsung pay doesn't have a registered transit card this is for korean issuers only static final int spay_has_transit_card this code is returned if samsung pay has a registered transit card this is for korean issuers only static final int spay_not_allowed_temporally samsung pay is not allowed temporally refer extra reason delivered with extra_error_reason static final int spay_not_ready samsung pay is not completely activated usually, this status code is returned if the user did not complete the mandatory update or if the user is not signed in with the samsung account yet in this case, partner app can call samsungpay activatesamsungpay api to launch samsung pay or can call samsungpay gotoupdatepage api to update samsung pay app static final int spay_not_supported samsung pay is not supported on this device usually, this status code is returned if the device is not compatible to run samsung pay or if the samsung pay app is not installed static final int spay_ready samsung pay is activated and ready to use usually, this status code is returned after user completes all the mandatory updates and is signed in static final string wallet_dm_id key to represent unique device management id static final string wallet_user_id key to represent user's wallet id method summary all methodsstatic methodsconcrete methods modifier and type method description static int getversioncode returns the version code of the samsung pay sdk static string getversionname returns the version name of the samsung pay sdk methods inherited from class java lang object equals, getclass, hashcode, notify, notifyall, tostring, wait, wait, wait field details error_none public static final int error_none this error indicates that requested operation is success with no error see also constant field values error_spay_internal public static final int error_spay_internal this error indicates that internal error has occurred while the requested operation is going on see also constant field values error_not_supported public static final int error_not_supported this error indicates that requested operation is not supported in samsung pay see also constant field values error_not_found public static final int error_not_found this error indicates that given card id is not found in samsung pay see also constant field values error_not_allowed public static final int error_not_allowed this error indicates that requested operation is not allowed for example, partner app verification has failed in samsung pay server see also constant field values error_user_canceled public static final int error_user_canceled this error indicates that user has cancelled before completing the requested operation for example, user taps the cancel or back key on the payment sheet see also constant field values error_partner_sdk_api_level public static final int error_partner_sdk_api_level this error indicates that sdk api level is missing or invalid partner must set valid api level in the androidmanifest file minimum possible version is 1 4 also if the partner set the values defined in higher api level, samsung pay will send this error to partner app this is returned as extra_error_reason for error_partner_info_invalid error since api level 1 4 see also constant field values error_partner_service_type public static final int error_partner_service_type this error indicates that the service type is invalid partner must set valid service type in partnerinfo when calling apis this is returned as extra_error_reason for spay_not_ready error since api level 1 4 see also constant field values error_invalid_parameter public static final int error_invalid_parameter this error indicates that requested operation contains invalid parameter or invalid bundle key/value since api level 2 3 see also constant field values error_no_network public static final int error_no_network this error indicates that samsung pay is unable to connect to the server since there is no network for example, partner app tries to verify with server while network is not connected see also constant field values error_server_no_response public static final int error_server_no_response this error indicates that server did not respond to the samsung pay request see also constant field values error_partner_info_invalid public static final int error_partner_info_invalid this error indicates that partner information is invalid for example, partner app is using sdk version not allowed, invalid service type, wrong api level, and so on since api level 2 5 see also constant field values error_initiation_fail public static final int error_initiation_fail this error indicates that session initiation or service binding has failed for example, if the service connection with samsung pay was not successful see also constant field values error_registration_fail public static final int error_registration_fail this error indicates that the card provisioning has failed since api level 1 2 see also constant field values error_duplicated_sdk_api_called public static final int error_duplicated_sdk_api_called this error indicates that duplicate api called by partner since api level 2 1 see also constant field values error_sdk_not_supported_for_this_region public static final int error_sdk_not_supported_for_this_region this error indicates that the samsung pay sdk is not supported in particular region this is returned as extra_error_reason for error_not_allowed error for example, if the device is from the country that samsung pay sdk is not supported, then the partner app verification will be failed see also constant field values error_service_id_invalid public static final int error_service_id_invalid this error indicates that service id is not registered with the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if invalid service id was used in partner app, then the partner app verification will be failed since api level 2 5 see also constant field values error_service_unavailable_for_this_region public static final int error_service_unavailable_for_this_region this error indicates that sdk support is not available for partner's service in particular region since api level 2 5 see also constant field values error_partner_app_signature_mismatch public static final int error_partner_app_signature_mismatch this error indicates that the app signature is different from the one registered from samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if different signature is used for signing apk, the partner app verification will be failed checking signature logic will be activated in case debug mode is "n" since api level 2 9 see also constant field values error_partner_app_version_not_supported public static final int error_partner_app_version_not_supported this error indicates that app version is not supported by samsung pay this is returned as extra_error_reason for error_not_allowed error for example, if the version registered from developer portal is higher than current version or no any version registered , then the partner app verification will be failed since api level 2 9 see also constant field values error_partner_app_blocked public static final int error_partner_app_blocked this error indicates that partner app version is removed/blocked by the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is blocked, then the partner app verification will be failed since api level 2 9 see also constant field values error_user_not_registered_for_debug public static final int error_user_not_registered_for_debug this error indicates that user account is not registered for using debug mode on the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is in debug mode but the samsung account is not registered for the debug-api-key, then the partner app verification will be failed see also constant field values error_service_not_approved_for_release public static final int error_service_not_approved_for_release this error indicates that service version is not approved for release by the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is not registered for release mode, then the partner app verification will be failed since api level 2 5 see also constant field values error_partner_not_approved public static final int error_partner_not_approved this error indicates that partner registration is not done on the samsung pay developers this is returned as extra_error_reason for error_not_allowed error for example, if the partner app is submitted but not approved, then the partner app verification will be failed see also constant field values error_unauthorized_request_type public static final int error_unauthorized_request_type this error indicates that the partner is not authorized for this request type such as payment or enrollment this is returned as extra_error_reason for error_not_allowed error for example, if the merchant app calls enrollment api, then the partner app verification will be failed see also constant field values error_expired_or_invalid_debug_key public static final int error_expired_or_invalid_debug_key this error indicates that debug key is invalid or expired this is returned as extra_error_reason for error_not_allowed error for example, if the partner app uses expired debug-api-key, then the partner app verification will be failed see also constant field values error_server_internal public static final int error_server_internal this error indicates that server fails to proceed request due to unknown internal error this is returned as extra_error_reason for error_spay_internal error for example, if the server error occurred while the partner verification is going on, then the partner app verification will be failed since api level 2 5 see also constant field values error_device_not_samsung public static final int error_device_not_samsung this error indicates that the device is not a samsung device this is returned as extra_error_reason for spay_not_supported error see also constant field values error_spay_pkg_not_found public static final int error_spay_pkg_not_found this error indicates that the samsung pay application is not on the device this is returned as extra_error_reason for spay_not_supported error this could mean that the device does not support samsung pay see also constant field values error_spay_sdk_service_not_available public static final int error_spay_sdk_service_not_available this error indicates that sdk service is not available on this device this is returned as extra_error_reason for spay_not_supported error see also constant field values error_device_integrity_check_fail public static final int error_device_integrity_check_fail this error indicates that device integrity check has failed this is returned as extra_error_reason for spay_not_supported error see also constant field values error_spay_app_integrity_check_fail public static final int error_spay_app_integrity_check_fail this error indicates that samsung pay app integrity check has failed this is returned as extra_error_reason for spay_not_supported error see also constant field values error_android_platform_check_fail public static final int error_android_platform_check_fail this error indicates that android platform version check has failed for in-app payment, the samsung pay sdk requires android 6 0 m android api level 23 or later versions of the android os this is returned as extra_error_reason for spay_not_supported error since api level 1 5 see also constant field values error_missing_information public static final int error_missing_information this error indicates that some information of partner is missing this error code is returned as an extra_error_reason of error_not_allowed error for example, if the partner app does not deliver a required information to samsung pay to get the wallet information, then samsung pay will send this error to partner app also if the partner does not define the issuer name in samsung pay developer portal, samsung pay will send this error to partner app see also constant field values error_spay_setup_not_completed public static final int error_spay_setup_not_completed this error indicates that the samsung pay setup was not completed partner app need to ask user to set up samsung pay app if user agrees, call samsungpay activatesamsungpay api this is returned as extra_error_reason for spay_not_ready error see also constant field values error_spay_app_need_to_update public static final int error_spay_app_need_to_update this error indicates that the samsung pay should be updated partner app need to ask user to update samsung pay app if user agrees, call samsungpay gotoupdatepage api this is returned as extra_error_reason for spay_not_ready error since api level 1 1 see also constant field values error_partner_sdk_version_not_allowed public static final int error_partner_sdk_version_not_allowed this error indicates that the partner app is using samsung pay sdk not allowed this is returned as extra_error_reason for error_partner_info_invalid error since api level 2 5 see also constant field values error_unable_to_verify_caller public static final int error_unable_to_verify_caller this error indicates that samsung pay is unable to verify partner app at this moment this is returned as extra_error_reason for error_not_allowed error for example, samsung pay tried to connect to the server and validate partner id, but the device does not have the network connectivity see also constant field values error_spay_fmm_lock public static final int error_spay_fmm_lock this error indicates that device is locked due to fmm find my mobile partner app needs to ask user to unlock the samsung pay app if user agrees, call samsungpay activatesamsungpay to unlock the samsung pay app since api level 2 1 see also samsungpay activatesamsungpay constant field values error_spay_connected_with_external_display public static final int error_spay_connected_with_external_display this error indicates that device is connected with an external display due to security reason, samsung pay cannot be launched at this moment in this case, partner can guide user to disconnect any external display if connected since api level 2 7 see also constant field values spay_not_supported public static final int spay_not_supported samsung pay is not supported on this device usually, this status code is returned if the device is not compatible to run samsung pay or if the samsung pay app is not installed since api level 1 1 see also constant field values spay_not_ready public static final int spay_not_ready samsung pay is not completely activated usually, this status code is returned if the user did not complete the mandatory update or if the user is not signed in with the samsung account yet in this case, partner app can call samsungpay activatesamsungpay api to launch samsung pay or can call samsungpay gotoupdatepage api to update samsung pay app since api level 1 1 see also constant field values spay_ready public static final int spay_ready samsung pay is activated and ready to use usually, this status code is returned after user completes all the mandatory updates and is signed in since api level 1 1 see also constant field values spay_not_allowed_temporally public static final int spay_not_allowed_temporally samsung pay is not allowed temporally refer extra reason delivered with extra_error_reason since api level 2 7 see also constant field values spay_has_transit_card public static final int spay_has_transit_card this code is returned if samsung pay has a registered transit card this is for korean issuers only since api level 2 8 see also constant field values spay_has_no_transit_card public static final int spay_has_no_transit_card this code is returned if samsung pay doesn't have a registered transit card this is for korean issuers only since api level 2 8 see also constant field values device_type_phone public static final string device_type_phone device type is phone since api level 1 1 see also constant field values device_type_gear public static final string device_type_gear device type is gear since api level 1 1 see also constant field values extra_last4_dpan public static final string extra_last4_dpan key to represent the last four digits of digitalized personal identification number dpan since api level 1 1 see also constant field values extra_last4_fpan public static final string extra_last4_fpan key to represent the last four digits of funding personal identification number fpan since api level 1 1 see also constant field values extra_issuer_name public static final string extra_issuer_name key to represent name of the issuer this key can be used in the bundle for partnerinfo string, bundle since api level 1 1 see also constant field values extra_issuer_pkgname public static final string extra_issuer_pkgname key to represent package name of the issuer app on android since api level 1 1 see also constant field values extra_partner_name public static final string extra_partner_name key to represent name of the partner app this key can be used in the bundle for partnerinfo string, bundle since api level 2 6 see also constant field values extra_error_reason public static final string extra_error_reason key to represent extra error reasons since api level 1 1 see also constant field values extra_error_reason_message public static final string extra_error_reason_message key to represent extra error reason messages since api level 2 9 see also constant field values extra_card_type public static final string extra_card_type key to represent card type the possible values are card card_type_credit_debit card card_type_credit card card_type_debit card card_type_gift card card_type_loyalty card card_type_transit since api level 1 1 see also constant field values extra_device_type public static final string extra_device_type key to represent type of the device mobile or gear the possible values are device_type_phone device_type_gear since api level 1 1 see also constant field values extra_member_id public static final string extra_member_id key to represent member id of the issuer this is for korean issuers only since api level 1 1 see also constant field values extra_country_code public static final string extra_country_code key to represent country code device country code iso 3166-1 alpha-2 since api level 1 1 see also constant field values extra_device_card_limit_reached public static final string extra_device_card_limit_reached key to represent the maximum registered card number has reached or not since api level 1 1 see also constant field values extra_cryptogram_type public static final string extra_cryptogram_type key to represent the dsrp digital secure remote payments cryptogram type of mastercard cryptogram type is supported by mastercard only, can be put as an optional value in extrapaymentinfo of customsheetpaymentinfo since api level 2 4 see also constant field values extra_resolved_1 public static final string extra_resolved_1 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay since api level 2 4 see also constant field values extra_resolved_2 public static final string extra_resolved_2 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay since api level 2 4 see also constant field values extra_resolved_3 public static final string extra_resolved_3 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay since api level 2 4 see also constant field values extra_resolved_4 public static final string extra_resolved_4 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay since api level 2 4 see also constant field values extra_resolved_5 public static final string extra_resolved_5 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay since api level 2 4 see also constant field values extra_resolved_6 public static final string extra_resolved_6 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay since api level 2 4 see also constant field values extra_resolved_7 public static final string extra_resolved_7 key to represent additional data partner can use this key to put tagged data to a bundle before sending to samsung pay since api level 2 4 see also constant field values extra_request_id public static final string extra_request_id key to represent request id when a request is failed, tr will send this key to partner app request id would be helpful for debugging a failed request between partner and tr since api level 2 5 see also constant field values cryptogram_type_ucaf public static final string cryptogram_type_ucaf key to represent the ucaf cryptogram type of mastercard ucaf cryptogram type is supported by mastercard only, can be put as an optional value in extrapaymentinfo of customsheetpaymentinfo ucaf is a default cryptogram type if not specified in the extrapaymentinfo bundle since api level 2 4 see also constant field values cryptogram_type_icc public static final string cryptogram_type_icc key to represent the icc cryptogram type of mastercard icc cryptogram type is supported by mastercard only, can be put as an optional value in extrapaymentinfo of customsheetpaymentinfo since api level 2 4 see also constant field values extra_accept_combo_card public static final string extra_accept_combo_card key to represent that a merchant accepts combo card partner can use this key to let customers to choose debit/credit in case of combo card it can be put as an optional value in extrapaymentinfo of customsheetpaymentinfo the possible value is the boolean since api level 2 9 see also constant field values extra_require_cpf public static final string extra_require_cpf key to represent that a partner requires cpf partner can use this key to ask samsung pay to show cpf information in the payment sheet it can be put as an optional value in extrapaymentinfo of customsheetpaymentinfo the possible value is the boolean this is for brazil partners only since api level 2 11 see also constant field values extra_cpf_holder_name public static final string extra_cpf_holder_name key to get cpf holder name in extra payment data when partner requests cpf by extra_require_cpf key, the samsung pay would bundle cpf information in the extrapaymentdata parameter of paymentmanager customsheettransactioninfolistener onsuccess com samsung android sdk samsungpay v2 payment customsheetpaymentinfo, java lang string, android os bundle callback since api level 2 11 see also constant field values extra_cpf_number public static final string extra_cpf_number key to get cpf number in extra payment data when partner requests cpf by extra_require_cpf key, the samsung pay would bundle cpf information in the extrapaymentdata parameter of paymentmanager customsheettransactioninfolistener onsuccess com samsung android sdk samsungpay v2 payment customsheetpaymentinfo, java lang string, android os bundle callback since api level 2 11 see also constant field values extra_merchant_ref_id public static final string extra_merchant_ref_id key to set/get merchant reference id beyond marketplace app or service i e bixby when marketplace apps request in-app payment, they can set merchant reference id so that samsung pay app can get detail information about the merchant using the id since api level 2 11 see also constant field values extra_online_transaction_type public static final string extra_online_transaction_type see also constant field values wallet_user_id public static final string wallet_user_id key to represent user's wallet id since api level 1 2 see also constant field values device_id public static final string device_id key to represent unique device id since api level 1 2 see also constant field values wallet_dm_id public static final string wallet_dm_id key to represent unique device management id since api level 1 2 see also constant field values partner_service_type public static final string partner_service_type key to represent unique service type this key must be set in the bundle for partnerinfo string, bundle since api level 1 4 see also constant field values common_status_table public static final string common_status_table this table shows the status codes used commonly status bundle keys bundle values spay_not_supported 0 extra_error_reason error_device_not_samsung -350 error_spay_pkg_not_found -351 error_spay_sdk_service_not_available -352 error_device_integrity_check_fail -353 error_spay_app_integrity_check_fail -360 error_android_platform_check_fail -361 spay_not_ready 1 extra_error_reason error_spay_setup_not_completed -356 error_spay_app_need_to_update -357 error_spay_internal -1 extra_error_reason error_server_internal -311 n/a n/a error_not_allowed -6 extra_error_reason error_invalid_parameter -12 error_sdk_not_supported_for_this_region -300 error_service_id_invalid -301 error_service_unavailable_for_this_region -302 error_partner_app_signature_mismatch -303 error_partner_app_version_not_supported -304 error_partner_app_blocked -305 error_user_not_registered_for_debug -306 error_service_not_approved_for_release -307 error_partner_not_approved -308 error_unauthorized_request_type -309 error_expired_or_invalid_debug_key -310 error_missing_information -354 error_unable_to_verify_caller -359 error_invalid_parameter -12 n/a n/a error_no_network -21 n/a n/a error_server_no_response -22 n/a n/a error_partner_info_invalid -99 extra_error_reason error_partner_sdk_api_level -10 error_partner_service_type -11 error_partner_sdk_version_not_allowed -358 error_initiation_fail -103 n/a n/a spay_not_allowed_temporally 3 extra_error_reason error_spay_connected_with_external_display -605 error_spay_fmm_lock -604 n/a n/a paymentmanager error_making_sheet_failed -115 n/a n/a see also constant field values method details getversioncode public static int getversioncode returns the version code of the samsung pay sdk returns sdk version code since api level 1 1 getversionname @nonnull public static string getversionname returns the version name of the samsung pay sdk returns sdk version name since api level 1 1 samsung electronics samsung pay sdk 2 22 00 - nov 19 2024
Learn Code Lab
codelabcreate an android automotive operating system aaos app with payments via samsung checkout objective create a shopping app for android automotive os aaos , which uses templates from aaos and ignite store, and processes payments via the ignite payment sdk powered by samsung checkout partnership request to use the ignite payment sdk and have access to development tools and resources, such as ignite aaos emulators, you must become an official partner once done, you can fully utilize this code lab you can learn more about the partnership process by visiting the ignite store developer portal overview android automotive os android automotive os aaos is a base android platform that runs directly on the car and is deeply integrated with the underlying vehicle hardware unlike the android auto platform, users can download compatible apps with aaos directly into their cars, without needing a phone, and utilize an interface specifically designed for the car screen aaos can run both system and third-party android applications as aaos is not a fork and shares the same codebase as android for mobile devices, developers can easily adapt existing smartphone apps to function on aaos the diagram below illustrates the architecture of aaos at the hardware abstraction layer hal level, aaos incorporates additional components such as the vehicle hal vhal , exterior view system evs , and broadcast radio br to handle vehicle properties and connectivity at the framework level, car service and webview modules are included at the application level, the main system applications include car system ui, car launcher, and car input method editor ime additionally, car media and automotive host are incorporated as system apps third-party apps are classified into three categories audio media, car templated, and parked car templates the car templated apps use templates specified by the car app library, which are rendered by the automotive host, customized by original equipment manufacturers oem the library consists of approximately 10 templates list, grid, message, pane, navigation and is utilized in both android auto aa and android automotive os aaos apps to target aaos, you must incorporate an additional app-automotive library that injects the carappactivity into the app the carappactivity needs to be included in the manifest and can be set as distractionoptimized upon launching the application, the carappactivity provides a surface that is employed by the automotive host to render the template models additionally, on the harman ignite store, you can optionally integrate the ignite-car-app-lib, which adds supplementary templates such as explore, listdetails, routeoverview, and poistreaming harman ignite store the harman ignite store is a white-labeled and modular aaos-based automotive app store by connecting app developers with car manufacturers, harman creates unique in-vehicle experiences the ignite store has a rich app ecosystem with unique content, growth opportunities, and long-term partnerships it facilitates future-proof monetization with a payments api powered by samsung checkout after registering at the ignite store developer portal, developers can submit their apps for certification and testing by harman upon approval from the oem, the developer can proceed with publishing their app comprehensive developer documentation and tools are available to support app developers throughout the development process payments api the ignite store comes enabled with payment features empowering developers to monetize their apps developers are now able to offer their apps as paid apps the payment sdk exposes apis for goods and services, in-app purchases, and subscriptions developers can also integrate their own payment service providers psps , to sell goods or services, and receive the money directly in their bank account for a frictionless in-car payment experience, ignite provides a dedicated digital wallet app for end-users to securely store their credit card information the payment processor is powered by the industry proven samsung checkout the developer portal provides additional documentation to allow developers to access ignite aaos emulators, vim3, tablet or cuttlefish ignite images, and additional guidelines set up your environment you will need the following ignite aaos system image running on android emulator or on reference devices android studio latest version recommended java se development kit jdk 11 or later sample code here is a sample code for you to start coding in this code lab download it and start your learning experience! aaos ignite shopping app sample code 11 7 mb prepare your ignite aaos emulator add the ignite aaos emulator to your android studio by following the guide provided in the ignite store developer console open the device manager and start the emulator configure the emulator to use fake data for payments, as instructed in the ignite store developer console under the offline mode tab in the payment sdk section the sample app requires navigation from point a starting location to point b destination location the destination addresses are predefined and near san jose mcenery convention center to shorten the distance between two locations, follow the steps below to set the starting location a open the extended controls in the emulator panel b go to location, search for a location near the destination location, and click set location next, in the emulator, go to the ignite navigation app's settings and enable the following enable navigation simulation enable mock location provider go to settings > system > developer options > location and set ignite navigation as mock location app start your project after downloading the sample code containing the project files, open your android studio and click open to open an existing project locate the downloaded android project igniteautomotivepaymentssdc202488 from the directory and click ok check the ignite payment sdk dependency verify that the ignite payment sdk library is included in the dependencies section of the module's build gradle file dependencies { implementation files 'libs/ignite-payment-sdk-3 13 0 24030417-0-snapshot aar' } add payment permission next, go to the manifests folder and, in the androidmanifest xml file, include the payment_request permission to perform in-app purchases <uses-permission android name="com harman ignite permission payment_request" /> this ensures that the app has the necessary permissions to perform transactions and handle sensitive financial data show the payment screen when an item is added to the cart, the shopping cart screen displays the select store button, selected pickup store address, total amount to pay, and details of each item added the screen also includes the pay button go to kotlin + java > com harman ignite pickupstore > screens > shoppingcartscreen kt in the docheckout function, use the car app's screenmanager to navigate to the payment screen from the shopping cart screen after clicking the pay button getscreenmanager push paymentscreen carcontext, session notethe screenmanager class provides a screen stack you can use to push screens that can be popped automatically when the user selects a back button in the car screen or uses the hardware back button available in some cars instantiate the ignite payment client the ignite payment api provides a singleton class called ignitepaymentclientsingleton, which enables performing and tracking transactions navigate to the paymentscreen kt file and instantiate the ignite payment client private val mipc = ignitepaymentclientsingleton getinstance carcontext define the ignite payment transaction callback the ignite payment transaction provides three callback methods onsuccess, oncanceled, and onfailure after each callback, make sure to set the ispaymentfailed variable to track whether a payment is successful or not update the session which owns the shopping cart screen to reflect the status of the payment transaction call the updatetemplate function to invalidate the current template and create a new one with updated information private val mipctcb = object iignitepaymentclienttransactioncallback { override fun onsuccess requestuuid string?, sessionid string?, successmessage string?, paymentadditionalproperties hashmap<string, string>? { log d tag, log_prefix + "onsuccess rid $requestuuid, sid $sessionid, sm $successmessage" cartoast maketext carcontext, "payment successful", cartoast length_short show ispaymentfailed = false session paymentdone requestuuid, sessionid, successmessage updatetemplate } override fun oncanceled requestuuid string?, sessionid string? { log d tag, log_prefix + "oncanceled rid $requestuuid, sid $sessionid" cartoast maketext carcontext, "payment canceled", cartoast length_long show ispaymentfailed = true session paymenterror requestuuid, sessionid, null updatetemplate } override fun onfailure requestuuid string?, sessionid string?, wallererrorcode int, errormessage string { log d tag, log_prefix + "onfailure rid $requestuuid, sid $sessionid, wec $wallererrorcode, em $errormessage" cartoast maketext carcontext, "payment failed", cartoast length_long show ispaymentfailed = true session paymenterror requestuuid, sessionid, errormessage updatetemplate } } define the ignite payment client connection callback the ignite payment client needs to be connected in order to perform a payment request once the client connects successfully, retrieve the names of the shopping cart items and use them to create an order summary afterwards, construct an ignite payment request containing the total amount, currency code, merchant id, and details of the order summary then, initiate the payment process by invoking the readytopay function of the ignite payment client api private val mipccb = iignitepaymentclientconnectioncallback { connected -> log d tag, log_prefix + "onpaymentclientconnected $connected" if connected { val textsummary = session shoppingcart cartitems jointostring ", " { item -> item name } val ipr = ignitepaymentrequest builder setamount session shoppingcart gettotal * 100 setcurrencycode currencycode usd setpaymentoperation paymentoperation purchase setmerchantid constants merchant_id setordersummary ordersummary builder setordersummarybitmapimage bitmapfactory decoderesource carcontext resources, session shoppingcart store largeicon setordersummarylabel1 "${carcontext getstring r string pickupstore_app_title } ${session shoppingcart store title}" setordersummarysublabel1 session shoppingcart store address setordersummarylabel2 textsummary setordersummarysublabel2 carcontext getstring r string pickupstore_payment_sublabel2 build build try { mipc readytopay ipr, mipctcb } catch e exception { log d tag, log_prefix + "payment exception $e" e printstacktrace } catch e error { log d tag, log_prefix + "payment error $e" e printstacktrace } } } start the payment process and go back to previous screen after the transaction next, in the startpayment function, connect the ignite payment client and the connection callback to start the payment process mipc connect mipccb after the transaction is completed, the updatetemplate function refreshes the template used in the payment screen before calling the schedulegoback function modify the schedulegoback function to navigate back to the previous template screen shopping cart you can use the pop method of the screenmanager screenmanager pop start the navigation to the store to collect the paid pickup the shopping cart screen shows the pickup store location, details of the order, and go to store button after a successful payment go to kotlin + java > com harman ignite pickupstore > pickupstoresession kt modify the navigatetostore geofence geofence function to trigger the navigation to the pickup store when the go to store button is clicked you can use the intent carcontext action_navigate with geo schema rfc 5879 data, containing latitude and longitude e g , geo 12 345, 14 8767 to send the intent, use the carcontext startcarapp api call val geouristring = "geo ${geofence latitude},${geofence longitude}" val uri = uri parse geouristring val navintent = intent carcontext action_navigate, uri try { carcontext startcarapp navintent } catch e exception { log e tag, log_prefix + "navigatetostore exception starting navigation" e printstacktrace cartoast maketext carcontext, "failure starting navigation", cartoast length_short show } run the app on ignite aaos emulator run the pickup-store-app on ignite aaos emulator when the app starts for the first time, it requests for user permissions click grant permissions choose allow all the time for location permission and click the return button 4 browse the pickup store catalog and add items to shopping cart open the shopping cart and click pay you can also change the pickup store by clicking select store check the order summary and billing information then, click confirm and pay to process payment after a successful payment, the app returns to shopping cart screen with the updated transaction information click go to store to start the navigation to the store the app displays a notification when the car is near the store click the notification to show a reference qr code to present to the store upon pick up you're done! congratulations! you have successfully achieved the goal of this code lab topic now, you can create an aaos templated app, which supports payments by yourself! if you're having trouble, you may download this file aaos ignite shopping app complete code 11 7 mb learn more by going to the developer console section of the ignite store developer portal
Develop Samsung Internet
docweb payments integration guide overview to help standardize and streamline how payments are done on the web, the worldwide web consortium w3c has introduced a payment request api to provide an interface between a merchant web page and a mobile payment app, like samsung pay, to facilitate payment transactions samsung internet browser leverages the w3c payment request api to support samsung pay as a payment method for web purchases chrome also supports a samsung pay web payment method why integrate samsung pay into your website? samsung pay is accepted at more retail locations than any other mobile payment service available because of its unique ability to transact with newer nfc-supported payment terminals and legacy payment terminals it continues to enjoy the best user reviews among mobile payment apps now available for mobile website integration, samsung pay is secure, easy to set up, simple to use, and pre-installed on all new samsung galaxy-class smartphones when integrated with your website, samsung pay presents your users with a common checkout process that leverages samsung pay’s secure purchase authentication technology, eliminating manual entry or re-entry of card details and shipping destinations checkout is streamlined, conversions are maximized, and the exposure of sensitive data is kept to the absolute minimum simplifying the transaction process the benefits of the new process, certainly from an end-user perspective, is that the previous tedium ― request, authorization, payment, and result ― can now be handled in a single step for the web developer, it entails a single javascript api call for samsung pay users, there’s no change at all in the way a payment card is selected and authenticated after selecting the desired merchandise from the merchant’s web site, the user initiates checkout, selects samsung pay as the preferred payment method, authenticates with a fingerprint or pin, and voila ― payment complete that’s the user experience at its most basic when properly implemented, the api also supports editing the billing/shipping address in samsung pay and selecting a different enrolled card before approving the transaction with a fingerprint scan or entering a pin in terms of convenience, it’s a remote shopper’s dream ― no complicated, input-intensive forms to fill out, no fumbling for a plastic card to enter the account number, card expiration, and security code, and no worrying that someone other than the legitimate cardholder is attempting to make the payment meanwhile, samsung pay’s tokenized payload securely protects the transaction from intercept and replay attacks about this guide intended for web developers with a working knowledge of javascript and json, this guide takes you through the complete process of onboarding as a samsung pay merchant partner, creating/registering the w3c service for your domain, adding the w3c payment request object to your website, then testing and releasing your merchant website offering samsung pay as a payment method let's get started determining your gateway integration mode the api methods for integrating samsung pay with your website depend on the type of payment token your payment gateway pg handles — either gateway tokens or network tokens samsung pay supports requests for both types for instance, if stripe is your pg, you will want to request a gateway token from samsung pay on the other hand, if you’re using first data, you’ll want to request an encrypted network token bundle, for which you handle the token decryption yourself or work with the pg first data in this case to handle decrypting the token bundle the process begins when your merchant website makes a payment request and passes all required information to the browser, which then determines compatibility between the accepted payment methods for your website and the methods apps installed on the target device let’s take a brief look at how each integration mode — gateway token and network token — works with samsung pay gateway token mode although samsung pay doesn’t process the payment, your merchant website will still need to invoke the appropriate payment gateway apis to charge and process the token returned by your pg hence, when samsung pay returns a gateway token from stripe, for example, the recommended flow looks like this user selects samsung pay as the payment method at checkout in the merchant's website 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 samsung-pg interface server returns the payment token to the pg i e , the gateway token it received from the 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 website on the device for display to the user in this mode, samsung pay makes a call to your pg on your behalf and returns a chargeable gateway token network token mode under network token mode, the samsung pay api returns an encrypted network token bundle, which you can then either decrypt yourself or leverage the apis of your pg first data, for example to handle decryption and charge the token user selects samsung pay as the payment method at checkout in the merchant's website 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 website through its pg sdk to simplify integration of network tokens, you can pass the encrypted payload directly to your pg and let it handle decryption in general, decrypting the payload yourself is more complex and involves private key management see your particular pg’s documentation for details once you determine which mode your pg supports, you're ready to register with the portal first, however, there are a number of prerequisites you'll need to satisfy prerequisites registering with the samsung pay developers portal and adapting the appropriate payment request apis for your website in accordance with the guidance contained herein will help to ensure a successful implementation to that end, the following requirements apply release contents minimum samsung pay app version 2 8 xx minimum samsung internet browser version 5 4 minimum chrome browser version 61 supported device models samsung galaxy-class smartphones running minimum version of the wallet app and browser supported payment gateways pgs view the most current list in the portal's payment gateway drop-down menu in service create/edit mode see step 5 under registering your domain for the w3c service registering with the portal through the samsung pay developers portal you can access valuable resources to help you manage the samsung pay features you incorporate into you partner app, including the ability to create multiple samsung pay service groups so you can use different services without the need to create multiple accounts invite co-workers to the portal to help you manage samsung pay features for your website register your website with samsung pay configure your samsung pay w3c service s to create a member account on the samsung pay developers portal open a browser like chrome, go to https //pay samsung com/developers, click sign up and confirm/acknowledge that you accept the samsung pay terms and conditions and understand the privacy policy, then do one of the following a if you already have a valid samsung account, click sign up and enter your samsung account id and password b if you do not have a samsung account, click create a samsung account to create one open the account activation email you receive and click the account activation link if you’re the first samsung pay member of your company to register, select the first option, click next, and complete a company and user profile if, on the other hand, you were given a samsung pay partner id by a co-worker, select the second option — my company is already registered — and enter your company’s partner id in the field provided, then click next after you receive notification by email that your membership is approved, typically within 2 business days, return to https //pay samsung com/developers, click sign in and enter your samsung account id and password for site access as a new member registering your domain for the w3c service your domain is the url associated with your website, whether in test or production the service type specifically associates w3c with your domain once you create the service, you will be prompted to configure the domain you want associated with it to create a new service go to my projects > service management and click create a new service select for test to define the service for initial integration with samsung pay, then click next select w3c mobile web payments as the service type and click next enter a service name and select “united states” as the service country select a payment gateway from the list of supported pgs if your payment gateway uses the network token mode, upload the certificate signing request csr you obtained from your pg supported formats are csr or pem contact your pg for details otherwise, key management is already established for pgs supporting samsung pay’s gateway token mode; hence, click connect with to create a new service connection with the pg and click ok enter the payment domain name s for your website in the service domain field and click add for example, if your domain is mywebstore com but the checkout page is hosted on the subdomain payments mywebstore com, you’ll need to enter payments mywebstore com as the service domain in the portal for each additional domain name, click add notewhen entering the domain name on the portal, do not include an https // prefix confirm your agreement with the terms and conditions, then click next adding w3c payment requests objects to your website in order to accept payments from samsung pay, your website must adhere to the w3c payment request api specification you can get started with the basics by completing the steps that follow and making the appropriate substitutions for your website step 1 feature detect prior making a w3c payment request, it’s wise to run a feature detect to ensure the browser in use supports the w3c payment request api if not, you should fall back to your traditional/normal checkout page example if window paymentrequest { // use payment request api } else { // fallback to traditional checkout window location href = ‘/checkout/traditional’; } step 2 create the paymentrequest constructor the first step is to create a paymentrequest object by calling the paymentrequest constructor, which has the following parameters methoddata – contains a list of payment methods that the website supports e g , visa, amex, samsung pay details – contains information about the shopping cart purchases e g , total, tax, fees, etc options – details pertaining to shipping address, user contact information, etc example var request = new paymentrequest methoddata, // required payment method data details, // required information about transaction options // optional parameter for things like shipping, etc ; step 3 add samsung pay to the methoddata parameter the methoddata parameter contains a list of payment methods supported by the merchant to support samsung pay, you’ll need to add it as a supported payment method notebasic-card is an optional supportedmethod for credit and debit cards saved in the browser, the card details of which are returned directly to the website from the browser before configuring this method, make sure your website and pg can handle generic payment information received from the browser and process with required pci compliance, if applicable see the [w3c basic card payment specification][7] for additional details be aware, however, that if you intend to support a branded samsung pay button, only samsung pay can be enabled as a payment method within the paymentrequest object; basic-card or any other payment method cannot be included if you already offer a generic payment request method, you can continue to do so — and include samsung pay as a payment method within that paymentrequest object from a user experience standpoint, the two distinct pathways look like this standard w3c implementation a standard w3c implementation adds samsung pay to your standard paymentrequest object as one of many supportedmethods available for user selection tapping checkout or its equivalent launches the standard browser payment sheet for user selection of the payment method and/or to add a debit/credit card to the list of options selecting samsung pay as the payment method and tapping pay launches the samsung pay payment sheet branded samsung pay implementation a branded implementation displays a "buy with samsung pay" button in place of your standard checkout button tapping the button will skip directly to the samsung pay payment sheet for authentication unless you specify paymentoptions if paymentoptions is not null, the browser payment sheet is launched see paymentoptions in step 7 for additional guidance first launching your website's checkout page is recommended for branded implementations this is because the samsung pay payment sheet only provides the user's billing address, which means your website will need to capture the user's preferred shipping address, where applicable for physical delivery of purchased goods if no shipping address and/or other options are needed, set the paymentoptions parameter to null as mentioned above, if you populate paymentoptions, the browser payment sheet is automatically launched keeping the foregoing implementations in mind, let's look at how to construct the methoddata argument for the network token mode and gateway token mode, respectively the fields in methoddata comprise supportedmethods – required; specifies https //spay samsung com/ i e , the samsung pay app and other methods suppored by your website data – values specific to the method; for samsung pay, these include version specifies the data structure being used by the merchant; should always be set to 1 until further notice required productid the service id obtained from the samsung pay partner portal required for partner verification; see step #8 under registering your domain for the w3c service merchantgatewayparameter this is the userid value registered with your pg required for gateway token mode in addition, userid should be set in the request parameter for mada token if a merchan request mada token, this field is mandatory as this filed should be included in the payload for mada token, there is a 15-character length limit paymentprotocol defaults to “protocol_3ds,” the only protocol currently supported by samsung pay optional allowedcardnetworks specifies the card brands/networks accepted by the merchant and supported by the pg required merchantname the name of the merchant to be displayed on the payment sheet; must be identical to the merchant name registered on the samsung pay partner portal required ordernumber unique value for merchant use as an external reference id optional isrecurring specifies transaction on subscription basis optional; default = false billingaddressrequired determines if a billing address must be filled-in by the user optional; default = false shown next are examples of the methoddata parameter for each of the supported token modes please note that samsung pay's w3c support for card brands is currently limited to mastercard, visa and american express discover is scheduled for support soon example – network token mode var methoddata = [ { supportedmethods ['https //spay samsung com'], data { 'version' '1', // always 1 until further notice 'productid' '2bc3e6da781e4e458b18bc', // service id from partner portal 'allowedcardnetworks' ['mastercard','visa'], 'merchantname' 'shop samsung demo ', // merchantname must be identical to merchant name on portal 'ordernumber' '1233123', } }] example – gateway token mode var methoddata = [ { supportedmethods ['https //spay samsung com'], data { 'version' '1', // always 1 until further notice 'productid' '7qr7h9ws1872bc3e6da781', // service id from partner portal 'merchantgatewayparameter' {"userid" "acct_ 17irf7f6ypzj7wor"}, 'allowedcardnetworks' ['mastercard','visa'], 'merchantname' 'shop samsung demo ', //merchantname must be identical with merchant name on portal 'ordernumber' '1233123', } }] step 4 fill out the transaction details parameter the details parameter contains information about the transaction there are two major components a total, which reflects the total amount and currency to be charged, and an optional set of displayitems that indicate how the final amount was calculated this parameter is not intended to be a line-item list, but is rather a summary of the order’s major components subtotal, discounts, tax, shipping costs, etc example var details = { displayitems [ { label "total of all items", amount { currency "usd", value "65 00" }, // us$65 00 }, { label "friends & family discount", amount { currency "usd", value "-10 00" }, // -us$10 00 pending true // the price is not yet determined } ], total { label "total", amount { currency "usd", value "55 00" }, // us$55 00 } } step 5 check eligibility to display samsung pay button if you do not support basic-card and you try to call show in step 6 when samsung pay or any other supportedmethod is not present on the device, the returned promise will reject with the following error domexception the payment method is not supported you can, however, check beforehand to see if the user has an available/supported method set up this is done with the canmakepayment method, which tells you whether the user has a payment method that can fulfill the current payment request example – canmakepayment const paymentrequest = new paymentrequest supportedpaymentmethods, transactiondetails, options ; // if canmakepayment isn’t available, default to assume the method is supported const canmakepaymentpromise = promise resolve true ; // feature detect canmakepayment if request canmakepayment { canmakepaymentpromise = paymentrequest canmakepayment ; } canmakepaymentpromise then result => { if !result { // the user does not have a supported payment method // todo redirect to traditional checkout flow return; } // todo the user has a payment - call show } catch err => { // todo either fall back to traditional checkout or call show } ; notebranded samsung pay buttons can be found on the [samsung pay developers][8] portal under the resources tab direct cdn links will be available soon step 6 call the show method to display the payment sheet the payment sheet can be activated by calling its show method this method invokes the browser’s native ui so the user can examine the details of the purchase, add or change the information, and submit it for payment a promise, indicated by its then method and callback function, resolves what will be returned when the user accepts or rejects the payment request example – show request show then function paymentresponse { // process paymentresponse here paymentresponse complete "success" ; } catch function err { console error "uh oh, something bad happened", err message ; } ; step 7 handle the paymentresponse once the user approves the payment request by verifying the payment option and shipping option if provided , the show method’s promise resolves, resulting in a paymentresponse object comprised of the following fields methodname string indicating the chose payment method e g , visa details dictionary containing information for methodname shippingaddress shipping address of the user, if requested shippingoption id of the selected shipping option, if requested payeremail email address of the payer, if requested payerphone telephone number of the payer, if requested payername name of the payer, if requested here, it’s important to remember that the response from the payment request api must be submitted by the merchant in accordance with the pg’s integration model and apis in all cases, the samsung pay response is encapsulated within the paymentresponse details parameter, which comprises the following fields paymentcredential – contains the payment credential information necessary for processing the transaction with the pg in network token mode, this field includes 3ds data in gateway token mode, it includes token information network token mode type use “s” version 1 0 0; standard for payment authentication aka mastercard securecode, verified by visa, and american express safekey data encrypted payload value gateway token mode reference token id reference status authorized or rejected/declined billingaddress – contains the billing address and related attributes for the cardholder, possibly including country [iso3166] alpha-2 code; canonical form is upper case for example, “us” addressline[n] most specific part of the address; can include a street name, a house number, apartment number, a rural delivery route, descriptive instructions, or a post office box number region top level administrative subdivision of the country; can be a state, a province, an oblast, or a prefecture city city/town portion of the address dependentlocality dependent locality or sub-locality within a city; fused for neighborhoods, boroughs, districts, or uk dependent localities postalcode postal code or zip code, also known as pin code in india sortingcode bank sorting code; for example, in the british and irish banking industries, the sort code is a six-digit number, is usually formatted as three pairs of numbers, for example 12-34-56, identifying both the bank and the branch where the account is held languagecode [bcp47] language tag for the address, in canonical form; used to determine the field separators and the order of fields when formatting the address for display organization organization, firm, company, or institution at this address recipient name of the recipient or contact person this member may, under certain circumstances, contain multiline information; for example, it might contain “care of” information phone telephone number of the recipient or contact person paymentinfo – contains the payment information, including card_last4digits last four digits of the card’s dpan cardbrand currently, either mastercard or visa ordernumber merchant’s unique external reference id supplied in the original request’s methoddata parameter if the user pays with a credit card using the basic-card method, then the details response returned directly to your website from the browser will contain cardholdername, cardnumber, expirymonth, expiryyear, cardsecuritycode, billingaddress example request show then paymentresponse => { var paymentdata = { // payment method string, e g “amex” method paymentresponse methodname, // payment details contains payment information details paymentresponse details /* request details depends on pg token mode network - e g , first data; or gateway - e g , stripe ---------------------------------------------------------|------------------------------------------------------| * gateway token mode |* network token mode | * “details” { |* “details { | * “paymentcredential” { |* “method” “3ds”, | * “reference” “tok_1asceoyf6ypzj7f8se6grp0i”, |* “paymentcredential” { | * “status” “authorized” |* “type” “s”, | * }, |* “version” “100”, | * |* “data” “long_encrypted_payload_value”, | * |* }, | *--------------------------------------------------------|------------------------------------------------------| * “paymentinfo” { * “card_last4digits” “1489”, * “cardbrand” “mastercard”, * “ordernumber” “1233123”, * “billingaddress” { * “country” “usa”, * “addressline” [“chhccy”, “hdyxych”], * “region” “ca”, * “city” “mountain view”, * “dependentlocality” “”, * “postalcode” “94043”, * “sortingcode” “”, * “languagecode” “en”, * “organization” “”, * “recipient” “”, * “phone” “” * } * } * } * */ }; return fetch ‘/validatepayment’, { method ‘post’, headers { ‘content-type’ ‘application/json’ }, body json stringify paymentdata } then res => { if res status === 200 { return res json ; } else { throw ‘payment error’; } } then res => { paymentresponse complete “success” ; }, err => { paymentresponse complete “fail” ; } ; } catch err => { console error “error, something went wrong”, err message ; } ; once payment information is received from samsung pay, the website should submit the payment information to the merchant’s pg for transaction processing the ui will show a spinner while the request takes place when a response is received, the website should call complete to close the ui the website is then free to show an order complete or order confirmation page for user feedback as previously mentioned, you can simplify integration of network tokens by passing the encrypted payload directly to your pg and letting it handle decryption in all cases, how you handle a submitted network token depends on the payment gateway refer to your particular pg’s documentation for details paymentoptions is an optional parameter in thepaymentrequest constructor depending on your particular requirements, you may want additional information, such as the user’s shipping address for physical goods purchased and contact details for guest users paymentoptions currently comprises the following requestpayername true if payer name is required; otherwise, false requestpayeremail true if payer email address is required; otherwise, false requestpayerphone true if payer telephone number is required; otherwise, false requestshipping true if shipping address is required; otherwise, false shippingtype available label options “shipping/pickup/delivery” for indicating to user; solely for display purposes example var options = { requestpayeremail false, requestpayername true, requestpayerphone false, requestshipping true, shippingtype "delivery" } noteif any of the elements listed above are set to true, the browser payment sheet is launched; otherwise, the samsung pay payment sheet is displayed putting it all together let’s assemble the various code blocks into a prototype to demonstrate the w3c payment request api in action function onbuyclicked { const samsung_pay = 'https //spay samsung com'; if !window paymentrequest { // paymentrequest api is not available - forwarding to legacy form based experience location href = '/checkout'; } // setup var supportedinstruments = [{ supportedmethods [ samsung_pay ], // 'https //spay samsung com' data { "version" "1", "productid" "2bc3e6da781e4e458b18bc", //service id from partner portal "allowedcardnetworks" ['mastercard','visa'], "ordernumber" "1233123", "merchantname" "shop samsung demo ", //merchant name in partner portal "merchantgatewayparameter" {"userid" "acct_17irf7f6ypzj7wor"}, "isrecurring" false, "billingaddressrequired" false, "paymentprotocol" "protocol_3ds" } }]; var details = { displayitems [{ label 'original donation amount', amount { currency 'usd', value '65 00' } }, { label 'friends and family discount', amount { currency 'usd', value '-10 00' } }], total { label 'total due', amount { currency 'usd', value '55 00' } }; var options = { requestshipping true, requestpayeremail true, requestpayerphone true, requestpayername true }; // initialization var request = new paymentrequest supportedinstruments, details, options ; // when user selects a shipping address request addeventlistener 'shippingaddresschange', e => { e updatewith details, addr => { var shippingoption = { id '', label '', amount { currency ‘usd’, value ‘0 00’ }, selected true}; // shipping to us is supported if addr country === 'us' { shippingoption id = 'us'; shippingoption label = 'standard shipping in us'; shippingoption amount value = '0 00'; details total amount value = '55 00'; // shipping to jp is supported } else if addr country === 'jp' { shippingoption id = 'jp'; shippingoption label = 'international shipping'; shippingoption amount value = '10 00'; details total amount value = '65 00'; // shipping to elsewhere is unsupported } else { // empty array indicates rejection of the address details shippingoptions = []; return promise resolve details ; { // hardcoded for simplicity if details displayitems length === 2 { details displayitems[2] = shippingoption; } else { details displayitems push shippingoption ; } details shippingoptions = [shippingoption]; return promise resolve details ; } details, request shippingaddress ; } ; // when user selects a shipping option request addeventlistener 'shippingoptionchange', e => { e updatewith details => { // there should be only one option do nothing return promise resolve details ; } details ; } ; // show ui then continue with user payment info request show then result => { // post the result to the server return fetch '/pay', { method 'post', credentials ‘include’, headers { 'content-type' 'application/json' }, body json stringify result tojson } then res => { // only if successful if res status === 200 { return res json ; } else { throw 'failure'; } } then response => { // you should have received a json object if response success == true { return result complete 'success' ; } else { return result complete 'fail' ; } } then => { console log 'thank you!', result shippingaddress tojson , result methodname, result details tojson ; } catch => { return result complete 'fail' ; } ; } catch function err { console error 'uh oh, something bad happened ' + err message ; } ; } document queryselector '#start' addeventlistener 'click', onbuyclicked ; refer to the official w3c integration specs for additional details and definition testing once you have the code saved and loaded, you’re ready to test be sure to test your website or test domain on a device running samsung internet browser and with the samsung pay wallet app already set up and ready to go in accordance with the prerequisites cited above if you use a separate subdomain for your test environment, be sure to add it as an eligible service domain for the service you configured under registering your domain for the w3c service remember that any/all subdomains for production must also be added to the service, up to a maximum of 10 service domains again, please note that samsung pay’s webpay api currently supports mastercard and visa only support for american express and discover is under development and will be available soon be sure to test using the samsung internet and chrome mobile browser apps to test select samsung pay as the payment method by clicking on the branded samsung pay button branded implementations or the samsung pay radio button standard w3c implementations this should launch the samsung pay payment sheet authenticate payment validate your results end to end isolate issues in the log, debug, and test again contact your samsung pay rm to coordinate assistance with troubleshooting recommended test cases check if the samsung pay is available in the payment option on the website verify samsung pay logo on browser sheet verify order summary on the payment sheet verify “edit” and “pay” buttons on payment sheet verify purchased item in the summary verify the billing address on the payment sheet change the billing address try to change the card in payment sheet when only one card is enrolled in samsung pay try to change the card when multiple cards is enrolled in samsung pay verify the payment amount verify the payment options verify the payment completion screen verify merchant name on the payment sheet verify merchant domain name on the payments sheet verify “cancel” and “pay” buttons on browser sheet try to make payment with large amount larger than max allowed amount and verify the behavior make a payment using samsung pay with a card already added for the merchant’s website basic-card verify transaction notification after w3c purchase verify transaction notification after refund set payment options for shipping address and verify that browser payment sheet launches and captures shipping address input/changes by user verify that the shipping cost is updated based on a shipping address change and is reflected in the updated total amount release once your tests are successful and you are satisfied with the results, take the following steps to ready your integrated with samsung pay website for release go to the samsung pay developers portaland create a new release service sharing identical attributes with the service you successfully tested a click on service management, then click create new service b select for release pictured , then click next c select w3c mobile web payments as the service type, then click next d enter a "release" service name and select "united states" as the service country e select united states as the service country f select your payment gateway from the drop-down menu, then click connect with for gateway token mode or provide a valid csr for network token mode g enter your service domain and click add for each additional domain name, click add remember, when entering domain names on the portal, do not include a "https"//" prefix h confirm your agreement with the terms and conditions, then click next retrieve the service id from the service details page and enter copy-paste it into your website's methoddata object in place of the current testing service id when your service is approved by your samsung pay rm — as indicated in the status column of your service management dashboard — you're ready to release your integrated website to the public send queries concerning service package approval to webpayment@samsungpay com
Learn Developers Podcast
docseason 3, 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 chris benjaminsen, frvr games, galaxy store chris benjaminsen, founder of frvr, the super successful game publisher with over 70 titles on samsung services not only do we chat about monetization and game revenue strategies, but how the frvr platform has allowed them to scale their global reach all music from today's show is from frvr games, composed by rasmus hartvig listen download this episode topics covered frvr publishing on galaxy store marketing discoverability monetization generating revenue in-app purchase iap in-app advertising iaa interstitial ads galaxy badge best of galaxy store awards acquiring games/studios diversity and inclusion helpful links frvr - frvr com frvr careers - careers frvr com frvr linkedin - linkedin com/company/frvr frvr youtube - youtube com/c/frvrgames gold train frvr - goldtrain frvr com chris benjaminsen linkedin - linkedin com/in/chrisbenjaminsen/ chris benjaminsen twitter - twitter com/benjaminsen galaxy badges - developer samsung com/galaxy-store/gsb-promotion samsung iap - developer samsung com/iap samsung developer program homepage - developer samsung com samsung developer program newsletter - developer samsung com/newsletter samsung developer program blog - developer samsung com/blog samsung developer program news - developer samsung com/news samsung developer program facebook - facebook com/samsungdev samsung developer program instagram - instagram com/samsung_dev samsung developer program twitter - twitter com/samsung_dev samsung developer program youtube - youtube com/samsungdevelopers samsung developer program linkedin - linkedin com/company/samsungdevelopers 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 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 three, episode four on today's show, i'm joined by chris benjaminsen, founder of frvr, the super successful game publisher with over 70 titles on samsung services not only do we chat about monetization and game revenue strategies, but how the frvr platform has allowed them to scale their global reach and the music from today's show is from frvr games, all composed by rasmus hartvig, enjoy hey, chris, welcome to the podcast chris benjaminsen 00 50 hey, tony thanks for having me yeah, so tony morelan 00 52 so i'm excited to chat with you because, you know, we've had game developers on the podcast, but never a game publisher let me first ask you though, who is chris benjaminsen? chris benjaminsen 01 02 like? that's a good question like, if i were to define myself, i think there's like two defining characteristics, like one is i must make things and the second one is, i detest repetition so if you come to my place, it's not unlikely i will cook but it's very unlikely i'm cooking something i made before so you know, it might be good might not be good, right? but you know, that, that drives and making things like it, it can be origami, it can be computer games that can be like, doesn't really matter, as long as i'm sort of producing something, and then i really don't like doing things twice right you know, like, anything that's routine is just boring tony morelan 01 41 so you're an explorer, then? chris benjaminsen 01 43 i guess so i guess so yeah tony morelan 01 47 so you're with frvr? what exactly is your role? and what is frvr? chris benjaminsen 01 53 like, like, i'm the i'm the original founder, the company, right? you know, and my role today is mostly around working together with massive companies such as samsung, i lead a team at frvr that does that and if you're, if you were to describe frvr, as a company, we're a platform and a publisher okay, so we have a platform that allows game developers to make fantastic games and with all the services that they need to do to do so basically, anything in between a, a game developer and a consumer, and then we also the publisher, we actually make sure that the games get in front of the right user, and they have an opportunity to play those games tony morelan 02 29 okay, what does frvr stand for? it's an acronym, does it have a deep meaning? chris benjaminsen 02 35 no, it's not like, like, a lot of people are sort of asking us if we have french vr company, which we're not yeah, but, but like, like, if rbis is technically forever, without the vowels okay, you can trademark frvr you can trademark forever, at least, not unless you have apple liberal money, right? so so if we say if i'm yeah, because if you could locally use you sort of the full pronunciation you can actually use the trademark so there's a bunch of stupid rules there tony morelan 03 07 interesting interesting so before we dive into frvr, tell me about your journey what led you into the mobile gaming area, and then specifically into creating frvr, chris benjaminsen 03 17 i've been in the, in the games industry for like, more than 20 years, my first job, sort of professional job ever was to make a real time multiplayer games in javascript and if i'd be honest, my seventh startup in total and my second year, and my third platform company over also have like a long history of sort of building companies in this space and i've been very fortunate i never managed to go bankrupt but one of these companies so far, right, you know, so little bit proud about that tony morelan 03 48 oh, that's great it definitely plays into you know, when you first started, you had said that, you know, you're not going to repeat much so you said seven companies that you've started, chris benjaminsen 03 58 you had all very different companies, and some of them were like, like, like, very small and, and never got successful, anything like that right? it's just like the companies apparently gets bigger and bigger every time i try yeah, there might be there might be new startups in the future as well but for now, if rbis is a very exciting company to work at, and definitely want to want to spend my time tony morelan 04 20 so i know one of those companies you had started you actually, it was a pretty successful company that you ended up selling but you came away with that from with a lot of lessons learned, i would say is that correct? chris benjaminsen 04 33 yeah so like, like, in a previous life, build a platform company that did infrastructure for cash or mobile, social and in that company, there was a lot of people building games on top of our infrastructure and 1000s of developers right and, and there was there's a few significant learnings from that so one was that building a company that just charges other people for services is not a particularly good business, a lot of money was made by the developers on top of our platform where we are not making quite a lot of money so you know, make sure that that you actually participate where, where the value is if you want to be a publisher and then the second learning was that the successful developers were not the ones who had the best at making games, right? so there's, there's not a strong connection between sort of making games that are fun to play and the economic success that those developers were able to see so if you want to be successful in the game space, and this is particularly true in the in the mobile game space, you need to be good at a lot of other things that has nothing to do with game development, such as a user acquisition, and revenue optimization, and data and all these things and that, you know, i don't think there's anything wrong with that but if you are somebody who really loves making kickass games, you're missing the 90% if you also want to be successful at that tony morelan 05 57 it's interesting you say that, you know, i had on the podcast a few weeks ago, peter and tobias from biodome games, they have their game gold digger, frvr yeah and it was peter, who had a great quote, saying that he was chatting with one of his partners, who had said, you know, for once, can you stop trying to be so artistic in your games and just build a game that can be successful? and, you know, we all had a good laugh at that chris benjaminsen 06 23 yeah and, you know, i think all industries are like that, right you know, you probably have to be good at a multitude of different disciplines to be successful but, but the games industry, being one of the most valuable entertainment industry, two worlds is, of course, also one of the most competitive and that competitive landscape it's a very, it's a very hard place for, for most people to compete and, and the market sentiment is sort of dominated by survival bias yeah right you know, like, like, the people who won the lottery yeah you know, like, like an among us are like flappy birds so like these, these small teams that had an outsized hit, right, but that's like winning the lottery good luck with that yeah and tony morelan 07 04 i think a great example of that right now is wordle, in the phenomenon behind that chris benjaminsen 07 08 absolutely fantastic game, right you know, and i like these small puzzle games once in a while to come along i was like, 2048, as well, which was also originally made, i think, by an italian game developer, you know, just as a small example, fantastic, fantastic game as well yeah, tony morelan 07 25 definitely, in kind of going back to, you know, what i mentioned, peter, and tobias, they said that for them, you know, the key to their success was partnering with someone like frvr, so that they could just focus on creating the game and let everybody on your team handle everything that when it comes to publishing and marketing, so i think there's a huge value with where you guys are in this space chris benjaminsen 07 47 i hope so like, that's what we're trying to do we're trying to allow developers focusing on making fantastic games and then we took care of all the nitty gritty details of making those games available and i think we published the 39 platforms and then while also helping those developers make sure that the right users come into the games yeah, yeah because it's not it's not only just about the volume of people who play a game, it's more important to make sure that the right user plays the game sure, to get the kind of games that i like, it's not necessarily the kind of games that you like, right, for tony morelan 08 17 sure so let's talk a bit about the history how long has frvr been in existence? chris benjaminsen 08 22 so i think i think technically, they were written, sort of in the integration of the company was founded in must be 2016 okay and their written version of frb apps was decided to be the biggest, baddest lifestyle company you have ever heard of, and sort of sort of allowed me to go and travel the world without having to worry about expenses and it did that it did that very well like, very successfully however, like i'd had a corporate job in corporate america, i had moved to san francisco at this point in my life after having sold a previous company and i sort of managed to convince myself that everything that was wrong with my life was working it turned out everything that was wrong with my life was working for corporate america and it took me it took me like three weeks and a whole bunch of success to realize that and decide, oh, wow, there's a big opportunity here in what inevitably came if ivr that exists today yeah, i teamed up with a guy called brian meidell they joining co-founder came in and we started sort of getting serious about the company a few years after the original founding tony morelan 09 28 and it was brian actually, who had told peter, hey, for once, put artistic stuff aside and let's focus on you know, how to be successful here chris benjaminsen 09 36 yeah and like he's a fantastic executor right, you know, and that's, like, due to building big teams and sort of running productions a lot of repetition stuff i don't like right, yes really good at that tony morelan 09 48 that's great so how many employees are at frvr? chris benjaminsen 09 52 yeah, so i think we are 130 now so as of today, but yeah, like we find ourselves in a situation right now, where we are onboarding around 11 new people a month, so you're growing? yeah, every time you ask that question, the number would have changed? tony morelan 10 08 no, are these people are you focused in one headquarters? are you guys you know, all around the globe? chris benjaminsen 10 13 we have most of our people in in lisbon in portugal and that's predominantly where we are focusing on hiring okay, you know, post covid, the world has changed and, you know, we absolutely accept that some people want to be wherever it is they want to be so we also we also have offices in denmark, we have offices in united kingdom and we have a small office in malta as well, and a small office in spain so we have we have sort of different opportunities for people who wants to work in an office got it and then the majority of people are now in in disband portugal and that's also where we are mostly doing a tony morelan 10 50 hiring you yourself, though you are in the uk is that correct? yeah, i'm chris benjaminsen 10 53 in london, right? you know, i get to i get to be a special snowflake and decide where i want to live so i live in tony morelan 11 01 wonderful now under the frvr brand how many game studios do you guys have that you're working with? chris benjaminsen 11 07 we are publisher right? you know, so? we i think presently we work with around 20 okay, yeah other studios, right? so it's a non-insignificant amount but we have high aspirations, we want to get to a place where we can work with hundreds, if not 1000s of developers sure to do fantastic things tony morelan 11 28 so how many monthly players? do you get playing frvr games on all channels? chris benjaminsen 11 34 i get to it various, right like, like a lot of our success comes from viral traffic right okay so active users can range from i got a really bad month, 50 million to get month where we were we peek into, like, like 100 plus million mark wow, tony morelan 11 50 monthly active users that's crazy yeah, it's chris benjaminsen 11 53 a lot of people so far, i think like, like it's a number we track we think we've had around 1 6 billion absolute unique for the lifetime of the company tony morelan 12 03 wow and that is just in you know, you said the 2016 was the start of frvr chris benjaminsen 12 09 have you? i failed to remember it might have been 15 right but yeah, like plus minus a year sure tony morelan 12 16 so now let's talk about samsung and galaxy store with frvr, what are some of the popular titles that you guys offer on galaxy store? chris benjaminsen 12 24 so particularly on the galaxy store, like we have, i think we have like 12 games live, their most notice would be it's called tigger, frvr which, which is built by peter and team and then we have sort of our higher end games like a basketball and a hex and however, we do work with samsung in other ways, as well, they have this instance type product as well, where we are also present and we have i don't know; i think we've done like seven or eight different integration with samsung along the year so we are sort of everywhere on a samsung phone, including the galaxy appstore tony morelan 12 57 okay, so not just the galaxy app store but there's other different platforms that samsung offers frvr is involved in chris benjaminsen 13 04 yeah, so we work with, we work with samsung about building an experience in our first integration with what's in the product called bixby minus one home screen so when you swipe left on your on your phone, like we will be wearing, we had a cart where there was sort of quick links to our games, okay, we build an instant games type product together with samsung, we work quite a lot of that together and we have our games live there we also have integrations with the with the browser and like we exploring, basically, a big part of what frvr is, rather than trying to drag the user to where we want them to be, say, a mobile app store, we try to take the model and turn it inside out and bring people great games wherever they have already decided to want to be because it's very costly to drag a user somewhere else, right tony morelan 13 50 i see so if they're already there, you want to make your game available to them chris benjaminsen 13 54 yeah, yeah it's like, you know, if you're, if you're starbucks, right, people won't care if you can only get it in the airport, you actually have to be on a street corner close to where people sort of walk around, otherwise nobody is ever going to drink their coffee tony morelan 14 05 yeah, that's true that's true so how did this relationship with samsung for start? chris benjaminsen 14 10 we met samsung at a at a conference and they were like, can you give us games in like, four months? i think was the was the original question and we got the games to them in two days so wow so the answer was yes yeah tony morelan 14 24 that's a great way to start the relationship oh, yeah so why would you say it's important to offer your game on galaxy store? chris benjaminsen 14 31 like, again, you know, that those users there who love the galaxy store, and we want to have our games available to those users in that space and galaxy store is actually well performing? right you know, it's a samsung product and samsung phones are very high-end devices generally it's very, not only is it it's great to meet a consumer where they are they are also very high value users when people are playing from the front of samsung galaxy app store tony morelan 14 54 yeah, in what ways would you say galaxy store has helped you promote frvr games chris benjaminsen 14 59 for is the organic installs a fairly competent product? and it has all the features you would expect as a game developer, right? you know, so, so great access to in app purchases, great access to notifications, great access to distribution, right but we've also, we also really enjoyed working together with the samsung galaxy team and we have, like, among other things, we have an frvr category in the galaxy store that sort of exclusive to us it's only our games oh, no, no and we work together on seasonal featuring and to give feedbacks to us, you know, saying, hey, we think it would be fantastic if we could do some something around easter, for instance and then we go and work on that together and sort of find a, a process that works well together for both of us tony morelan 15 42 that's great and i'm sure that banner promotions are part of that is that chris benjaminsen 15 45 yeah, banner promotion, and i can promotions and like there's a lot of tools that samsung has in the toolbox to help out right? yeah and then we also push on the galaxy team to do more like we, we've sent a lot of feedback on the on the back-end tools and things like that and fantastically, it has impact, like we get better product right so for us, that's a fantastic partnership tony morelan 16 09 yeah and that's one of the things that actually pulled me into working for samsung was how open they were to feedback in wanting to improve their platform fantastic you know, you'd mentioned gold digger, frvr those are the guys they won our 2021 best of galaxy store award for best instant play game awesome game awesome guys, we were so happy to give that award tell me what it did mean for frvr to have one of your games win a best of galaxy store award? chris benjaminsen 16 37 it's a privilege, right? you know, and the credit goes to the game developer, they made that game? yeah right you know, we supported them along the way and, and of course, came with a lot of feedback and help them with technical issues and things like that but at the end of the day, you know, we have to be honest about the fact that the great games are made by the great developers, right, and also, as a platform publisher, provide the tools to make that a possibility but games are fundamentally a creative endeavor and you need massively traded people to make to make those games sure i'm, i'm a game developer myself as well, right you know, and i'm almost more proud of some of the games i've built and, you know, the very successful company that and if rbis, right, you know, because, you know, so it's sort of like an expression of something where you sat down and said, here's the thing i want to create, and now i've gotten it out right and i think to be as impede completely deserves getting that, that recognition from galaxy tony morelan 17 35 yeah success for a game definitely revolves around revenue tell me as far as frvr, what has been your strategy for generating revenue? chris benjaminsen 17 46 like so so from a, from a technical side, right, you know, we try to we try to make all avenues of generating revenue available in our platform, right so that means interstitial-based advertisement, it means reward the best advertisement? it means in app purchases, it means subscriptions it actually does not mean, banner advertisement, we don't do that because i don't like it no, really but you know, yeah, other than that, like, like, we sort of have all the technical capabilities, and then what we find and what we try to optimize for, it's not revenue, we try to optimize for engagement okay and there's a multitude of reasons for that, like so so like, one is the fact that i can't remember the specific number, but it's more than 90% of all value that is captured in the game is made by people who play the game more than once yeah, right you really want to have these long engagements with people, right and another fairly simple reason is it's a lot easier to take a game that has huge engagement, and turn it into a good business than it is to take a game with a with a strong monetization model and turn it into a great game right? so fundamentally, everything we focus on all our kpis, all our visions, and missions are around building experiences that people want to engage with for a long time and then revenue is something that happens as a result, they're off, rather than being sort of a driving factor and because we are good at distribution it because we, we are not sort of participating in the race to the bottom that is cost positive user acquisition on app stores, we can take the privilege that it is to be less aggressively monetizing than some of our competitors tony morelan 19 22 yeah, yeah so let's talk about some of the specifics here, when it comes to, you know, different ways to generate revenue you know, there's developers out there that may just be getting started in this space and so i want to help explain what some of those are so ip is in app purchase, kind of explain, like what is in app purchase chris benjaminsen 19 39 so new in app purchases, if you can somehow convince a user to pay for something in the game, right, you know, and, and how they pay it's actually quite different across the world so northern europe or usa, right? america has a distributor for a credit card, okay but if you're talking about a consumer in india, it's typically through a gift card or something like that why? they've gone into install and sort of funded a wallet, right but the fact of the matter is, what essentially ends up happening is you have you have an experience in your game that the user feels is worth the value of paying for and again, you know, like, like, like talking about engagement in games, right? why would a user be willing to, to sort of exchange money for something in a game? and that's typically related to the user's expectation of also playing this game two weeks from now? right? yes, they're investing yeah, you're investing in your future experience in this game? right? you know, so so it's another place where this this long-term engagement becomes very important, right? but a lot of times what people are buying are like, simple things, like more lives, or an item, or whatever it is that sort of, and in some of our games that are multiplayer, we even have people playing for things that are purely sort of cosmetic, buying a different hat, because then other people can see the hat that hat, but the hat, the hat has no function, right? sure tony morelan 20 57 so it's just being able to create their own identity, you know, within that game, chris benjaminsen 21 02 it's no different than people buying clothes in the real world, you know? tony morelan 21 05 sure, sure so how do you look at your player demographics for getting the best returns on iap? chris benjaminsen 21 10 i? well, first of all, that's a per game thing right? you know, we have, we have games that appeal to 50 plus women and we have games that appeal to like, like, a young male audience right so that's, that's very individualized per game fundamentally, though, there are some there are some core mechanics that always worked really well, if you can proposition a user to, to exchange money for time yeah so something where they can progress faster if they if they put money in is typically a very strong mechanic, regardless of who the consumer is and then, like we do the thing that successful game developers, do, we spend a lot of time looking at data and looking at, you know, what are the flows that leads to a conversion? so somebody's actually putting money into the system? how do we how do we balance those metrics such that we sort of get the most statistical value of, and we use, we use tools such as ad split testing, okay, where you run, run two versions of the game at the same time, and then you measure which one performs better? and then you make that diversion that everybody plays? tony morelan 22 16 yeah, yeah, no, that's great i've heard that that is a pretty important aspect, not just in the gaming industry, but just with, you know, ads and marketing to do a b testing chris benjaminsen 22 26 yeah, we even do something it's called multi variant testing, right and we should not go into the details, but it becomes very complex very quickly tony morelan 22 33 sure, sure so what other mobile game monetization models do you consider like, you know, premium paid apps or paid user acquisitions, you had mentioned that chris benjaminsen 22 43 we did experiment a little bit with premium paid apps, but it's a very, it's a very tough market and, and it's not, it's not something where we found a lot of a lot of success, like we generally see more successful, and we can just sort of allow anyone to play the games, and not without having that limitation, right and we do both interstitial based advertisement, which is unprompted and then rewarded video type advertisement, where the user gets a reward for watching an advertisement but when a user sort of opts to watch an ad, right, you know, so you could imagine that, so this tony morelan 23 14 is during gameplay, there would be a moment where then a video would play, and they would watch that chris benjaminsen 23 18 yeah so a simple example could be you know, that you have just died yeah and you can revive by watching an advertisement and not paying a coin okay right so giving the user the choice between, say, watching an advertisement and spending a bit of time versus spending a bit of their money, right, you know, so and it's a very high value format because the user has elected to watch an advertisement so you know, the users there, yes, you know, they're engaged and they're just sitting there waiting, right? so advertisements are typically willing to pay a high price for that type of advertising tony morelan 23 54 and you'd mentioned interstitial ads so explain what that is for someone who's new to game development? chris benjaminsen 24 00 yeah so it's a bit like to have to get on television so something is happening on your screen, and then suddenly does an advertisement and something else is happening, right? you know, so it's an ad that is that is shown to the user, like interstitial technically means an advertisement that runs before something starts, right but it's used interchangeably in the games industry to mean like an ad before something starts on ad in the middle of something on that after something happened okay, we try to be cautious of using those type of advertisements sort of out of order like we don't want to interrupt a user while they're playing yeah so we will typically only put those in so like, for whatever reason, your game session has ended, and you have just elected to press play again and that's where we would put in those type of advertisements you do have games out there, which are you can imagine you're playing a solitaire game and then put an ad pops up in the middle of it right and you have to sit down wait till you can continue your game and we try to stay away from that tony morelan 24 55 i see i see what about subscriptions have you guys read any subscription models on your games? so, yeah, we've chris benjaminsen 25 00 run a, we run a few experiments here and it's a relatively new area of monetization for us but we have run experiments where our games have been sort of presented as a games club so rather than having advertisement or having, you know, purchases in the game, you can just play them completely for free if you had a subscription through a third party, right and some of our debug games to the kind of stuff we're building now definitely lends itself well towards being able to support subscriptions subscriptions to free to play games these days, mostly expresses themselves as season passes so you like buy a season pass subscription, and then you get like, extra rewards while you play for a period of time and then that time period is up and then you know, you can buy the next season pass as well, or continue your subscription or whatever it is, right you know, that's, that's the model of like, a, like a fortnight or those type of games tony morelan 25 52 got it so we've talked about in app purchase, aap, you know, there's another category to monetization called ia, which is in app advertising and i think, under that falls, the, you know, the rewarded videos, these interstitial ads have also heard of something called offer walls can you explain what is an offer wall? chris benjaminsen 26 11 yeah, we actually don't think we have any games library or footballs anywhere but it's, it's basically, you know, you can get a reward in your game for doing another action right? so again, it's user opt in the use of one something and find alpha wallets typically, like extra coins, or whatever in the game and to get a get sort of a list of different options for things they could be doing right now to have some level of value and that can go all the way from, you know, signing up to a website, all the way up to you know, committing yourself to four years of sirius xm radio in the us, oh, really, you know, or whatever right? you know, and as there's different types of reward levels of that, right so but they can be significant, right so like that it's, it's sort of a way for other companies to interact with that consumer and get them to do something that has value to them and date and pay you for that service so it's a bit sort of a direct affiliate program or something like okay, okay yeah okay tony morelan 27 11 interesting so, you know, a lot of what we talked about now have been in game, you know, advertising for monetization so what about paid user acquisition? so actually going out there and advertising for your game? so you guys are active in that area? chris benjaminsen 27 23 not particularly, it's something we are exploring, and it is something that i believe it's going to be very important for the future of frp yeah but historically, it's not something that we done to a huge extent however, it is an area where we actually partner with the samsung galaxy appstore team, where we were looking at what is the best path for somebody who is publishing on the samsung galaxy app store to find sort of pockets of uses that can be that can be purchased right? tony morelan 27 51 okay okay so of all these different ways that we've talked about when it comes to monetization, what would you say is the most effective way in why? chris benjaminsen 28 00 and so there's many answers to that what has been the most successful for frvr suffice advertisement, that has mostly down to the kind of games that we have been building historically and the kind of games we've been building historically has mostly been the result of the capabilities for the platforms, our games has been available on, which, by and large, have not supported in app purchases however, if you were to look at where is the most potential value, it's most definitely in the in-app purchase space, right? like the potential value that you can derive from a single user is larger in app purchases than any other way you can monetize that user, even with subscriptions, right? make some simple math, you know, rewarded video is considered valuable, right but if you have a player, sort of watching 1000 ads a month, that might sort of in the united states be worth $20, or thereabouts, where $20 is not an uncommon average transactions for a central user to spending in app purchases, right and people typically buy more than once sort of the opportunity to create a great business around in app purchases is much higher, and opportunity to create a great business purely from advertisement tony morelan 29 08 got it? what would you say would be some advice that you can give for a developer looking to integrate iap? chris benjaminsen 29 15 like, like, it goes back to what we talked about earlier right? you know, build deep experiences, right? sure for like engagements, yeah, long engagements, and then then allow people to buy something that they, you know, feel like they're going to get value from a long period of time right and i think an important thing there is you must be trustworthy as a developer yeah right you know, like, like, like, the player must trust you to not to screw them over so if you have all kinds of other stuff into games, where they feel cheated, they're not going to give you their money or if you cheat them, they're only going to do it once right? yeah you know, so you actually have to provide something that brings real value to the user otherwise, they're, they're not going to engage with that thing right like they're not, they're not stupid they are very clever tony morelan 29 57 yeah so let's talk about a how you guys go about acquiring games for frvr? what do you look for? chris benjaminsen 30 03 like we look for, for great teams and i think it's important here that we are publisher, right? so we work with developers who take a fair amount of that total risk of building a game sometimes you find the games, right but predominantly, we work with great teams that is passionate about the game that they're working on and that's, that's mostly what we look for okay and then we help though, those developers to go and, and build fantastic games, right but due to the nature of our platform, at least how its structured right? now, you must basically build the game from scratch on top of stuff so so we're not a publisher that can sort of accept a game that somebody's already built, and say, yeah, we'll publish that it's more sort of a cool collaborative co development process, where we work together with developers to create fantastic things that work on top of our platform tony morelan 30 51 you know, i heard somewhere that between 50 to 1000 games are added to the app store's every day so i know it's a huge competition when it comes to games what's your strategy for discoverability? chris benjaminsen 31 03 i like as we talked about, go to the user where they are, rather than trying to drag them to the app store where it's very competitive, right and, like we use, we use all the tricks including branding, like we now have significant volume of people just searching for our games every day, both in app stores and on google, right and i truly did that basic strategy of saying let's bring our games to where the users are, has been very, very successful for us, and allowed us to sort of get in front of all of these consumers without diving deep into cost positive user acquisition and things like that and dental labs though, say they're hyper competitive, it gets very, very hard to get your game there, right and people talk about all of these things like influencer, marketing, and whatever and they don't call it user acquisition, but that's just what it is right? you know, it's just a different way of doing it right you know, it's all of these hacks to try to get in front of the user tony morelan 31 54 so are you using tools like creating promotional trailer videos and posting them on youtube? chris benjaminsen 32 00 we do we do that for some of our debug games, like a game like wells frvr yeah there's like there's a content team that creates content for social media that being you know; youtube and facebook and i think we even have posts on tik tok okay, tony morelan 32 14 so you guys have a ton of experience now, when it when it comes to publishing games? i'm sure you faced a few challenges can you share some stories and how you overcame those challenges? chris benjaminsen 32 24 a lot of our challenges is around scale right? you know, so we have 70 games on 39 platforms right wow and that didn't that in itself is a big number, right? to sort of, sort of manage this, like, that's more than 2000 combinations, almost 3000 combinations, right? we also have all of those games in 20 languages so when you when you sort of factor in those combinations, that's 50,000 combinations, right? and if you want localize screenshots, yeah, that's no way you could do that with humans, right and a lot of ways we try to solve with technology, right? that's what the what the frvr platform does, okay, encapsulate just the complexity of trying to do all of these things into sort of a unified platform and that goes for what is a good experience on the samsung galaxy appstore, like the samsung galaxy appstore has specific capabilities and specific api's and specific sort of things that work particularly well on a platform and if every developer had to consider that for all the platforms we were on, they would be spending none of their time making great games so we encapsulate that complexity into our platform and that's sort of the recipe that makes frvr work that's sort of removing humans from the equation, basically, tony morelan 33 42 that's interesting i mean, i can totally see how you guys are able to scale your reach with having so many games, but you've got quite a team behind so it's not all automated, you still do need to have those employees to support that chris benjaminsen 33 56 yeah, but like, 95% of those people work on the platform, right? to build the to build the infrastructure, right and frvr is also a company that's been growing quite a lot, i think, okay, two years ago, we were we were fewer than 20 people right? so a lot of the people who actually worked at frvr now people who joined us in the last year tony morelan 34 15 so what are some of the trends that you've seen in the in the gaming industry chris benjaminsen 34 19 or hotels that there's a lot of them right you know, there's a like i think the status trend i see is when you have say and among us or a fall guys or a flappy birds come out and be successful, like, like older people who try to get success by just following that recipe right? not realizing that the reasons those game were successful originally were sort of a bit of luck and timing and typically some external factors, like among us grew with discord and discord grew it among us yeah, right and that was sort of sort of the game to play on that platform, right and all the other games in that in that category by and large failed because it was just like it and not again but that right and, and a thing i think a lot of people have forgotten is that the game industry is cyclical, right? so you get a new channel it comes out it's very cheap and easy to get users on it initially and then that's the value of that platform goes up, it just becomes more and more expensive, right and people have sort of forgotten that's how the games industry used to work because mobile came along yeah and stuck around for a very long time to do to sort of these stores that were tied to specific devices right which, which is something you didn't really have on a on a pc, where there was more open competition on who could sort of have an app store tony morelan 35 40 yeah, yeah, for sure so tell me what is in the future for frvr chris benjaminsen 35 45 a lot more high-quality games? like that's basically our focus right now we are very fortunate, we just closed out a round funding wonderful yeah, thank you and like, the entire theme of that funding is we need, we need games of a completely different quality, right? so we are we are looking for fantastic studios who can come in and build games with sort of that depth that can support in app purchases that's the thing that we really want to focus on we want to want to have games that can have people play for years, not just once, right? tony morelan 36 18 yeah so as far vr is seeing this growth, what are you guys doing related to diversity and inclusion? chris benjaminsen 36 26 and we do a lot of things, right, like diversity and inclusion is something that we try to sort of have both across our games and across our company culture, right? so it can be everything from i personally created the hex frvr game so yeah, i got a nice email from somebody said, i love this game, but it can they call us i can see the different things, right so making sure that you're aware of the different kinds of colorblind people can be sure, sure and it also it also means a lot for hiring, like, like, what's the best candidate for the job is not necessarily the person that fits the checklist, the best that you see that you put on your yeah, other requirements yeah, in like diverse teams perform better so diversity is a is a virtue in the hiring process and it can be advantageous to hire the more diverse candidate if you have an opportunity to hire too, and like, but it means a lot like you have to be mindful of it everywhere those like natural biases, right now, a simple example of that is that the more bullet points you put on a on a job post about specific requirements, the less likely it is that females would, will apply for a job interesting, like a male candidate would sort of look at a long bullet point and see two things that good and go, yeah, i could totally do this, right? where if fema will see a long list and sort of say, i can only do two of these things i shouldn't apply for this right so you have to be mindful of those things all the way tony morelan 37 52 interesting yeah, i think giving someone the opportunity to really talk about their personality, and their value is probably the best way to go about finding that that good candidate chris benjaminsen 38 02 yeah and it's a big part of our it's a big part of our sort of, sort of, sort of hiring flow is the values right? you know, we also a, a company in portugal, that doesn't behave like a portuguese company, this particular company, company structure in particular is very hierarchical, right you know, some people might call it a bit old fashioned that's not the company we are, that's not the company we want to be so we want people that resonates with sort of a more flat structure, modern ways of working tony morelan 38 34 wonderful so if someone is interested, either in working for frvr, or their a game studio that want to bring their games to you, what's the best way for them to reach out to frvr? chris benjaminsen 38 45 like, like, send me an email first, right? you know, and, you know, i'll redirect you to the right person, my email is chris@frvr com so it's fairly straightforward, right? like, always happy to chat with people who do fantastic things tony morelan 38 57 yeah, that's great and we'll include links in the show notes too much about what we talked about today and into frvr websites so chris, i got to say, it was great to have you on the podcast i love learning all about frvr and what you guys are doing but let me ask when you're not working for frp or what is it that you'd like to do for fun? chris benjaminsen 39 15 i find most of my spare time is taken up by you know, walking the dog, or, you know, cooking food if it's some like i'm probably not good at cooking food in the winter but you know, like i like to grill outdoors and whatever right you know, and i actually try to keep a fairly strict work life balance wonderful so you know i am one of the people who like go into the office but mostly yes a way to not work while i'm at home tony morelan 39 40 that's great well hey, we're just about to hit the springtime of the year and soon will come summer so i'm sure you're going to enjoy lots of outdoor grilling when the when the season comes chris benjaminsen 39 49 hopefully, you never know where they're somewhere in london right? you know, that might be like two days where it's impossible that's tony morelan 39 56 awesome hey, chris, really appreciate you coming on the podcast today chris benjaminsen 39 59 no, thank do so much for having me closing 40 01 looking to start creating for samsung, download the latest tools to code your next app, or get software for designing apps without coding it all sell your apps to the world on the samsung galaxy store check out developer samsung com today and start your journey with samsung tony morelan 40 17 the samsung developers podcast is hosted by tony morelan and produced by jeanne hsu
Learn Developers Podcast
docseason 2, episode 7 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 guests eric cloninger, lead, developer relations team, samsung electronics chris shomo, infinity watchfaces listen download this episode topics covered sdc21, virtual conference history of the samsung developer conference conference audience keynote speakers conference announcements technical sessions expo floor galaxy store gallery code lab virtual reality after-hours party chris shomo, infinity watchfaces watch face studio 2020 best of galaxy store awards 2021 best of galaxy store awards bixby developers one ui beta samsung podcast platform smartthings helpful links sdc21, virtual conference - developer samsung com/sdc sdc18 highlights - youtube video sdc19 highlights - youtube video sdc19 replay - youtube video sdc21 preview - youtube video code lab - developer samsung com/codelab chris shomo, infinity watchfaces - youtube video watch face studio - developer samsung com/one-ui-watch 2020 best of galaxy store awards - youtube video 2021 best of galaxy store awards preview - youtube video bixby developers - bixbydevelopers com/ one ui beta - developer samsung com/one-ui-beta/index html samsung podcast platform - samsungpodcasts com/ smartthings - developer samsung com/smartthings samsung developers homepage - developer samsung com samsung developers newsletter - developer samsung com/newsletter samsung developers blog - developer samsung com/blog samsung developers news - developer samsung com/news samsung developers facebook - facebook com/samsungdev samsung developers instagram - instagram com/samsung_dev samsung developers twitter - twitter com/samsung_dev samsung developers youtube - youtube com/samsungdevelopers samsung developers linkedin - linkedin com/company/samsungdevelopers eric cloninger linkedin - linkedin com/in/ericcloninger/ chris shomo linkedin - linkedin com/in/christopher-shomo tony morelan linkedin - linkedin com/in/tony-morelan 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 seven today's show is a special episode of the pow! podcast last year, we were not able to have our annual samsung developer conference because of the pandemic but this year, we're back with sdc21, a virtual conference this coming october, i sat down with eric cloninger, who leads developer relations at samsung not only do we talk about some of the highlights from our past developer conferences, but what you can look forward to at this year's sdc21 enjoy hey, eric, welcome to the podcast eric cloninger 00 51 hey, tony glad to be here tony morelan 00 53 so i couldn't be more excited about this special episode where we get to chat about not only the past samsung developer conferences, but our upcoming sdc21 eric cloninger 01 03 yeah, it's gonna be a lot of fun it is different this year for certain tony morelan 01 06 let me first start off by asking what exactly is the samsung developer conference, eric cloninger 01 11 samsung creates a lot of different platforms and sdks for developers to create for and integrate with so sdc is one of the ways we promote our platforms, and educate developers on their capabilities like many companies, we realized that developers add a lot of value to our products with their own creations so sdc is our opportunity to share knowledge and hopefully build a connection to the people that are making our products better tony morelan 01 36 yeah, and what's unique with sdc 21 is this year, it's actually going to be a virtual conference now we know that it's because the current pandemic we're in, but it's, i think, an opportunity for samsung really to reach to a much bigger global audience that will be able to come in and attend our conference eric cloninger 01 55 certainly, you know, in the years past, it's been a live event and there would be quite a few people there -- several thousand now with it being virtual, we have a much bigger audience and people can actually see the technical sessions as well as the keynote online even though it's not in person, it is still something that where we can share knowledge, and people can give us feedback on what they like and don't tony morelan 02 21 let's go back and talk a little bit about the history of sdc i think it started back in 2013 is that correct? that's correct eric cloninger 02 29 and i was there in 2014, talking about the gear watch tony morelan 02 34 development wow, that must have been pretty close to when we first launched the watch eric cloninger 02 39 i think it was the first gear s was the product that that i was working on and we were talking about development tools and how to write apps for those watches tony morelan 02 49 since then, we've done seven sdcs that, you know, there was a year i think around 2015 that we skipped and of course last year, we did have to hold off on doing an actual conference past locations, primarily san francisco in the bay area eric cloninger 03 06 it's been at moscone every year until 2019, when it moved to san jose so it's always been in the bay area somewhere that people who attend tony morelan 03 15 tell me about, you know, what is what is the audience eric cloninger 03 19 the audience is primarily developers and the content is really focused on that group a lot of samsung employees attend to give the technical talks and a lot to people come from all over the world to work in the booths and on the show floor in one sense sdc is like a family reunion, we get a chance to meet the people that we've emailed with and been on web conferences for a long time that's a chance to come together but it's also the fruition of a year of hard work, you'll whether it's virtual or in person, we can use the opportunity to celebrate and to share what we've worked on with third party developer community tony morelan 04 05 yeah, i know, my first sdc was 2018 that was in san francisco i hit started at samsung just a few months earlier than that so it was a great opportunity, really, for me to meet, not just some of these employees that had only been, you know, emailing with but a lot of the partners that we had a great report with sdc 19 eric cloninger 04 29 i think there was over 5000 close to 6000 people that it's been five to 6000 every year since that i've been here yeah, so that's a fairly good-sized conference tony morelan 04 37 so let's talk about some of the past keynotes and some of the big announcements that we've made going back to 2017 i think we had stan lee, is that correct? eric cloninger 04 47 yeah, stan lee from marvel was one of the main speakers that was pretty interesting in 2018, we had a lot of people watching because that's the day that they announced the galaxy fold wow so the first time anybody saw it was on stage at sdc and there were probably a half a million people watching live on either facebook live or youtube tony morelan 05 13 i remember my takeaway from sdc18 was tim sweeney for fortnite epic games? eric cloninger 05 18 absolutely on stage with one of our vps who was holding your tiny sword and shield you know, it just it added to the silliness, but also the fun was pretty, pretty fun tony morelan 05 33 oh, definitely now sdc 19 we had another very interesting person up on the stage talk a little bit about vitalik eric cloninger 05 41 yeah, vitalik buterin is the co-founder of ethereum and that year, we also had justin sun from tron the blockchain community is very interesting and it's definitely a new aspect for samsung is we had the blockchain wallet sdk that was coming out that year and so we wanted to have people that could talk about their interactions with it so vitalik and justin, were on stage in the spotlight session on day two tony morelan 06 09 yeah, that was pretty exciting actually, to see him up on stage they're in live in person so a big part of our conference are the technical sessions, it's a chance for the community really to learn about new and upcoming technologies talk a bit about some of those sessions that we've had in the past eric cloninger 06 27 so pretty much any of samsung's technical features sdks and services have sessions at sdc so if you're interested in ai and voice activated services, you can go to multiple bixby sessions, if you're into the internet of things and how to integrate into samsung smartthings ecosystem, there will be information there you know, as i mentioned previously, there's blockchain, there's the knox partnership for if you want to do secure computing, one ui if you're a designer, and all the new foldable phones and devices out there, there's a lot of content around how to handle app continuity and the flex mode, as well as the unique things about foldable design that you can learn about, as well as things like samsung health and how to design for themes there's a wide range of technical sessions for pretty much anybody at any experience level tony morelan 07 24 yeah, yeah, in my area of involvement with the developer conference has been around that design side i mean, as you know, my background is in design, you know, when we are giving the sessions on theme, designing watchface designing that that's really where i get my involvement with so a lot of fun for me to be at the conference walking around the expo floor has been one of the most exciting things for me to be there because truthfully at these different conferences, you just don't know what you're going to see and i remember walking in the room if it was sdc 18 or 19 but seeing this awesome car on the expo floor, the harmon car eric cloninger 08 00 yeah, the great thing about the expo floor is where you, you get to do a lot of the kind of non-technical learning it's a great place in a more relaxed atmosphere to meet and talk to people about what's going on so the harmon car harman is a subsidiary of samsung, and they create high end audio equipment so i'm sure you're familiar with brands like harman, kardon, or jbl, or infiniti, all very high-end brands harman also creates infotainment systems and telematics solutions for automakers and so what they would do for several years is they would bring a car onto the show floor and deck it out with a lot of the latest software and hardware, as well as the audio systems for the attendees to sit in the car and try it out unfortunately, they wouldn't let us drive it around the show floor obviously tony morelan 08 47 i will say i actually did ride the elevator with the person who drove the car from southern california up to northern california for the show so i did get to ask a little bit about you know what it is like to get behind the wheel of that car and she said it was an absolute blast to drive it up five eric cloninger 09 04 i'm sure they had to go the speed limit though tony morelan 09 06 definitely i know that smart things back in 14, one of our first conferences they actually set up like what they call the connected home eric cloninger 09 14 yeah, it was actually a full size when not full sizes about a 900 square foot, you know, a 30 by 30 area where they had different rooms and inside each of those rooms, they would have different ways that you could integrate different iot solutions into the smart home tony morelan 09 32 now just to be clear, a 900 square foot home in san francisco actually is full size so in 2018, we did something i was actually pretty excited about we created what we called a gallery of theme so you know as you know, with the galaxy store, designers can publish their phone themes, but what we did is we took those designs and actually built like a museum gallery big, full size images of the different themes nicely framed, and people would walk around this gallery and not only see this beautiful, much larger than life theme design but this was a gallery where at the end of the conference, we actually raffled off the different pieces, eric cloninger 10 15 it really shows how we have a lot of incredibly creative people who are creating work for the galaxy store, and samsung galaxy devices all of those things that were shown in that that gallery are available for anyone to download and purchase on the galaxy store tony morelan 10 31 yeah, i know that that gallery really, really was a success in a lot of people really enjoyed seeing that worked in person another area of the floor that i saw had a lot of activity was code lab, talking about what exactly is code lab at the at the conference eric cloninger 10 46 code lab is an interactive learning experience, you don't have to actually be present at sdc to be able to use it samsung employees create guided learning modules, with examples and downloadable code snippets that you can use to learn anything from android development, watch face design, or theme by the time you've gone through everything tony morelan 11 13 so if people want to learn more about code lab outside of the conference, where can they find that information, eric cloninger 11 18 you can find the code lab on the samsung developer portal at developer samsung com/codelab tony morelan 11 26 so i think one of the most exciting things that i saw happen on the expo floor was the vr team, they set up this like photography studio that talk about that eric cloninger 11 36 so in 2018, that team created what was called a volumetric camera setup so it had cameras in a lot of different positions in 360 degrees so they would take a very detailed scan of your body, and then they would print it out on a 3d printer and so that was really cool and then the following year, that same team took that that same type of technology, and they integrated it with a live interactive experience called delusion and delusion was a very creepy, interactive experience where you interacted with all of these crazy characters and because of the time of the year, it was october 29, and 30th so it's just the day before halloween, okay, you had all of these various characters that you were interacting with in a 3d experience and the thing that was cool about it was the second night, we had this, you know, after hours segment and those characters in the game that actually came to life, and you actually saw these people walking around that you had interacted with, in the interactive exhibit tony morelan 12 49 yeah, i remember that being a very fun and freaky evening, i was i was working in one of the booths behind the scenes doors were closed and as they were prepping for the opening of the of the doors, the fog machine was rolling, that people started rushing in and then i saw those characters that had been in that interactive space, actually walking amongst the people and there were a few times that in a fun way, those a little not at ease with them with those different folks eric cloninger 13 23 yeah, it was kind of a creepy experience because some of those characters, i mean, they stayed in character, and they got to look right through you and it just it was very creepy experience so the after-hours is a lot of fun at you at sdc as it is, with a lot of events, it's an it's an opportunity to kind of be a lot more relaxed you'll see some people that you saw in the, the technical sessions earlier in the day, and you have a chance to maybe drill down a little deeper while you have, you know, a plate of food and beverage in your hand so it's a good experience overall and you know, to be honest, i'm looking forward to when we can do that again tony morelan 14 02 yeah, yeah, hopefully, hopefully that will be next year so i thought it would be nice if we brought in a designer slash developer who has been very involved with the samson community and who has not only attended and many of the past sdc conferences, but was also invited to speak at one of the past sessions chris shomo, from infinity watchfaces eric cloninger 14 20 hey, chris, welcome to the show chris shomo 14 23 hey, thank you for having me on here tony morelan 14 25 yeah, no, it's great it's great to have you on the podcast so looking back at the samsung developer program, chris has been one of those resources that we've turned to many times and it simply comes down to not only your success, but your willingness to share and, and really help grow the entire ecosystem for samsung watchfaces and galaxy devices chris shomo 14 43 well, one thing that i've learned is all about the community that's one of the reasons i love to share things that i find out because i've also reached out to other designers and ask them, you know, hey, how do you do this? how do you do that? and they're more than willing to share back so it really is a given take type of thing and you know, if you're nice, then you can find some answers that you're looking for out there tony morelan 15 04 there you go definitely and you know, honestly, the more success there is amongst all the designers just the more vibrant the galaxy store is just with, with lots of great content chris shomo 15 13 oh, yeah and just how it developed over time, too, because, like i've seen it, since the very beginning, when there was hardly anything on there and then just watching it explode to all these designs that you can't even imagine what's going to pop on there next it's exactly designed to blow me away all the time tony morelan 15 29 so chris is the person behind infinity watch faces, and truly is one of the first designers who started creating for the platform tell me what year was it that you actually started designing and selling on galaxy store? chris shomo 15 39 oh, goodness 2016 tony morelan 15 41 wow yeah so i actually did an episode on the podcast on chris last year, it was great episode, we talked about how you got your start creating for samsung and, and also that your house in savannah, georgia was featured in an episode of ghost hunters that it is haunted? chris shomo 15 56 yes, it is it's been quite an experience, even though i do believe that the ghost does appreciate me being here, i believe i do not know that but she's been pretty nice tony morelan 16 08 guys nice so if you want to learn much more about chris, go back to that episode and check it out it was it was a great show so in 2017, before i started working with samsung, you were actually invited to come out to san francisco and speak at the conference tell me about that chris shomo 16 22 wow, it was quite an experience and first off, it was my first developers conference, first type of any type of tech conference so i was a little nervous in the very beginning because here i am, i'm going to san francisco, and i'm getting ready to speak in front of a lot of other designers and developers what an experience it was great tony morelan 16 43 i'm sure it was nice to actually meet also the people, you know, not only at samsung, but then you know, some of the fellow developers that are part of this community chris shomo 16 51 yeah, and also met a lot of people that became future designers of for specifically watch faces, which was wonderful they always come back to me and be like, hey, i was there and i'm like, i remember you and you know, and they take off and they do very well yeah tony morelan 17 06 so i actually came across a video on youtube of you speaking at the conference and that's how i actually got my start how i first discovered that, you know, you can create these watch faces and, and start selling them for samsung now, i took it a step further and actually started working for samsung eventually chris shomo 17 23 yep and i think that's amazing i remember you sent me an email one time actually telling me that i had a typo on my website that's right and i was like, whoa, thank you, because it was just, uh, you know, no one wants a stupid typo on their website so i got that fixed and, and then i never knew that, you know, i'd be working with yeah, back and forth, like we are now and stuff so it's great it's amazing how everything is connected tony morelan 17 49 yeah so earlier this year, we announced a partnership with google and warehouse and introduced watch face studio to new tool for designing galaxy watch faces that are sold on the google play store when the tool was first developed, we asked you to be part of that early access team so can you tell me about that experience, how it is working with that tool, and what it's like to now publish on google play? chris shomo 18 10 well, first off, thank you for getting me in there and you recommended me for being part of that team and it was excellent to be part of it, because i was able to kind of push it to its limits for animations i had a really long animation, i was testing with it and i was sending it back and forth with samsung and it helped them iron out and smooth out how the animations were working on the watch and that was great and, you know, of course, there's going to be a little bit of growing pains in the very beginning we're working on that but it's been amazing how the team at samsung has been so responsive and to get the software right for us you can really create some masterpieces so i'm excited about this tony morelan 18 55 yeah, and that's why i thought it was so important to have you part of that team is because really your designs are not like the typical design i mean, you really do push the software to try and get the most out of it you know, they're there's fun, they're quirky, i mean animations are a huge part of your designs so is there anything new and exciting that we can anticipate coming out in the in the near future? chris shomo 19 15 oh, wow i don't really know myself because i kind of jumped around so much with these designs, which is another reason why yeah, i guess it's kind of unexpected and surprising when another one comes out at one time you'll have like dancing tigers in the next second you have dolphins and sea turtle swimming i'm working on getting one onto the google play store right now called flip out that has the dolphins and the sea turtles and then tiger time as well and then we got a giant eyeball for halloween that she's showing up so yeah, a bunch of different things tony morelan 19 48 you've got it in there they're super crazy they're very artistic chris shomo 19 51 thank you yeah, and it also one of the things that i like to concentrate on is trying to bring joy to people with the watch face is where they look at it and you know, just for a moment of time, they can actually, you know, take a break from reality, they get absorbed into the watch smile for a minute if that happens, and i know it's exceeded tony morelan 20 13 it also what i love is how you build in this sort of like goals where the watch will change, like, lets you step into an example, as you're reaching your different step goals throughout the day, your watch face then is also changing throughout the day chris shomo 20 27 and that started out of course, with the ties and watches and it worked with every one step goal percentage that they set with the watch and that was another thing that i'm glad i was in the beta because i was really expressing how much we needed a step goal percentage and to work with it, and they added it in after i requested it and it was really quick and of course there are some differences where we have to set the watch pace to its unique step goal as opposed to the user set step go but that's because of that they're trying to make it so it's compatible with all the different watches and where it was but that's cool, it opens up a new line of challenge faces where you can reach 1000 steps for this to happen 2000 steps for this to happen and i think it's really going to open the door for a lot of unique and creative designs tony morelan 21 17 you know, you brought up a great point that i always stress and that is how approachable samsung is to our developer community samsung really does listen to our developers and we actually want to have that one on one communications you know, through our different channels, it is really easy to reach out to us and we'll give you that that personal attention that we know our developers need when they're creating for samsung chris shomo 21 39 and i've really watched the developers program grow over time too because back in 2016 you know it was kind of a shot in the dark but everybody was like new to it samsung was new to this the watch faces and working with this well ready to be flooded of designers that are getting ready to come in and then every one of samsung embraced us we feel like we're part of a family tony morelan 22 02 thanks thanks, chris i got to thank you for jumping in and joining us on the podcast when sdc is back in person i hope to see you there, if not sooner, i will definitely be there chris shomo 22 10 count me in tony morelan 22 12 awesome thanks, chris thanks eric cloninger 22 15 it was great to hear from chris he's a part of the community of designers and developers that really make the galaxy store special tony morelan 22 22 yeah, he's been there from pretty much day one so it was great to catch up with chris and like i said, i can't wait to actually see him in person so it past sdcs, we've done what's called the best of galaxy store awards, i think, sec 18 was the first time that we did the show at the conference sec 19 that's when i actually hosted it down in san jose, it was great we have a lot of the winners actually, at the conference, we're able to recognize them for the great apps that they've created for galaxy store however, last year in 2020, because we did not have a conference, we did a virtual award show this was presented on youtube as a life premiere and it really actually was a lot of fun because we were able to reach out to a quite a big audience eric cloninger 23 09 one of the things i thought was cool about that once we all said in the chat room, it was in the early evening us time, but there were people logging in from russia and the czech republic and slovenia all of these developers and designers who had created things in one go is the middle of their night, but they were on there congratulating each other tony morelan 23 29 i think it really shows how the award show is really a global award show i mean we've got winners from all around the world winners from large companies down to indie designers and developers and it really is a huge, huge community eric cloninger 23 45 i think it shows how the galaxy store enables a lot of smaller operations, smaller individuals who may get lost in a larger organization that they can actually create something and monetize it and enjoy the success that they can have from their own work tony morelan 24 03 yeah, no that's very true that being said, though, there have been some pretty big names that we've recognized with awards in the past we've given awards to tik tok, epic games fortnite, microsoft with their franchise forza, top golf, that was another one and then there's a great company butterfly affected that his license big brands like spongebob, hello kitty, and star trek, it was great to see them recognized for their work eric cloninger 24 31 and also last year, for the first time, bixby developers had the opportunity to have their capsules judged and in 2020 the winner was spotify tony morelan 24 43 yeah, it was a lot of fun i actually worked on many of the trailers that were shown in the award show and spotify was one of the ones that i really, really enjoyed doing, not only the voiceover for but integrating the music and all the editing that was that was a lot of fun to work on that project and we look forward to that in 2021 eric cloninger 24 59 and so when is the award show this year tony morelan 25 05 so the award show will be part of sdc so that is on october 26 later on in the evening, though, we're going to be doing a premiere on youtube at 6pm eastern, and we will be participating in a live chat so we would love for, you know, not only the winners will be on participating in this live chat, but we would love just to have the community on there so we can all get together as a chance to, you know, congratulate the winners, and really talk about all of the great apps that were recognized during the award show eric cloninger 25 35 yeah, the one thing about this, that i think we did have a lot of fun with it last year, and we hope to have more fun this year in that chat session, the invitation goes out to really everyone who is interested in the galaxy ecosystem and that could be anybody who is a user or a consumer or a developer or a designer you know, we want to we want to celebrate everyone's hard work tony morelan 25 59 definitely, definitely and if you would like to actually go back and see who the previous winners are, and actually learn more about this upcoming award show, you can go over to developer samsung com forward slash awards to learn more about the best of galaxy store award show so let's talk about sdc 21 as you know, it's a virtual show that will be on october 26 where can people find out more information about registering to attend the virtual conference? eric cloninger 26 28 so the conference is free for anyone to attend, and you can learn more at developer samsung com slash sdc tony morelan 26 38 let's talk about some of the sessions what can you share about the sessions at sdc 21? eric cloninger 26 44 well, i don't want to steal any of the thunder from the product teams have been working so hard for the last year but it will tell you that most every technology team that is working on products at samsung will have something to talk about at sdc so if you're interested in the one ui beta, you'll learn a lot more about that at the sessions, the watchface tools, there's a podcasting platform that's brand new that i think you know something about, tony morelan 27 09 yeah, yeah, no, i am helping out the podcast platform team we're excited samsung has their new podcast platform, making it easy for users to listen to podcasts and we're really excited because in october, we're going to be expanding this platform to countries in europe so it's really a big deal you can check out my session and i kind of walk you through how it is that you submit your podcast to samsung so do you have any insight on what is going to be featured in the keynote, eric cloninger 27 38 i do have a little bit of information to share and one of the things that is always kind of fun with the keynote at sdc is that samsung president dj koh will be speaking as well as many other people from within the design and engineering teams at samsung as you know, the last physical sdc was in 2019, your seems like our world has kind of stopped but to be honest, the pace of technology keeps on moving and so nearly every samsung technology team will be there and they want to talk about all the innovation creation that they've done in the last two years so there'll be things announced for nearly every technology team from bixby and smartthings to mobile devices and smart tvs there's lots of information for developers that they will be able to use to create their own products for 2022 and beyond tony morelan 28 34 so really exciting sdc 21 is going to be october 26 eric cloninger 28 39 and if you want to attend, all you have to do is register at developer samsung com/sdc it's free to attend and we would love to see you there tony morelan 28 51 excellent hey, eric, thanks so much for being on the podcast super exciting to be back at it with sdc and i can't i can't wait for it eric cloninger 28 59 oh, absolutely it's really, it's the result of a year's worth of work by hundreds of people and we really want to share it with all the people out there tony morelan 29 10 yeah, it should be a great show right thanks, eric all right eric cloninger 29 13 thank you, tony closing 29 14 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 tony morelan 29 30 the pow! podcast is brought to you by the samsung developer program produced by tony morelan
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.