Show External Login UI crashes on device (but not on pre-launch report)

Hello,
I have been stuck for a month and I don’t know what to do now. In order to save the in-app purchases, I want to connect the player to google play. I followed the tutorial here Integrate Google Play Services with Blueprint

So far, i got working : ads mobs :heavy_check_mark:, in-app purchase :heavy_check_mark: but not the Show External Login UI node :x:. The connection window doesn’t pop up and the app crashes instantly.

What bugs me the most is that it works on the prelaunch report. I see it on the screenshots available after the tests by the bot. The login pop-up on each device (with sdk 30, 31 and 33). I tested on several physical phones and it never works (it crashes on sdk 33, it crashes on an emulator too.

Some info:

  • Unreal 5.2
  • SDK 26-34
  • Test in closed testing
  • Permissions :
android.permission.INTERNET
com.android.vending.BILLING
com.google.android.gms.permission.AD_ID
android.permission.GET_ACCOUNTS
android.permission.ACCESS_NETWORK_STATE
android.permission.USE_CREDENTIALS
  • I updated com.google.android.gms:play-services-games-v2:+

  • I tried adding firebase with a plugin. It seems to work, I can see the test user on the firebase console. But the node continues to crash

  • My game was initially with unreal 5.4 but i had to downgrade 5.2 to make in-app purchase work.

  • I build the project from the source, so I can see the log. The error message has 2000+ lines. How do I find the source of the error? It starts with:

08-02 17:33:52.974 29208 29636 E es.MyGame: Attempt to load writable dex file: /data/user/0/com.Company.MyGame/app_.gpg.classloader/2e190de0913242cfb3e30a895073c67e_games.jar
08-02 17:33:52.980 29208 29636 W es.MyGame: ClassLoaderContext parent mismatch. (PCL[] | PCL[];PCL[/data/app/~~nLnuTd2S4MTaLRXGmhNlIA==/com.Company.MyGame-aYPfhqd_R1VEr4KHt_Ffmg==/base.apk*122256716:/data/app/~~nLnuTd2S4MTaLRXGmhNlIA==/com.Company.MyGame-aYPfhqd_R1VEr4KHt_Ffmg==/base.apk!classes2.dex*3309345192])
08-02 17:33:52.982 29208 30187 W Codec2Client: query -- param skipped: index = 1342179345.
08-02 17:33:52.982 29208 30187 W Codec2Client: query -- param skipped: index = 2415921170.
08-02 17:33:52.982 29208 30187 W Codec2Client: query -- param skipped: index = 1610614798.
08-02 17:33:52.982 29208 29636 E GamesNativeSDK: Exception in dalvik/system/DexClassLoader.loadClass: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.games.NativeSdkCallbacks" on path: DexPathList[[zip file "/data/user/0/com.Company.MyGame/app_.gpg.classloader/2e190de0913242cfb3e30a895073c67e_games.jar"],nativeLibraryDirectories=[/system/lib64, /system/system_ext/lib64]].

JNI DETECTED ERROR IN APPLICATION: java_class == null
n call to RegisterNatives

08-02 17:33:52.982 29208 30187 D C2Store : Using ION
08-02 17:33:52.984 29208 30187 D CCodecBufferChannel: [c2.android.aac.decoder#662] Created input block pool with allocatorID 16 => poolID 17 - OK (0)
08-02 17:33:52.987 1284 20569 D BufferPoolAccessor2.0: bufferpool2 0xe690b9c8 : 0(0 size) total buffers - 0(0 size) used buffers - 52/60 (recycle/alloc) - 8/112 (fetch/transfer)
08-02 17:33:52.987 1284 20569 D BufferPoolAccessor2.0: Destruction - bufferpool2 0xe690b9c8 cached: 0/0M, 0/0% in use; allocs: 60, 87% recycled; transfers: 112, 93% unfetched
08-02 17:33:52.988 29208 30187 I CCodecBufferChannel: [c2.android.aac.decoder#662] Created output block pool with allocatorID 16 => poolID 30 - OK
08-02 17:33:52.988 29208 30187 D CCodecBufferChannel: [c2.android.aac.decoder#662] Configured output block pool ids 30 => OK
08-02 17:33:52.988 29208 30187 I CCodec : [c2.android.aac.decoder] state->set(RUNNING)
08-02 17:33:52.989 1078 1513 I SEC_componentStore: >>SEC Codec2's2 SetIonUsage : 1
08-02 17:33:52.989 1078 1513 I SEC_componentStore: >>SEC Codec2's SetIonUsage
08-02 17:33:52.989 29208 30187 I CCodecBufferChannel: [c2.android.aac.decoder#662] 4 initial input buffers available
08-02 17:33:52.990 1338 30199 D SimpleC2Component: Using output block pool with poolID 30 => got 30 - 0
08-02 17:33:53.088 2065 2065 D SecPowerUI.Notification: showChargingNotice oldChargingType : 11 / currentChargingType : 11, oldChargingTime : 19150000 / mChargingTime : 19150000
08-02 17:33:53.088 2065 2065 D SecPowerUI.Notification: There is no change about charging status, so return!
08-02 17:33:53.118 29208 30130 I DMCodecAdapterFactory: Creating an asynchronous MediaCodec adapter for track type video
08-02 17:33:53.119 29208 30130 I ACodec : [] Now uninitialized
08-02 17:33:53.120 29208 30222 I ACodec : [] onAllocateComponent
08-02 17:33:53.123 29208 30222 I OMXClient: IOmx service obtained
08-02 17:33:53.123 1312 11001 I OMXMaster: makeComponentInstance(OMX.Exynos.vp9.dec) in android.hardwar process
  • The list of dependencies
dependencies {
implementation fileTree(dir: 'libs', include: ['.jar'])
implementation fileTree(dir: 'src/main/libs', include: ['.jar']) implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" annotationProcessor "androidx.lifecycle:lifecycle-compiler:2.6.1" implementation "com.android.billingclient:billing:6.1.0"
implementation "com.android.support:support-v13:27.1.0"
implementation "com.google.android.gms:play-services-base:18.5.0" 
implementation "com.google.android.gms:play-services-plus:17.0.0" 
implementation "com.google.android.gms:play-services-auth:20.7.0"
implementation "com.google.android.gms:play-services-nearby:19.0.0"
implementation "com.google.android.gms:play-services-analytics:18.0.4" 
implementation "com.google.android.gms:play-services-games-v2:+" 
implementation "com.google.android.gms:play-services-ads-base:22.6.0" 
implementation "com.google.android.gms:play-services-ads:22.6.0" 
implementation "com.google.android.gms:play-services-ads-lite:22.6.0"
implementation "com.google.android.gms:play-services-ads-identifier:18.0.1" 
implementation "com.google.android.play:asset-delivery:2.2.2"
implementation "com.google.android.play:feature-delivery:2.1.0" 
implementation "com.google.android.play:review:2.0.1"
implementation "com.google.android.play:app-update:2.1.0"
implementation platform("com.google.firebase:firebase-bom:33.1.2") 
implementation "com.google.firebase:firebase-analytics"
implementation "com.google.firebase:firebase-auth"
implementation "com.google.firebase:firebase-firestore"
implementation "com.google.firebase:firebase-storage"
implementation "com.google.firebase:firebase-database"
implementation "com.google.firebase:firebase-core:21.1.1"
implementation "com.google.firebase:firebase-messaging"
}
  • The node Show External Login UI is called in the event graph of my game instance. To help debugging, I added a button on the main screen that triggers an event in the game instance. The event launches Show External Login UI and that’s all it does.

My game is almost ready and I lost weeks on this. What am I missing?

Finally, i think the Show External Login UI node doesn’t work at all.
This post Show External Login UI Node Continuously Fails Android - #6 by susinallday seems right, login is now handled differently.
So now, i see two ways possible:

  • save data manually in a firebase database
  • or use the Lootlocker plugin to connect to Google Play, and save data in Lootlocker storage

It is too bad unreal isn’t up to date with Google API, or at least that the documentation isn’t written has deprecated.

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.