Starting May 9, 2022, all the documentation for Android SDK is available on Zettle Developer Portal.
Contact our developer support at Zettle Developer Portal.
Add card payments from Zettle to your own app
Home Page: https://developer.zettle.com/docs/android-sdk
Starting May 9, 2022, all the documentation for Android SDK is available on Zettle Developer Portal.
Contact our developer support at Zettle Developer Portal.
GitHub Advanced Security has been enabled on this repository as part of our automatic phased rollout.
Secret Scanning is now active, which means that in the "Security" tab, you may now see identified secrets that needs to be handled.
Code Scanning is not automatically activated - see documentation for how to enable it.
Read more about GitHub Advanced Security and the rollout in on the tech-guidelines wiki
Manifest merger succeeds at compile time and a java.lang.SecurityException is not thrown at runtime (see below).
What is the current behavior?
Manifest merger fails because Zettle services and receivers do not specify the android:exported attribute and an additional Bluetooth permission is needed at runtime:
java.lang.SecurityException: Need android.permission.BLUETOOTH_SCAN permission for android.content.AttributionSource@513489c3: GattService registerScanner
at android.os.Parcel.createExceptionOrNull(Parcel.java:2425)
at android.os.Parcel.createException(Parcel.java:2409)
at android.os.Parcel.readException(Parcel.java:2392)
at android.os.Parcel.readException(Parcel.java:2334)
at android.bluetooth.IBluetoothGatt$Stub$Proxy.registerScanner(IBluetoothGatt.java:1727)
at android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper.startRegistration(BluetoothLeScanner.java:426)
at android.bluetooth.le.BluetoothLeScanner.startScan(BluetoothLeScanner.java:278)
at android.bluetooth.le.BluetoothLeScanner.startScan(BluetoothLeScanner.java:154)
at com.izettle.payments.android.bluetooth.ble.PlatformScannerWrapperV21Impl.start(Line:6)
at com.izettle.payments.android.bluetooth.ble.BleScannerImpl.startScanner$zettle_payments_sdk(Line:1)
at com.izettle.payments.android.bluetooth.ble.BleScanner.onStartScan(Line:4)
at com.izettle.payments.android.bluetooth.ble.BleScanner.access$onStartScan(Line:1)
at com.izettle.payments.android.bluetooth.ble.BleScanner$$special$$inlined$stateObserver$1.onNext(Line:3)
at com.izettle.android.commons.state.StateImpl$$special$$inlined$forEach$lambda$1.invoke(Line:2)
at com.izettle.android.commons.state.StateImpl$$special$$inlined$forEach$lambda$1.invoke(Line:1)
at com.izettle.android.commons.thread.EventsLoopKt$sam$java_lang_Runnable$0.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.os.HandlerThread.run(HandlerThread.java:67)
<!-- Zettle services and receivers are not setting android:exported attribute -->
<service
android:name="com.izettle.android.auth.sync.ZettleSyncService"
android:permission="android.permission.BIND_JOB_SERVICE" />
<receiver
android:name="com.izettle.android.auth.sync.ZettleSyncAlarmReceiver" />
<service
android:name="com.izettle.android.auth.ZettleAuthService"
android:enabled="true" >
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
<meta-data
android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticator" />
</service>
Build and run using targetSdkVersion 31
targetSdkVersion 31 running on Android version 31
See stack trace above
How to login in transparent or auto login a app.
I need my app log without tell the account.
Waiting for a onlisten or handler to do a UI myself.
Thank you
Please could you provide documentation for Java?
GitHub Advanced Security has been enabled on this repository as part of our automatic phased rollout.
Secret Scanning is now active, which means that in the "Security" tab, you may now see identified secrets that needs to be handled.
Code Scanning is not automatically activated - see documentation for how to enable it.
Read more about GitHub Advanced Security and the rollout in on the tech-guidelines wiki
This issue is intermittent, it happen after zettle return to our application on "onActivityResult"
then crash the app.
What is the current behavior?
unknown
## Failure Logs
Fatal Exception: com.izettle.payments.android.readers.vendors.datecs.DatecsReaderV1$UnexpectedActionForState
Action FailInstallment[fa29fcd5-8bcd-4712-b5de-7b899ab01ff0] is not supported in state Ready
com.izettle.payments.android.readers.vendors.datecs.DatecsReaderV1.mutate$zettle_payments_sdk (SourceFile:2)
com.izettle.payments.android.readers.vendors.datecs.DatecsReaderV1.reduce (SourceFile:338)
com.izettle.payments.android.readers.vendors.datecs.DatecsReaderV1.reduce$zettle_payments_sdk (SourceFile:30)
com.izettle.payments.android.readers.vendors.datecs.DatecsReaderV1$action$1.invoke (SourceFile:2)
com.izettle.payments.android.readers.vendors.datecs.DatecsReaderV1$action$1.invoke (SourceFile:1)
com.izettle.android.commons.state.StateImpl.update (SourceFile:7)
com.izettle.payments.android.readers.vendors.datecs.DatecsReaderV1.mutate$zettle_payments_sdk (SourceFile:1)
com.izettle.payments.android.readers.vendors.datecs.DatecsReaderV1.mutate$zettle_payments_sdk (SourceFile:28)
com.izettle.payments.android.payment.InstallmentManagerImpl$ReaderStateObserver$onWaitingForInstallment$1.invoke (SourceFile:2)
com.izettle.payments.android.payment.InstallmentManagerImpl$ReaderStateObserver$onWaitingForInstallment$1.invoke (SourceFile:1)
com.izettle.android.commons.thread.EventsLoopKt$sam$java_lang_Runnable$0.run (SourceFile)
android.os.Handler.handleCallback (Handler.java:836)
android.os.HandlerThread.run (HandlerThread.java:61)
fix these two issues.
I wrote a custom cordova plugin with android , I found two issues.
First when charge process with enable login , on the login page, I can click login button multiple times, that will caused the page to repeat.
Second issue is in charge process with enable login, after I login successfully, back to OAuthActivity, the login page continue to show some time , about 1 - 8 seconds, this cause user could click login in button again. But if user ignore this , this page will disappear and go to next step after wait. To this callback OAuthActivity, I expect add a loading display or hide the login button , for it's in process.
Write a cordova plugin use sample java sdk, install and run.
App should open after updating to latest version (1.34.3, Not working) from 1.14.15 (This was working previously)
App is crashing with error on device android 10 tablet venturer vct9t48q34eu
I have updated library to latest version which is 1.34.3. And then run on Android 10 device. and it is crashing.
Fatal Exception: java.lang.NoSuchMethodError
No virtual method setDefaultColorSchemeParams(Landroidx/browser/customtabs/CustomTabColorSchemeParams;)Landroidx/browser/customtabs/CustomTabsIntent$Builder; in class Landroidx/browser/customtabs/CustomTabsIntent$Builder; or its super classes (declaration of 'androidx.browser.customtabs.CustomTabsIntent$Builder' appears in /data/app/com.pospal.pospal-LAhTdDFU-3qKcdpYHVk3ew==/base.apk)
Fatal Exception: java.lang.NoSuchMethodError: No virtual method setDefaultColorSchemeParams(Landroidx/browser/customtabs/CustomTabColorSchemeParams;)Landroidx/browser/customtabs/CustomTabsIntent$Builder; in class Landroidx/browser/customtabs/CustomTabsIntent$Builder; or its super classes (declaration of 'androidx.browser.customtabs.CustomTabsIntent$Builder' appears in /data/app/com.pospal.pospal-LAhTdDFU-3qKcdpYHVk3ew==/base.apk)
at com.izettle.android.auth.AuthWebLauncherImpl.launchCustomTab$auth_release(SourceFile:8)
at com.izettle.android.auth.AuthWebLauncherImpl.launchInBrowser(SourceFile:2)
at com.izettle.android.auth.OAuthActivity.onResume(SourceFile:10)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1453)
at android.app.Activity.performResume(Activity.java:7939)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4223)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4265)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2041)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7386)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:980)
After logging in and authorizing the app, the flow should return to the client app with a valid access token, prompting the user to select card readers.
App remains on the page with the login button. The app doesn't appear to receive the OAuth access token.
Update a previously working integration from 1.25.6 to 1.30.1
Are there any related known issues with 1.30.1 that are being worked on? Has anyone else reported similar issues after upgrading to 1.30.1?
Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions.
Here's the request to the browser:
2022-07-08 13:44:33.404 20232-20232/com.planetcoops.android.taximeter I/AuthWebLauncherImpl: Launching browser with URI https://oauth.zettle.com/authorize?client_id=[redacted]&scope=READ%3APAYMENT%20WRITE%3APAYMENT%20READ%3AUSERINFO&redirect_uri=com.planetcoops.taximeter%3A%2F%2Fauth&code_challenge=W8w60LUSwxLY0EKDSGCJKA5gHNkJA51Ll0Vd6h_u7Co&code_challenge_method=S256&response_type=code&app=payments-sdk&prompt=login&app_version=1.1.130&os=android&os_version=30&udid=ADb45e84249597414bb782a0f3578b8fd8ec07c4&locale=en-GB&state=eyJjYWxsaW5nQWN0aXZpdHlDbGFzcyI6ImNvbS5pemV0dGxlLnBheW1lbnRzLmFuZHJvaWQudWkucGF5bWVudC5DYXJkUGF5bWVudEFjdGl2aXR5IiwidGFza0lkIjoiODdjNWY5MDktMWI1Yi00ZDczLTg5Y2MtZDhlOTgwMjZmMjFhIiwidGFza1R5cGUiOiJjb20uaXpldHRsZS5hbmRyb2lkLmF1dGgudGFza3MuT0F1dGhMb2dpblRhc2sifQ
at com.izettle.android.auth.log.StackTraceKt.withStackTrace(SourceFile:1)
at com.izettle.android.auth.AuthWebLauncherImpl.launchInBrowser(SourceFile:1)
at com.izettle.android.auth.OAuthActivity.onResume(SourceFile:10)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1456)
at android.app.Activity.performResume(Activity.java:8135)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4434)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4476)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
First let me say that I have very limited android development experience, but have successfully used the Kotlin template to make a functioning app that suits my needs.. except for one thing:
When a payment is initiated as in the template and completed successfully, the CardPaymentActivity exits and returns to my MainActivity, however when the payment fails or times out, the CardPaymentActivity stays active until I press the return button on screen/back button on my phone.
How can I close the CardPaymentActivity automatically if the payment fails or gets cancelled, so that I can use the onActivityResult function to relaunch a payment request?
I have tried running a timer in my MainActivity that after 60seconds tries to close the CardPaymentActivity with no success using the following approaches:
CardPaymentActivity().onBackPressed() *app crashes
CardPaymentActivity().finish() *nothing happens
Due to my lack of experience working with Android, I am not really sure if this is the right way to go about it (probably not!).
Hopefully there is an easy solution to this problem.
Thanks
It should show pair card selection option Like iOS.Currently no option showing to pair card .If we enter amount lower then amount iis too low popup shown
It's showing Technical error. This payment may have not gone through. Please check your receipts and try again
After initialising SDK .Called code for card payment activity like
String internalTraceId = UUID.RandomUUID().ToString();
TransactionReference reference = new TransactionReference.Builder(internalTraceId)
.Put("PAYMENT_EXTRA_INFO", "Started from home screen")
.Build();
Intent intent = new CardPaymentActivity.IntentBuilder(this)
.Amount(100).
Reference(reference)
.EnableInstalments(false)
.EnableTipping(false)
.EnableLogin(true)
.Build();
StartActivityForResult(intent, 0);
We have done binding for xamarin using all your aar fiile and dependency
Please include any relevant log snippets or files here.
[MagnesPostRequest] MagnesPostRequest returned PayPal-Debug-Id: 53ff64d365bd6
[TokenRepositoryImpl] [{userId=91cacc1e-ec0d-11ea-adb3-38b41d49ad22, tokens=OAuthTokens(accessToken=ey2g, refreshToken=IZ5e, expirationDate=Mon Aug 01 03:49:41 EDT 2022, scopes=[READ:PAYMENT, READ:USERINFO, WRITE:PAYMENT])}]
[TokenRepositoryImpl] at com.izettle.android.auth.log.StackTraceKt.withStackTrace(SourceFile:1)
[TokenRepositoryImpl] at com.izettle.android.auth.TokenRepositoryImpl$storeTokens$storageAction$1.invoke(SourceFile:15)
[TokenRepositoryImpl] at com.izettle.android.auth.TokenRepositoryImpl$storeTokens$storageAction$1.invoke(SourceFile:1)
[TokenRepositoryImpl] at com.izettle.android.auth.storage.AuthStorageKt.runIfCanonicalToResultOtherwiseFail(SourceFile:3)
[TokenRepositoryImpl] at com.izettle.android.auth.TokenRepositoryImpl.storeTokens(SourceFile:18)
[TokenRepositoryImpl] at com.izettle.android.auth.token.TokenManagerImpl.storeTokenPair(SourceFile:1)
[TokenRepositoryImpl] at com.izettle.android.auth.token.TokenManagerImpl.refresh$auth_release(SourceFile:23)
[TokenRepositoryImpl] at com.izettle.android.auth.token.TokenManagerImpl.refresh$auth_release$default(SourceFile:1)
[TokenRepositoryImpl] at com.izettle.android.auth.token.TokenManagerImpl.refreshAccessTokenIfNeeded$auth_release(SourceFile:165)
[TokenRepositoryImpl] at com.izettle.android.auth.token.TokenManagerImpl.getAccessToken(SourceFile:2)
[TokenRepositoryImpl] at com.izettle.android.auth.ZettleAuthServices$accessTokenResolver$2$1.invoke(SourceFile:2)
[TokenRepositoryImpl] at com.izettle.android.auth.ZettleAuthServices$accessTokenResolver$2$1.invoke(SourceFile:1)
[TokenRepositoryImpl] at com.izettle.android.auth.repository.ServiceUriRepositoryImpl.getServiceUrls(SourceFile:1)
[TokenRepositoryImpl] at com.izettle.android.auth.repository.ServiceUriRepository$DefaultImpls.getServiceUrls$default(SourceFile:1)
[TokenRepositoryImpl] at com.izettle.android.auth.repository.ClientServicesRepositoryImpl.getServiceUrl(SourceFile:11)
[TokenRepositoryImpl] at com.izettle.android.auth.ZettleAuthImpl.getServiceUrls(SourceFile:1)
[TokenRepositoryImpl] at com.izettle.payments.android.readers.core.network.service.ServiceUrlsManagerImpl$ServiceUrlImpl$serviceUrls$1.invoke(SourceFile:2)
[TokenRepositoryImpl] at com.izettle.payments.android.readers.core.network.service.ServiceUrlsManagerImpl$ServiceUrlImpl$serviceUrls$1.invoke(SourceFile:1)
[TokenRepositoryImpl] at kotlin.UnsafeLazyImpl.getValue(Lazy.kt:81)
[TokenRepositoryImpl] at com.izettle.payments.android.readers.core.network.service.ServiceUrlsManagerImpl$ServiceUrlImpl.url(SourceFile:31)
[TokenRepositoryImpl] at com.izettle.payments.android.readers.core.network.NetworkClientImpl$request$4$1.invoke(SourceFile:2)
[TokenRepositoryImpl] at com.izettle.payments.android.readers.core.network.NetworkClientImpl$request$4$1.invoke(SourceFile:1)
[TokenRepositoryImpl] at com.izettle.android.net.RequestKt.request(SourceFile:1)
[TokenRepositoryImpl] at com.izettle.payments.android.readers.core.network.NetworkClientImpl$request$4.invoke(SourceFile:2)
[TokenRepositoryImpl] at com.izettle.payments.android.readers.core.network.NetworkClientImpl$request$4.invoke(SourceFile:1)
[TokenRepositoryImpl] at com.izettle.android.auth.okhttp.OkHttpClientWrapper.executeRequestAsync$lambda-2(SourceFile:1)
[TokenRepositoryImpl] at com.izettle.android.auth.okhttp.OkHttpClientWrapper.lambda$BRiHcBZCj4TR4fpO6oVkrxxxuQg(Unknown Source:0)
[TokenRepositoryImpl] at com.izettle.android.auth.okhttp.-$$Lambda$OkHttpClientWrapper$BRiHcBZCj4TR4fpO6oVkrxxxuQg.run(Unknown Source:8)
[TokenRepositoryImpl] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
[TokenRepositoryImpl] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[TokenRepositoryImpl] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
[TokenRepositoryImpl] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
[TokenRepositoryImpl] at java.lang.Thread.run(Thread.java:919)
[TokenRepositoryImpl]
[com.hikepos] Long monitor contention with owner OkHttp Dispatcher (2970) at com.izettle.android.auth.storage.Transaction com.izettle.android.auth.storage.AuthStorage.beginTransaction()(SourceFile:1) waiters=0 in com.izettle.android.core.data.result.Result com.izettle.android.auth.repository.ServiceUriRepositoryImpl.getServiceUrls(boolean) for 5.690s
[OpenGLRenderer] endAllActiveAnimators on 0xbb25fe00 (RippleDrawable) with handle 0xbf702550
[com.hikepos] Reducing the number of considered missed Gc histogram windows from 155 to 100
Refund to go through successfully.
It failed with a message Card payment activity must be specified right after a refund is requested.
Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions.
requestRefund: {reference=***, taxAmount=null, receiptNumber=null, refundAmount=null}
java.lang.IllegalArgumentException: Card payment must be specified
at com.izettle.payments.android.ui.refunds.RefundsActivity$IntentBuilder.build(SourceFile:17)
Open CardReadersActivity
CardReadersActivity crashes due to android.view.InflateException
startActivity(CardReadersActivity.newIntent(this))
Call CardReaderActivity
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mobonapps.kiosk, PID: 27501
android.view.InflateException: Binary XML file line #29: Binary XML file line #29: Error inflating class TextView
Caused by: android.view.InflateException: Binary XML file line #29: Error inflating class TextView
Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 15: TypedValue{t=0x2/d=0x7f040129 a=-1}
at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:731)
at android.view.View.<init>(View.java:5030)
at android.widget.TextView.<init>(TextView.java:892)
at android.widget.TextView.<init>(TextView.java:886)
at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1551)
at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1602)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:873)
at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:806)
at androidx.appcompat.app.AppCompatDelegateImpl.onPostCreate(AppCompatDelegateImpl.java:527)
at androidx.appcompat.app.AppCompatActivity.onPostCreate(AppCompatActivity.java:127)
at android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1343)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3006)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1820)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6758)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
I am having problems with my PHP for the Oauth2 authentication (Access token fetch)
I can get the βcodeβ + βstateβ in my PHP script β but when I try to fetch the access token from βhttps://oauth.izettle.com/tokenβ I am getting an error message :
βjson={"error":"invalid_request","error_description":"code_verifier cannot be empty"}β
I have all the code compiling and building in android studio β that is all good - no modifications to the main code - values are setup in iZettleSDK.gradle (githubAccessToken/clientId/redirectUrlScheme/redirectUrlHost)
βjson={"error":"invalid_request","error_description":"code_verifier cannot be empty"}β
I am attempting a private integration of the android zettle sdk, and would prefer to use the Assertion Grant rather than the authorization code grant. This is because I do not wish my users to have to type in an iZettle username and password, as well as their authentication with my own ordanisation. I'm hoping to authenticate the user myself, and then generate and pass on the zettle access token myself.
Is this possible with the android sdk? I cannot see any methods on the User object where I might use an access token to authenticate.
Or am I missing something fundamental? I'm new to OAuth and might have completely missed the point...
Thanks,
Chris
Hello IZettle Team we discovered that the buttons in the SDK views are not displaying correctly.
The tests were performed on a tablet samsung galaxy Tab A 8 '2019 with Android version 9.0
We attach screenshots of how the view is currently displayed. As you can see, no button with color is shown to the user.
Is there any way that the SDK can send a receipt to the customer?
ie. Can they enter their phone no / email, and have the receipt emailled/texted to them?
Is there an iZettle reader that does not require Bluetooth LE (for older Android devices)? And if so, does this SDK support those readers? Thank you.
Consuming SDK in Xamarin by creating Binding Wrappers.
When using those Binding Libraries Ressources are bundled at apk level using a new version of aapt.
The build fails because one ressource string (refunds_amount_description) uses multiple placeholders that are not numbered.
Old versions of aapt write only a warning into the log like that (all languages):
.....gradle\caches\transforms-2\files-2.1\259216afb29571d06e4d1303dd438c77\jetified-android-sdk-ui-1.14.15\res\values\values.xml:806:4: Multiple substitutions specified in non-positional format of string resource
string/refunds_amount_description. Did you mean to add the formatted="false" attribute?
For new versions of aapt this is thrown as an error, meaning the issue will be observed for pure java/kotlin android projects too.
Please fix refunds_amount_description by using something like %1$s and %2$s instead of %@
When starting a payment intent for a user that is not logged in, a NotAuthorized
exception should be thrown - as explained in the README
.
An empty modal is displayed with no way to close it. Only force-quitting the app will make it go away.
I would like to recommend to either actually raise the NotAuthorized
-exception or - even better in my opinion - to just trigger the OAUTH login-process.
val paymentIntent = CardPaymentActivity.IntentBuilder(activity)
.amount((receipt_total * BigDecimal("100.00")).toLong()) // TODO: Does not work for 0-digit currencies
.reference(reference)
.enableTipping(false)
.build()
activity.startActivityForResult(paymentIntent, REQUEST_CODE_EFT_PAYMENT)
Of course we can (and are) wrapping the activity.startActivityForResult
in a check if the user is logged in - but this should not be necessary, imho.
What is the current behavior?
App crashes with the following stack:
--- STACK ---
java.lang.NoClassDefFoundError: Failed resolution of: Llib/android/paypal/com/magnessdk/MagnesSDK;
at com.izettle.payments.android.payment.TransactionsManager$Companion$a.a(Line:1)
at com.izettle.payments.android.payment.TransactionsManager$Companion$a.invoke(Line:1)
at com.izettle.payments.android.payment.TransactionsManagerImpl.getReferenceWithMagnesClientId$payment_release(Line:1)
at com.izettle.payments.android.payment.TransactionsManagerImpl.createAndStartTransaction(Line:1)
at com.izettle.payments.android.payment.TransactionsManagerImpl.reduce(Line:2)
at com.izettle.payments.android.payment.TransactionsManagerImpl.reduce$payment_release(Line:1)
at com.izettle.payments.android.payment.TransactionsManagerImpl$c.a(Line:1)
at com.izettle.payments.android.payment.TransactionsManagerImpl$c.invoke(Line:1)
at com.izettle.android.commons.state.StateImpl.update(Line:4)
at com.izettle.payments.android.payment.TransactionsManagerImpl.action(Line:1)
at com.izettle.payments.android.models.payment.PaymentViewModelImpl.mutate$view_models_release(Line:10)
at com.izettle.payments.android.models.payment.PaymentViewModelImpl$a.a(Line:1)
at com.izettle.payments.android.models.payment.PaymentViewModelImpl$a.invoke(Line:1)
at com.izettle.android.commons.state.StateImpl.update(Line:7)
at com.izettle.payments.android.models.payment.PaymentViewModelImpl.action(Line:1)
at com.izettle.payments.android.models.payment.PaymentViewModelImpl.access$action(Line:1)
at com.izettle.payments.android.models.payment.PaymentViewModelImpl$$special$$inlined$stateObserver$1.onNext(Line:2)
at com.izettle.android.commons.state.StateImpl$b.a(Line:1)
at com.izettle.android.commons.state.StateImpl$b.invoke(Line:1)
at com.izettle.android.commons.thread.a.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.ClassNotFoundException: lib.android.paypal.com.magnessdk.MagnesSDK
... 27 more
Initiate a payment when using com.izettle.payments:android-sdk-ui:1.14.8
Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions.
Phone Model: Pixel 2
Android Version: 11
Board: walleye
Brand: google
Device: walleye
Display: RP1A.201005.004.A1
Finger Print: google/walleye/walleye:11/RP1A.201005.004.A1/6934943:user/release-keys
Host: abfarm873
ID: RP1A.201005.004.A1
Manufacturer: Google
Model: Pixel 2
Product: walleye
Tags: release-keys
Time: 1603833891000
Type: user
User: android-build
Total Internal Memory: 56040513536
Available Internal Memory: 20652740608
Please include any relevant log snippets or files here.
--- STACK ---
java.lang.NoClassDefFoundError: Failed resolution of: Llib/android/paypal/com/magnessdk/MagnesSDK;
at com.izettle.payments.android.payment.TransactionsManager$Companion$a.a(Line:1)
at com.izettle.payments.android.payment.TransactionsManager$Companion$a.invoke(Line:1)
at com.izettle.payments.android.payment.TransactionsManagerImpl.getReferenceWithMagnesClientId$payment_release(Line:1)
at com.izettle.payments.android.payment.TransactionsManagerImpl.createAndStartTransaction(Line:1)
at com.izettle.payments.android.payment.TransactionsManagerImpl.reduce(Line:2)
at com.izettle.payments.android.payment.TransactionsManagerImpl.reduce$payment_release(Line:1)
at com.izettle.payments.android.payment.TransactionsManagerImpl$c.a(Line:1)
at com.izettle.payments.android.payment.TransactionsManagerImpl$c.invoke(Line:1)
at com.izettle.android.commons.state.StateImpl.update(Line:4)
at com.izettle.payments.android.payment.TransactionsManagerImpl.action(Line:1)
at com.izettle.payments.android.models.payment.PaymentViewModelImpl.mutate$view_models_release(Line:10)
at com.izettle.payments.android.models.payment.PaymentViewModelImpl$a.a(Line:1)
at com.izettle.payments.android.models.payment.PaymentViewModelImpl$a.invoke(Line:1)
at com.izettle.android.commons.state.StateImpl.update(Line:7)
at com.izettle.payments.android.models.payment.PaymentViewModelImpl.action(Line:1)
at com.izettle.payments.android.models.payment.PaymentViewModelImpl.access$action(Line:1)
at com.izettle.payments.android.models.payment.PaymentViewModelImpl$$special$$inlined$stateObserver$1.onNext(Line:2)
at com.izettle.android.commons.state.StateImpl$b.a(Line:1)
at com.izettle.android.commons.state.StateImpl$b.invoke(Line:1)
at com.izettle.android.commons.thread.a.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.ClassNotFoundException: lib.android.paypal.com.magnessdk.MagnesSDK
... 27 more
The refunds appear in the izettle dashboard.
The refund is successful but the transaction is not shown in the izettle dashboard.
GitHub Advanced Security has been enabled on this repository as part of our automatic phased rollout.
Secret Scanning is now active, which means that in the "Security" tab, you may now see identified secrets that needs to be handled.
Code Scanning is not automatically activated - see documentation for how to enable it.
Read more about GitHub Advanced Security and the rollout in on the tech-guidelines wiki
After update from com.izettle.payments:android-sdk-ui:1.8.9 to com.izettle.payments:android-sdk-ui:1.14.15 the app does not start run.
Works with the old version
Duplicate class lib.android.paypal.com.magnessdk.Environment found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.InvalidInputException found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.MagnesResult found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.MagnesSDK found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.MagnesSettings found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.MagnesSettings$1 found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.MagnesSettings$Builder found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.MagnesSource found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.R found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.a found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.a.a found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.a.b found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.a.c found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.b found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.b.a found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.c found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.d found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.d$1 found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.d$a found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.d$b found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.e found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.MagnesNetworkingFactoryImpl found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.PayPalCertificate found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.a found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.b found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.c found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.d found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.e found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.f found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.g found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.h found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.httpclient.MagnesNetworking found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.httpclient.MagnesNetworkingFactory found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.i found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.j found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.k found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.l found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.m found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.n found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
Duplicate class lib.android.paypal.com.magnessdk.network.o found in modules jetified-android-sdk-1.14.15-runtime (com.izettle.payments:android-sdk:1.14.15) and jetified-data-collector-3.7.2-runtime (com.paypal.android.sdk:data-collector:3.7.2)
I was building a payment app on both Android and iOS. I wanted to restrict the usage of the SDK to a certain iZettle account as I could do it on iOS.
On iOS I saw that we have the feature Enforced User Account but Android.
This might not be the best place to post this as it's not an issue as such. I would like to include the capability to send Payment Links from a bespoke app for a private client. My client is currently using the IZettle app, but they are exploring their own bespoke solutions catered for their use case integrated with the IZettle card reader and also have the capability to send Payment Links from this bespoke app for their business. Is this currently possible with the SDK? If not, then is there any plans to add this in the future?
Thanks,
xeb
GitHub Advanced Security has been enabled on this repository as part of our automatic phased rollout.
Secret Scanning is now active, which means that in the "Security" tab, you may now see identified secrets that needs to be handled.
Code Scanning is not automatically activated - see documentation for how to enable it.
Read more about GitHub Advanced Security and the rollout in on the tech-guidelines wiki
I would like to use a Zettle terminal with multiple devices. I would like to be able to process a payment on both devices one after the other.
Is it possible to use a Zettle terminal with multiple devices that have the SDK integrated?
When I complete a payment with the first device and then want to start a payment with a second device, I can't connect to the terminal. Only when I completely close my app on the first device can I establish a connection with the second device. It seems that the Bluetooth connection does not end automatically.
Does anyone have experience dealing with this?
Use an App with integrated SDK on two devices with one zettle terminal. Complete an payment on device 1 and then try to start an payment on device 2.
Multiple point of sales running the same POS-App with the integrated zettle sdk and one zettle card terminal.
Good day I've been looking for a way to manual entry cards using SDK in Android and iOS can you help me?, thanks!
No crash
Crash with stack:
java.lang.RuntimeException:
at android.app.ActivityThread.handleBindApplication (ActivityThread.java:6759)
at android.app.ActivityThread.access$1400 (ActivityThread.java:244)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1952)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:223)
at android.app.ActivityThread.main (ActivityThread.java:7700)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:997)
Caused by: java.lang.SecurityException:
at android.os.Parcel.createExceptionOrNull (Parcel.java:2373)
at android.os.Parcel.createException (Parcel.java:2357)
at android.os.Parcel.readException (Parcel.java:2340)
at android.os.Parcel.readException (Parcel.java:2282)
at android.net.IConnectivityManager$Stub$Proxy.getNetworkCapabilities (IConnectivityManager.java:2456)
at android.net.ConnectivityManager.getNetworkCapabilities (ConnectivityManager.java:1417)
at com.izettle.android.commons.network.NetworkImplV21. (NetworkImplV21.java:199)
at com.izettle.android.commons.network.NetworkImplV21. (NetworkImplV21.java:190)
at com.izettle.android.commons.network.Network$Companion.create (Network.java:111)
at com.izettle.payments.android.sdk.IZettleSDK$Instance.init (IZettleSDK.java:139)
at com.izettle.payments.android.sdk.IZettleSDK$Instance.init (IZettleSDK.java:113)
at com.planetcoops.android.taximeter.TaximeterApplication.onCreate (TaximeterApplication.java:88)
at android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1192)
at android.app.ActivityThread.handleBindApplication (ActivityThread.java:6754)
at android.app.ActivityThread.access$1400 (ActivityThread.java:244)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1952)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:223)
at android.app.ActivityThread.main (ActivityThread.java:7700)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:997)
Caused by: android.os.RemoteException:
at android.app.AppOpsManager.checkPackage (AppOpsManager.java:7757)
at com.android.server.MtkConnectivityService.getNetworkCapabilities (MtkConnectivityService.java:1724)
at android.net.IConnectivityManager$Stub.onTransact (IConnectivityManager.java:978)
at android.os.Binder.execTransactInternal (Binder.java:1154)
at android.os.Binder.execTransact (Binder.java:1123)
Appears to crash on Android 11 when calling the iZettle SDK's init. The SecurityException is thrown when calling the ConnectivityManager's getNetworkCapabilites() and the issue is described here, https://stackoverflow.com/questions/67886957/securityexception-when-calling-getnetworkcapabilities-on-android-11
It would appear to be intermittent so catching the exception and retrying might be a way to workaround the issue?
Nokia 2.4 running Android 11
SDK 1.14.15
I'm seeing similar issue to #54
Around 42 times in the last 14 days out of thousands of successful transactions.
Since upgrading from 1.14.16 to 1.32.0
Android 8.1.0
Elo-i3-22Std
Various errors:
#com.izettle.payments.android.readers.vendors.datecs.ReaderV2Transport$RxConnection getRxConnection()
Action Request(2049, true) is not supported in state ConnectingToRx
Action Ready is not supported in state ConnectedToPw
#com.izettle.payments.android.readers.vendors.datecs.DatecsReaderV2
Command 0x7C0102000001007E is not expected in state Configured
Command 0x000482180006CA040000001244 is not expected in state TransactionConfirmedByReader
Command 0x0B01020000010009 is not expected in state TransactionInitializing
Command 0x000482180006CA04000000095F is not expected in state ConfigurationStarting
Due to the requirement to upgrade to this later version for the newer bluetooth modules, I can't go back to the working version.
Any help would be appreciated.
Working with gift cards
What is the current behavior?
No documentation found for working with gift cards
No documentation found
Custom Android and iOS app
No documentation found
GitHub Advanced Security has been enabled on this repository as part of our automatic phased rollout.
Secret Scanning is now active, which means that in the "Security" tab, you may now see identified secrets that needs to be handled.
Code Scanning is not automatically activated - see documentation for how to enable it.
Read more about GitHub Advanced Security and the rollout in on the tech-guidelines wiki
No crash
Crash with stack:
java.lang.RuntimeException:
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3303)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3411)
at android.app.ActivityThread.-wrap12 (Unknown Source)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1994)
at android.os.Handler.dispatchMessage (Handler.java:108)
at android.os.Looper.loop (Looper.java:166)
at android.app.ActivityThread.main (ActivityThread.java:7529)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:245)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:921)
Caused by: java.lang.IllegalStateException:
at android.os.Parcel.readException (Parcel.java:1962)
at android.os.Parcel.readException (Parcel.java:1900)
at android.app.IActivityManager$Stub$Proxy.setRequestedOrientation (IActivityManager.java:5704)
at android.app.Activity.setRequestedOrientation (Activity.java:6132)
at com.izettle.payments.android.ui.payment.CardPaymentActivity.onCreate (CardPaymentActivity.java:83)
at android.app.Activity.performCreate (Activity.java:7383)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1218)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3256)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3411)
at android.app.ActivityThread.-wrap12 (Unknown Source)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1994)
at android.os.Handler.dispatchMessage (Handler.java:108)
at android.os.Looper.loop (Looper.java:166)
at android.app.ActivityThread.main (ActivityThread.java:7529)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:245)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:921)
We can't reproduce, the crashes come from Google Play Console reports, but suspect it is this issue:
User is running
Huawei HUAWEI MediaPad T3 10
Android 8.0 (SDK 26)
Making a payment request for 100.000.000,00 Euro should prompt a payment for exactly that amount on the reader.
Signed 32bit integer overflow
val paymentIntent = CardPaymentActivity.IntentBuilder(activity)
.amount((receipt_total * BigDecimal("100.00")).toLong()) // TODO: Does not work for 0-digit currencies
.reference(reference)
.enableTipping(false)
.build()
Witnessing several crashes with the following stack from the Developer Console:
java.lang.ArrayIndexOutOfBoundsException:
at com.izettle.payments.android.readers.vendors.datecs.crone.a. (a.java:64)
at com.izettle.payments.android.readers.vendors.datecs.crone.CroneCommand$Companion.wrap (CroneCommand.java:38)
at com.izettle.payments.android.readers.vendors.datecs.crone.DecryptedResponseContainerImpl.toCommand (DecryptedResponseContainerImpl.java:254)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl.reduce (ReaderV2TransportImpl.java:400)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl.reduce$readers_release (ReaderV2TransportImpl.java:260)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl$c.a (ReaderV2TransportImpl.java:239)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl$c.invoke (ReaderV2TransportImpl.java:212)
at com.izettle.android.commons.state.StateImpl.update (StateImpl.java:87)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl.action (ReaderV2TransportImpl.java:238)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl.doReadData (ReaderV2TransportImpl.java:768)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl.access$doReadData (ReaderV2TransportImpl.java:212)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl$k.a (ReaderV2TransportImpl.java:610)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl$k.invoke (ReaderV2TransportImpl.java:212)
at com.izettle.android.commons.thread.c.run (c.java:2)
at java.lang.Thread.run (Thread.java:764)
and
com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl$a:
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl.reduce (ReaderV2TransportImpl.java:369)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl.reduce$readers_release (ReaderV2TransportImpl.java:259)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl$c.a (ReaderV2TransportImpl.java:239)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl$c.invoke (ReaderV2TransportImpl.java:212)
at com.izettle.android.commons.state.StateImpl.update (StateImpl.java:87)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl.action (ReaderV2TransportImpl.java:238)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl.access$action (ReaderV2TransportImpl.java:212)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl$m.a (ReaderV2TransportImpl.java:246)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl$m.invoke (ReaderV2TransportImpl.java:212)
at com.izettle.android.commons.thread.a.run (a.java:2)
at android.os.Handler.handleCallback (Handler.java:873)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loop (Looper.java:214)
at android.os.HandlerThread.run (HandlerThread.java:65)
We can't reproduce, the crashes come from Google Play Console reports.
User is running:
Samsung Galaxy S8
Android 9 (SDK 28)
As part of our Android app, we would like to alert the user to the fact that they are (or are not) connected to a zettle reader.
I understand I can open the CardReadersActivity to show the connected reader with the following code:
val intent = CardReadersActivity.newIntent(context)
startActivity(intent)
But what I would like to do is just to get the details of the connected reader in code, and display the name/number of the connected reader in our header on every activity.
Is there a method in the sdk to get the name/number of the connected reader? Or a handle to the connected reader that might return a null if there is no reader connected?
Also, is there any documentation for the SDK apart from this github page? Any class/method reference?
Thanks,
Chris
I am getting this error after following the setup steps
Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.
> Could not resolve all task dependencies for configuration ':app:debugCompileClasspath'.
> Could not resolve com.izettle.payments:android-sdk-ui:1.24.0.
Required by:
project :app
> No cached version of com.izettle.payments:android-sdk-ui:1.24.0 available for offline mode.
https://developer.zettle.com/docs/android-sdk/installation-and-configuration
buildToolsVersion = "31.0.0"
minSdkVersion = 21
compileSdkVersion = 31
targetSdkVersion = 31
SDK version: 1.25.6
GitHub Advanced Security has been enabled on this repository as part of our automatic phased rollout.
Secret Scanning is now active, which means that in the "Security" tab, you may now see identified secrets that needs to be handled.
Code Scanning is not automatically activated - see documentation for how to enable it.
Read more about GitHub Advanced Security and the rollout in on the tech-guidelines wiki
How send a name of product or use a product in the catalog with Transactionreference ?
Right To Left language support support
Attribute application@supportsRtl value=(true) from AndroidManifest.xml:16:13-39
is also present at [com.izettle.android.qrc:paypal-qrc-sdk:1.30.1] AndroidManifest.xml:9:18-45 value=(false).
buid a new app with RTL support
GitHub Advanced Security has been enabled on this repository as part of our automatic phased rollout.
Secret Scanning is now active, which means that in the "Security" tab, you may now see identified secrets that needs to be handled.
Code Scanning is not automatically activated - see documentation for how to enable it.
Read more about GitHub Advanced Security and the rollout in on the tech-guidelines wiki
Witnessing several crashes with the following stack from the Google Play Developer Console
java.lang.AssertionError:
at com.izettle.payments.android.bluetooth.c.lock (c.java:77)
at com.izettle.payments.android.bluetooth.ble.a.a (a.java:108)
at com.izettle.payments.android.bluetooth.ble.a.getServices (a.java:57)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl.doReadPowerState (ReaderV2TransportImpl.java:686)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl.access$doReadPowerState (ReaderV2TransportImpl.java:212)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl$j.a (ReaderV2TransportImpl.java:600)
at com.izettle.payments.android.readers.vendors.datecs.ReaderV2TransportImpl$j.invoke (ReaderV2TransportImpl.java:212)
at com.izettle.android.commons.thread.c.run (Unknown Source:2)
at java.lang.Thread.run (Thread.java:784)
We can't reproduce, the crashes come from Google Play Console reports.
User is running
Huawei M5
Android 8.0 (SDK 26)
To be able to take payments in pounds and pence, dollar and cents, e.g. 1.99, the amount
value in CardPaymentActivity
should be a double.
The amount
value is currently a Long
See example Step 5
val intent = CardPaymentActivity.IntentBuilder(this)
// MANDATORY: Transaction amount in account currency
.amount(20000L)
// MANDATORY, Reference object created in previous step
.reference(reference)
// MANDATORY, you can enable login prompt in the payment flow if user is not yet logged-in
.enableLogin(enableLogin)
// OPTIONAL, you can enable tipping (disabled by default)
// This option will only work for markets with tipping support
.enableTipping(true)
// OPTIONAL, you can enable installments (enabled by default)
// This option will only work for markets with installments support
.enableInstalments(enableInstallments)
.build()
Payment Accepted
Random occurrence. Payment will be processing for a longer period of time and then return Technical Error Payment Cannot be Processed.
If you check in the Zettle account sometimes the payment will have been taken. Other times the payment has not been taken.
Happens at random so unable to state.
Kotlin, Android 10, Latest SDK
I thought the whole idea behind oath was that it would save credentials to provide automatic login procedures.
In my app, I am required to enter an email and password on every launch. This is not a big problem just seems to me that there should be a seamless way of doing an automated login procedure unless I have missed something or something in my integration is not configured correctly?
In step 2 of "Getting Started" our app must add a callback activity for user OAuth login with some "redirect URL", yet it is unclear what redirect URL must do and who provides such URL.
Please explain how to add user authorization to the app.
Hello,
Hide Charging popup
I have an branding screen for card tapping but iZettle SDK show a popup which left my branding screen behind. Is there any way that I can hide that ?
What is the current behavior?
Please provide detailed steps for reproducing the issue.
Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions.
Please include any relevant log snippets or files here.
Open the app.
User login succesfully.
Close the app.
Reopen the app.
Attempt to get user info.
Get user info successfully.
Everything ok!
I can only get user info after start activity for result with CardPaymentActivity.IntentBuilder intent.
The auth observer with the LoggedIn object its being triggered after this.
Open the app.
User login succesfully.
Close the app.
Open the app.
Attempt to get user info.
Failed because the user is not logged in.
Attempt to make a payment
Attempt to get user info.
Get user info successfully.
How can I get user info from a user that is already logged in?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.