Skip to content

Can't get any paid app work on Huawei EMUI 15 (previously purchased in GP) #3403

@beastdrc

Description

@beastdrc

Describe the bug
On a Huawei Mate X7 running microG, applications that rely on in-app purchases or subscription checks (e.g., FaceApp) fail to restore or recognize existing PRO licenses/subscriptions. The billing service (com.android.vending) returns an empty purchase list (INAPP_PURCHASE_ITEM_LIST=[]) despite the Google account having a valid, active subscription.

To Reproduce
Steps to reproduce the behavior:

  1. Set up a Huawei Mate X7 with microG and Aurora Store (or install an app via APK).
  2. Log in to microG with a Google account that has a valid, paid subscription for an app (e.g., FaceApp PRO).
  3. Install the application (e.g., FaceApp).
  4. Launch the application.
  5. Observe that the app does not automatically recognize the PRO features and shows a paywall or "Restore Purchases" prompt.
  6. (Optional) Tap "Restore Purchases" – the operation will likely fail or report no purchases found.
  7. Observe the logcat output for Finsky/Phonesky and Billing services.

Expected behavior
Valid license

Actual behavior

  1. Logs show no attempt by microG/Phonesky to determine the "preferred billing account" from installer data.
  2. The billing service responds with an empty purchase list (INAPP_PURCHASE_ITEM_LIST=[]).
  3. The application remains in a "free" or "unlicensed" state.

Screenshots
N/A

System

  • Device: Huawei Mate X7
  • Android Version: [Fill in your version, e.g., Android 12 / HarmonyOS 4.x]
  • microG Services Core Version: [Fill in your version, e.g., 0.3.0.233515]
  • microG Companion / Phonesky Version: [Fill in your version]

Relevant Logs (Huawei Mate X7 with microG)

Empty purchase lists returned by Phonesky billing service:

04-16 20:10:27.617 23690 23704 D Billing : getPurchasesExtraParams(apiVersion=24, packageName=io.faceapp, type=inapp, continuationToken=null, extraParams=Bundle[{billingClientSessionId=-2548996740595174335, playBillingLibraryVersion=8.0.0, enablePendingPurchases=true}])
04-16 20:10:27.617 23690 23704 D Billing : Result: Bundle[{INAPP_PURCHASE_ITEM_LIST=[], DEBUG_MESSAGE=, RESPONSE_CODE=0, INAPP_PURCHASE_DATA_LIST=[], INAPP_DATA_SIGNATURE_LIST=[]}]
04-16 20:10:27.619 23690 23711 D Billing : getPurchasesExtraParams(apiVersion=24, packageName=io.faceapp, type=subs, continuationToken=null, extraParams=Bundle[{billingClientSessionId=-2548996740595174335, playBillingLibraryVersion=8.0.0, enablePendingPurchases=true}])
04-16 20:10:27.620 23690 23711 D Billing : Result: Bundle[{INAPP_PURCHASE_ITEM_LIST=[], DEBUG_MESSAGE=, RESPONSE_CODE=0, INAPP_PURCHASE_DATA_LIST=[], INAPP_DATA_SIGNATURE_LIST=[]}]

04-16 20:18:45.612  9185  9206 D Billing : getPurchasesExtraParams(apiVersion=24, packageName=io.faceapp, type=subs, continuationToken=null, extraParams=Bundle[{billingClientSessionId=5600665361842319971, playBillingLibraryVersion=8.0.0, enablePendingPurchases=true}])
04-16 20:18:45.618  9185  9206 D Billing : Result: Bundle[{INAPP_PURCHASE_ITEM_LIST=[], DEBUG_MESSAGE=, RESPONSE_CODE=0, INAPP_PURCHASE_DATA_LIST=[], INAPP_DATA_SIGNATURE_LIST=[]}]
04-16 20:18:45.613  9185 11881 D Billing : getPurchasesExtraParams(apiVersion=24, packageName=io.faceapp, type=inapp, continuationToken=null, extraParams=Bundle[{billingClientSessionId=5600665361842319971, playBillingLibraryVersion=8.0.0, enablePendingPurchases=true}])
04-16 20:18:45.618  9185 11881 D Billing : Result: Bundle[{INAPP_PURCHASE_ITEM_LIST=[], DEBUG_MESSAGE=, RESPONSE_CODE=0, INAPP_PURCHASE_DATA_LIST=[], INAPP_DATA_SIGNATURE_LIST=[]}]
04-16 20:10:27.634  1767  1932 D ActivityManager: setPrivilegeType serviceRecord: ServiceRecord{48ecb16 u0 com.google.android.gms/org.microg.gms.auth.loginservice.GoogleLoginService}, interfaceDescriptor: android.accounts.IAccountAuthenticator, shouldSetPrivType: false
04-16 20:10:27.634 24783 24849 D GmsAuthenticator: getAuthToken: Account {name=XXXXXXXXX, type=com.google}, oauth2:https://www.googleapis.com/auth/googleplay https://www.googleapis.com/auth/accounts.reauth, Bundle[{androidPackageName=com.android.vending, callerPid=23690, callerUid=10198}]
04-16 20:10:27.636 24783 24849 D GmsAuthManager: peekAuthToken: com.android.vending:38918a453d07199354f8b19af05ec6562ced5788:oauth2:https://www.googleapis.com/auth/googleplay https://www.googleapis.com/auth/accounts.reauth

04-16 20:18:45.625  1795  1913 D ActivityManager: setPrivilegeType serviceRecord: ServiceRecord{663f240 u0 com.google.android.gms/org.microg.gms.auth.loginservice.GoogleLoginService}, interfaceDescriptor: android.accounts.IAccountAuthenticator, shouldSetPrivType: false
04-16 20:18:45.628  9096  9662 D GmsAuthenticator: getAuthToken: Account {name=XXXXXXXXX, type=com.google}, oauth2:https://www.googleapis.com/auth/googleplay https://www.googleapis.com/auth/accounts.reauth, Bundle[{androidPackageName=com.android.vending, callerPid=9185, callerUid=10198}]
04-16 20:18:45.631  9096  9662 D GmsAuthManager: peekAuthToken: com.android.vending:38918a453d07199354f8b19af05ec6562ced5788:oauth2:https://www.googleapis.com/auth/googleplay https://www.googleapis.com/auth/accounts.reauth
04-16 20:10:27.809 10978 11118 I PlayCore: UID: [10338]  PID: [10978] IntegrityService : requestIntegrityToken(IntegrityTokenRequest{nonce=eVp4VDdrb0xPdUNMNXVxTHdEOVNiZzllVUxJcjJkQ3BnczZKME04TzdSYw==, cloudProjectNumber=554161020816, network=null})
04-16 20:10:28.687 23690 23690 D IntegrityService: requestIntegrityToken() success for io.faceapp)

04-16 20:18:46.117 12148 12274 I PlayCore: UID: [10338]  PID: [12148] IntegrityService : requestIntegrityToken(IntegrityTokenRequest{nonce=TWFaaEZrY0lOWVhDdjM1RjZRTkUwWDgzbGhaa0h4VURyRVdlU1N0UDJobw==, cloudProjectNumber=554161020816, network=null})
04-16 20:18:46.853  9185  9185 D IntegrityService: requestIntegrityToken() success for io.faceapp)

Contrasting Logs (Official Google Play Services on Honor 20 Pro)
These logs are provided for comparison to show the expected behavior. On a standard GMS device, Finsky explicitly determines the correct billing account via installer data.

04-16 20:45:44.647 15929 15977 I Finsky  : [827] io.faceapp: Account determined from installer data - [8_OSEtGFSOfTV8FlfNP8cmifYxUg3prfpxnUMzlgmrE]
04-16 20:45:44.648 15929 15977 I Finsky  : [827] Billing preferred account via installer for io.faceapp: [8_OSEtGFSOfTV8FlfNP8cmifYxUg3prfpxnUMzlgmrE]

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions