Gmscore: Google Pay/Wallet TapAndPay API calls prevent parts of banking apps (e.g. Vivid Money) from loading, issues related to isReadyToPay() already resolved

Created on 23 Oct 2020  Â·  14Comments  Â·  Source: microg/GmsCore

Vivid Money

Description

_Vivid Money_ is a German fintech offering bank services managed via an Android app. A customer can have multiple bank accounts. Most of the app functionality works fine with MicroG, however an account ("pocket") screen never completes loading if a card is linked to the account. There is no error message shown to the user. Other account screens load immediately and can be used without problems.

  • Package name: vivid.money
  • Package version: 1.20.0.480 (Nov 24, 2020)
  • MicroG version: 0.2.14.204215 (latest GitHub release build as of Nov 25, 2020)
  • To reproduce, one has to log in to the app and tap on an account with a card linked to it; by default this is the _Main pocket_ label.

Cause

ADB logcat inspection reveals the likely cause to be the _Google Pay_ (formerly _Google Wallet_) integration, specifically the TapAndPay API calls:

D GmsTapAndPaySvc: onBind: Intent { act=com.google.android.gms.tapandpay.service.BIND pkg=com.google.android.gms }
D GmsTapAndPaySvc: bound by: GetServiceRequest{serviceId=TAP_AND_PAY, gmsVersion=12451000, packageName='vivid.money', extras=Bundle[{}]}
D GmsTapAndPayImpl: onTransact [unknown]: 21, android.os.Parcel@2bd3dc, 16
D GmsTapAndPayImpl: onTransact [unknown]: 21, android.os.Parcel@55e6ce5, 16

When other account screens load succesfully there are no such calls logged.

Workaround

The app allows the opening of several sub-accounts and reassigning the card to any of them, with immediate effect. Thus, you can link the card to an account other than the one you want to view or make changes to, open the account screen, which will now work, and relink the card back to the original account once you're finished.

Related Issues

It seems similar issues affected a number of other apps relating to banking and payments in the past. Some of them have already been resolved. This is to keep track of all of them:

Confirmed

  • #1162 (comment): _mBank_ (pl.mbank) @Natalcia's comment from 2020-11-26

Resolved

  • #626: _Revolut_ (com.revolut.revolut) _Resolved as of 2020-11-03 per comment_
  • #987: _Yandex Taxi_ (ru.yandex.taxi); #994: _Uber_ (com.ubercab); #1006: _Uber Eats_ (com.ubercab.eats) _Resolved as of 2020-11-27 per @selurvedu's comment (note: some of the earlier discussion for these issues related to Mapbox problems, which are unrelated)_
  • #1162 (comment): _Vinted.pl_ (pl.vinted) Last confirmed 2020-10-20 (recently), however an update to MicroG as of 2020-11-25 might have fixed this issue. _Resolved as of 2020-11-26 per @Natalcia's comment_
  • #1207: _N26 Bank_ (de.number26.android), another German fintech, however the issue there is related to GmsWalletPaySvc and GmsWalletOwSvc instead, also there exists a workaround (downgrade to an older app version before _Google Pay_ integration) _No longer an issue as of 2020-11-26, apparently was addressed earlier on the application side, per @ArchangeGabriel's comment_

Unconfirmed

  • #372: _Google Assistant_ (com.google.android.googlequicksearchbox) Last confirmed 2017-12-07 (3 years ago). Might also be outside of the scope of the MicroG project since the issue pertains to a Google app.
  • #971: _First Bus_ (com.firstgroup.first.bus) Last confirmed 2019-11-11 (a year ago).

Current Status

According to @mar-v-in's comment, the current situation is (emphasis mine):

  • The Wallet Payment API isReadyToPay() dummy always returns that payment via Google Wallet Payment API is not available, so this should fix all apps that use that API for checkout / payment
  • The SafeParcel unknown fields are not an issue (though I could probably get rid of some of them easily so that logs are not spammed that much).
  • Banking apps sometimes use the TapAndPay API which allows them to add your bank account to Google Pay / Android Pay. This API is not yet implemented and probably causing issues here. As I guess one needs a bank account with that bank to try out, I can try to provide test builds, but debugging that way obviously is much harder.

What follows:

  • Before reporting any issues that might be related to Google Pay/Wallet, make sure to update to version 0.2.14.204215 of 2020-11-25 or newer, and check if the issue is still present, as many of them should be resolved with this version
  • When posting logcat dumps, ignore anything related to SafeParcel
  • The TapAndPay API is not expected to work as of now

Most helpful comment

  • The Wallet Payment API isReadyToPay() dummy always returns that payment via Google Wallet Payment API is not available, so this should fix all apps that use that API for checkout / payment
  • The SafeParcel unknown fields are not an issue (though I could probably get rid of some of them easily so that logs are not spammed that much).
  • Banking apps sometimes use the TapAndPay API which allows them to add your bank account to Google Pay / Android Pay. This API is not yet implemented and probably causing issues here. As I guess one needs a bank account with that bank to try out, I can try to provide test builds, but debugging that way obviously is much harder.

All 14 comments

Regardless of the above, perhaps it'd still be good to have a single issue where all problems related to Google Pay can be tracked and discussed.

You could have added this to the other issue where I listed all related bugs I could find instead of opening a new one, then :p

You could have added this to the other issue where I listed all related bugs I could find instead of opening a new one, then :p

I was considering it but decided it would beneficial to provide a better description.

Going by the same logic, why didn't you post yours in #372, #626, or #971?

GitHub automatically cross-links mentioned issues.

GitHub automatically cross-links mentioned issues.

Correct. And the issue you opened is referenced here too, so what is your point?

Changelog for the new MicroG version 0.2.14.204215 released yesterday (Nov 25, 2020) includes the following:

  • Wallet API: Stub isReadyToPay()

    • This fixes some apps that waited indefinitely during payment process and/or when displaying payment options

I checked and this does not resolve the issue with vivid.money account screen not loading if a card is attached to the account.

As for de.number26.android, I can't verify it since I'm using an older version that has always fully worked, while it works. However, since the issue there is different (actions screen not loading, possibly because it includes the functionality to top up with another credit card), the new MicroG release _might_ have fixed it for N26 and in some other apps.

N26 3.53 works for me even without the lastest microG (and it does still work with the new version, just tested).

N26 3.53 works for me even without the lastest microG (and it does still work with the new version, just tested).

That's some great news, thank you! I updated too now and yes, it seems it does. There's no _Actions_ tab anymore, but there's _Card_ and _Card Settings_, which both seem to work. And if it worked even earlier, they must have addressed it on the application side too I guess. I'll edit the original post to reflect that.

So the question is are there any other apps still affected, or is this a Vivid-specific issue at this point?

Yeah indeed, should have said that this new version revamped “Actions” into “Card”. So they definitively fixed it on the app side.

@Natalcia FYI the issue you reported in #1162, which I also linked to here, might be fixed in the newest MicroG version (0.2.14.204215), if you want to check. Tagging you just to let you know.

Thanks for tag. It's still broken in pl.mbank

11-26 19:46:34.282   699  2324 I WifiHAL : event received NL80211_CMD_VENDOR, vendor_id = 0x1374, subcmd = 0xd
11-26 19:46:34.282   927   927 I cnss-daemon: nl80211 response handler invoked
11-26 19:46:34.282   927   927 I cnss-daemon: nl80211_response_handler: cmd 103, vendorID 4980, subcmd 13  received
11-26 19:46:34.286  1348  2082 E LightsService: Light requested not available on this device. 2
11-26 19:46:34.441  5094  5121 D GmsMeasureBrokerSvc: bound by: GetServiceRequest{serviceId=MEASUREMENT, gmsVersion=12451000, packageName='pl.mbank', extras=Bundle[{}]}
11-26 19:46:34.465  5094  5121 D SafeParcel: Unknown field id 2 in com.google.android.gms.measurement.internal.EventParcel, skipping.
11-26 19:46:34.465  5094  5121 D SafeParcel: Unknown field id 3 in com.google.android.gms.measurement.internal.EventParcel, skipping.
11-26 19:46:34.465  5094  5121 D SafeParcel: Unknown field id 4 in com.google.android.gms.measurement.internal.EventParcel, skipping.
11-26 19:46:34.465  5094  5121 D SafeParcel: Unknown field id 5 in com.google.android.gms.measurement.internal.EventParcel, skipping.
11-26 19:46:34.467  5094  5121 D GmsMeasureSvcImpl: f1: pl.mbank
11-26 19:46:36.283   699  2324 I WifiHAL : event received NL80211_CMD_VENDOR, vendor_id = 0x1374, subcmd = 0xd
11-26 19:46:36.284   927   927 I cnss-daemon: nl80211 response handler invoked
11-26 19:46:36.284   927   927 I cnss-daemon: nl80211_response_handler: cmd 103, vendorID 4980, subcmd 13  received

Vinted spams logcat with SafeParcel Unknown field id 2, 3, 4, 5 just like mBank but everything loads properly now.
Here are complete mBank logs from launching to trying to view cards. https://del.dog/yucylodiby.log

A dummy isReadyToPay() API fixed the payment option screens in Uber (see https://github.com/microg/GmsCore/issues/994#issuecomment-734960495) and a few other apps. Viva Marvin!

  • The Wallet Payment API isReadyToPay() dummy always returns that payment via Google Wallet Payment API is not available, so this should fix all apps that use that API for checkout / payment
  • The SafeParcel unknown fields are not an issue (though I could probably get rid of some of them easily so that logs are not spammed that much).
  • Banking apps sometimes use the TapAndPay API which allows them to add your bank account to Google Pay / Android Pay. This API is not yet implemented and probably causing issues here. As I guess one needs a bank account with that bank to try out, I can try to provide test builds, but debugging that way obviously is much harder.

I can test mBank. If you would provide test builds could I just swap apks in Magisk modules directory and data from older version would be used without any problems?

@mar-v-in Thank you for everything!

I can happily test any new builds but realistically it is like you're saying, debugging would be difficult. So if you're not planning on opening an account with Vivid,1 then it'd best to find another app using the TapAndPay API and exhibiting the same issue.

Anecdotally, it seems a number of other banks use this functionality but you'd have to be a customer of that particular bank to know about it, and test it with. And, as it hasn't been more widely reported as a problem, it should probably be considered a very low priority issue at this point (since isReadyToPay() has been implemented).

If it turns out there aren't more users of other apps affected by this, I'll just contact Vivid and try to convince them to address it on their end (as it should have been in the first place).

Thanks again!

1) Just for the record, it's free to use, and there's a €20 sign-up bonus.


I also updated the original post to reflect all the new information and keep it relevant.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Nutomic picture Nutomic  Â·  4Comments

ghost picture ghost  Â·  4Comments

jonathanamorford picture jonathanamorford  Â·  5Comments

dos1 picture dos1  Â·  4Comments

Trumeet picture Trumeet  Â·  3Comments