communication-ui-library-android icon indicating copy to clipboard operation
communication-ui-library-android copied to clipboard

while using call with Chat Android App crash when start chat

Open AhmedKhattab95 opened this issue 2 years ago • 4 comments

I import SDK locally like this: api project(path: ':calling') api(project(path: ':chat')) { exclude group: 'com.microsoft', module: 'trouter-client-android' } call is work fine but when start chat it crash and give me this error:

`E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.moj.najiz, PID: 27463
    com.azure.android.communication.ui.chat.models.ChatCompositeException: App store exception while reducing state
        at com.azure.android.communication.ui.chat.redux.AppStore$exceptionHandler$1$1.run(AppStore.kt:27)
        at android.os.Handler.handleCallback(Handler.java:900)
        at android.os.Handler.dispatchMessage(Handler.java:103)
        at android.os.Looper.loop(Looper.java:219)
        at android.app.ActivityThread.main(ActivityThread.java:8668)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)
     Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/microsoft/trouterclient/registration/ISkypetokenProvider;
        at com.azure.android.communication.chat.ChatAsyncClient.<init>(ChatAsyncClient.java:58)
        at com.azure.android.communication.chat.ChatClientBuilder.buildAsyncClient(ChatClientBuilder.java:236)
        at com.azure.android.communication.chat.ChatClientBuilder.buildClient(ChatClientBuilder.java:178)
        at com.azure.android.communication.ui.chat.service.sdk.ChatSDKWrapper.createChatClient(ChatSDKWrapper.kt:358)
        at com.azure.android.communication.ui.chat.service.sdk.ChatSDKWrapper.initialization(ChatSDKWrapper.kt:98)
        at com.azure.android.communication.ui.chat.service.ChatService.initialize(ChatService.kt:12)
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatActionHandler.initialization(ChatActionHandler.kt:181)
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatActionHandler.onAction(ChatActionHandler.kt:32)
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatMiddlewareImpl$invoke$1$1.invoke(ChatMiddleware.kt:40)
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatMiddlewareImpl$invoke$1$1.invoke(ChatMiddleware.kt:28)
        at com.azure.android.communication.ui.chat.redux.AppStore$dispatch$1.invokeSuspend(AppStore.kt:48)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:929)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.microsoft.trouterclient.registration.ISkypetokenProvider" on path: DexPathList[[zip file "/data/app/com.moj.najiz-2UfCH6U76_hwskoV1Sj5vw==/base.apk"],nativeLibraryDirectories=[/data/app/com.moj.najiz-2UfCH6U76_hwskoV1Sj5vw==/lib/arm64, /data/app/com.moj.najiz-2UfCH6U76_hwskoV1Sj5vw==/base.apk!/lib/arm64-v8a, /system/lib64, /hw_product/lib64, /system/product/lib64, /prets/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:209)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.azure.android.communication.chat.ChatAsyncClient.<init>(ChatAsyncClient.java:58) 
        at com.azure.android.communication.chat.ChatClientBuilder.buildAsyncClient(ChatClientBuilder.java:236) 
        at com.azure.android.communication.chat.ChatClientBuilder.buildClient(ChatClientBuilder.java:178) 
        at com.azure.android.communication.ui.chat.service.sdk.ChatSDKWrapper.createChatClient(ChatSDKWrapper.kt:358) 
        at com.azure.android.communication.ui.chat.service.sdk.ChatSDKWrapper.initialization(ChatSDKWrapper.kt:98) 
        at com.azure.android.communication.ui.chat.service.ChatService.initialize(ChatService.kt:12) 
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatActionHandler.initialization(ChatActionHandler.kt:181) 
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatActionHandler.onAction(ChatActionHandler.kt:32) 
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatMiddlewareImpl$invoke$1$1.invoke(ChatMiddleware.kt:40) 
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatMiddlewareImpl$invoke$1$1.invoke(ChatMiddleware.kt:28) 
        at com.azure.android.communication.ui.chat.redux.AppStore$dispatch$1.invokeSuspend(AppStore.kt:48) 
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) 
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:929) 

To Reproduce Steps to reproduce the behavior:

  1. add call, and chat SDKs in same project
  2. for import add
   api project(path: ':calling')
    api(project(path: ':chat')) {
        exclude group: 'com.microsoft', module: 'trouter-client-android'
    }
  1. Try open chat after joining call like this
package com.moj.najiz.AzureCommunicationService;
import android.content.Context;
import android.view.View;

import com.azure.android.communication.common.CommunicationTokenCredential;
import com.azure.android.communication.common.CommunicationTokenRefreshOptions;
import com.azure.android.communication.common.CommunicationUserIdentifier;
import com.azure.android.communication.ui.chat.ChatAdapter;
import com.azure.android.communication.ui.chat.ChatAdapterBuilder;
import com.azure.android.communication.ui.chat.presentation.ChatThreadView;

import java.util.concurrent.ExecutionException;

public class ACSChatHandler {

    private Context context;
    private String userToken;
    private String userId;
    private String threadId;
    private String endpoint;

    private static ACSChatHandler instance;

    public static ACSChatHandler init(Context context, String token, String userId, String threadId, String endpoint) {
        if (instance == null) {
            instance = new ACSChatHandler();
            instance.userToken = token;
            instance.userId = userId;
            instance.context = context;
            instance.threadId = threadId;
            instance.endpoint = endpoint;
        }
        return instance;
    }

    public static ACSChatHandler getInstance() {
        return  instance;
    }

    private ACSChatHandler() {
    }

    public View getChatView() throws ExecutionException, InterruptedException {
        CommunicationTokenRefreshOptions communicationTokenRefreshOptions =
                new CommunicationTokenRefreshOptions(this::fetchToken, true);
        CommunicationTokenCredential communicationTokenCredential = new CommunicationTokenCredential(communicationTokenRefreshOptions);

        String userDisplayName = "Ahmed Khattab";

        ChatAdapter chatAdapter = new ChatAdapterBuilder()
                .endpoint(endpoint)
                .credential(communicationTokenCredential)
                .identity(new CommunicationUserIdentifier(userId))
                .displayName(userDisplayName)
                .threadId(threadId)
                .build();
        chatAdapter.connect(context);
        ChatThreadView chatThreadView = new ChatThreadView(context, chatAdapter);
        return chatThreadView;
    }

    private String fetchToken() {
        return userToken;
    }
}

Expected behavior should return chat view and can interact Screenshots If applicable, add screenshots to help explain your problem.

AzureCommunicationUILibrary (please complete the following information):

  • all versions

Smartphone (please complete the following information):

  • Device: [Huwawie Nova 5t with google services]
  • API: Android 10

Call Logs

`E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.moj.najiz, PID: 27463
    com.azure.android.communication.ui.chat.models.ChatCompositeException: App store exception while reducing state
        at com.azure.android.communication.ui.chat.redux.AppStore$exceptionHandler$1$1.run(AppStore.kt:27)
        at android.os.Handler.handleCallback(Handler.java:900)
        at android.os.Handler.dispatchMessage(Handler.java:103)
        at android.os.Looper.loop(Looper.java:219)
        at android.app.ActivityThread.main(ActivityThread.java:8668)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)
     Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/microsoft/trouterclient/registration/ISkypetokenProvider;
        at com.azure.android.communication.chat.ChatAsyncClient.<init>(ChatAsyncClient.java:58)
        at com.azure.android.communication.chat.ChatClientBuilder.buildAsyncClient(ChatClientBuilder.java:236)
        at com.azure.android.communication.chat.ChatClientBuilder.buildClient(ChatClientBuilder.java:178)
        at com.azure.android.communication.ui.chat.service.sdk.ChatSDKWrapper.createChatClient(ChatSDKWrapper.kt:358)
        at com.azure.android.communication.ui.chat.service.sdk.ChatSDKWrapper.initialization(ChatSDKWrapper.kt:98)
        at com.azure.android.communication.ui.chat.service.ChatService.initialize(ChatService.kt:12)
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatActionHandler.initialization(ChatActionHandler.kt:181)
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatActionHandler.onAction(ChatActionHandler.kt:32)
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatMiddlewareImpl$invoke$1$1.invoke(ChatMiddleware.kt:40)
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatMiddlewareImpl$invoke$1$1.invoke(ChatMiddleware.kt:28)
        at com.azure.android.communication.ui.chat.redux.AppStore$dispatch$1.invokeSuspend(AppStore.kt:48)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:929)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.microsoft.trouterclient.registration.ISkypetokenProvider" on path: DexPathList[[zip file "/data/app/com.moj.najiz-2UfCH6U76_hwskoV1Sj5vw==/base.apk"],nativeLibraryDirectories=[/data/app/com.moj.najiz-2UfCH6U76_hwskoV1Sj5vw==/lib/arm64, /data/app/com.moj.najiz-2UfCH6U76_hwskoV1Sj5vw==/base.apk!/lib/arm64-v8a, /system/lib64, /hw_product/lib64, /system/product/lib64, /prets/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:209)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.azure.android.communication.chat.ChatAsyncClient.<init>(ChatAsyncClient.java:58) 
        at com.azure.android.communication.chat.ChatClientBuilder.buildAsyncClient(ChatClientBuilder.java:236) 
        at com.azure.android.communication.chat.ChatClientBuilder.buildClient(ChatClientBuilder.java:178) 
        at com.azure.android.communication.ui.chat.service.sdk.ChatSDKWrapper.createChatClient(ChatSDKWrapper.kt:358) 
        at com.azure.android.communication.ui.chat.service.sdk.ChatSDKWrapper.initialization(ChatSDKWrapper.kt:98) 
        at com.azure.android.communication.ui.chat.service.ChatService.initialize(ChatService.kt:12) 
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatActionHandler.initialization(ChatActionHandler.kt:181) 
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatActionHandler.onAction(ChatActionHandler.kt:32) 
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatMiddlewareImpl$invoke$1$1.invoke(ChatMiddleware.kt:40) 
        at com.azure.android.communication.ui.chat.redux.middleware.sdk.ChatMiddlewareImpl$invoke$1$1.invoke(ChatMiddleware.kt:28) 
        at com.azure.android.communication.ui.chat.redux.AppStore$dispatch$1.invokeSuspend(AppStore.kt:48) 
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) 
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:929) 

Additional info: found this threads https://stackoverflow.com/questions/70931525/noclassdeffounderror-failed-resolution-of-lcom-microsoft-trouterclient-registr https://learn.microsoft.com/en-us/answers/questions/514705/class-duplication-error-with-calling-and-chat-sdk

but there is no solution till now is this the state right now? or should use a specific version?

AhmedKhattab95 avatar Sep 12 '23 10:09 AhmedKhattab95

@ahammer @iaulakh any update on this or how can I implement and use chat, and call together?

AhmedKhattab95 avatar Sep 12 '23 11:09 AhmedKhattab95

Hi @AhmedKhattab95,

Thank you for reporting this issue. Please find similar issue and let us know if more information is required.

Thank you.

iaulakh avatar Sep 18 '23 20:09 iaulakh

@iaulakh it's not solved in this url also Is there is any way to make chat work with call in any release?

AhmedKhattab95 avatar Sep 18 '23 20:09 AhmedKhattab95

Hi @AhmedKhattab95 , Thank you for reporting this issue. We are aware that the call-with-chat functionality is not working properly in the demo app. We previously added the call-with-chat variant because we were spiking on a proof of concept to showcase a call with chat integration experience. We will be looking at some architectural/system improvements in upcoming quarters to put us in a better position to support call-with-chat functionality.

Please request the feature using this form to help us prioritize this work in upcoming quarters. Azure Feedback

iaulakh avatar Sep 25 '23 14:09 iaulakh

@AhmedKhattab95

Issue with running call and chat in the same App is now resolved. Please use latest calling and chat versions. No need to exclude group: 'com.microsoft', module: 'trouter-client-android' when importing chat.

pavelprystinka avatar Oct 09 '24 16:10 pavelprystinka