Quick Blox Android Chat SDK (v3.8.1) - сбой приложения при запуске com.quickblox.messages.services.SubscribeTaskManager.a (неизвестный источник: 49) - PullRequest
0 голосов
/ 26 сентября 2018

Я включил Quick Blox Chat SDK версии 3.8.1 (последняя версия доступна с 25 сентября 2018 года).Я успешно интегрировал чат SDK.Проблема, с которой я сталкиваюсь, заключается в том, что приложение открывается при первом открытии со следующей ошибкой.

 java.lang.RuntimeException: An error occurred while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:353)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
    at java.util.concurrent.FutureTask.run(FutureTask.java:271)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)
 Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/internal/zzbq;
    at com.google.android.gms.gcm.Task$Builder.checkConditions(Unknown Source:10)
    at com.google.android.gms.gcm.OneoffTask$Builder.checkConditions(Unknown Source:0)
    at com.google.android.gms.gcm.OneoffTask$Builder.build(Unknown Source:0)
    at com.quickblox.messages.services.SubscribeTaskManager.a(Unknown Source:49)
    at com.quickblox.messages.services.SubscribeService.c(Unknown Source:22)
    at com.quickblox.messages.services.SubscribeService.a(Unknown Source:145)
    at com.quickblox.messages.services.SubscribeService.a(Unknown Source:125)
    at com.quickblox.messages.services.SubscribeService.e(Unknown Source:12)
    at com.quickblox.messages.services.SubscribeService.b(Unknown Source:18)
    at com.quickblox.messages.services.SubscribeService.onHandleWork(Unknown Source:46)
    at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:392)
    at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:383)
    at android.os.AsyncTask$2.call(AsyncTask.java:333)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 
    at java.lang.Thread.run(Thread.java:764) 
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.internal.zzbq" on path: DexPathList[[zip file "/data/app/-HWe3wDorvDDaXln_aZyI2g==/base.apk"],nativeLibraryDirectories=[/data/app/HWe3wDorvDDaXln_aZyI2g==/lib/x86, /data/app/HWe3wDorvDDaXln_aZyI2g==/base.apk!/lib/x86, /system/lib, /vendor/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at com.google.android.gms.gcm.Task$Builder.checkConditions(Unknown Source:10) 
    at com.google.android.gms.gcm.OneoffTask$Builder.checkConditions(Unknown Source:0) 
    at com.google.android.gms.gcm.OneoffTask$Builder.build(Unknown Source:0) 
    at com.quickblox.messages.services.SubscribeTaskManager.a(Unknown Source:49) 
    at com.quickblox.messages.services.SubscribeService.c(Unknown Source:22) 
    at com.quickblox.messages.services.SubscribeService.a(Unknown Source:145) 
    at com.quickblox.messages.services.SubscribeService.a(Unknown Source:125) 
    at com.quickblox.messages.services.SubscribeService.e(Unknown Source:12) 
    at com.quickblox.messages.services.SubscribeService.b(Unknown Source:18) 
    at com.quickblox.messages.services.SubscribeService.onHandleWork(Unknown Source:46) 
    at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:392) 
    at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:383) 
    at android.os.AsyncTask$2.call(AsyncTask.java:333) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 
    at java.lang.Thread.run(Thread.java:764) 

Приложение работало нормально без каких-либо проблем до интеграции с SDK для чата.Поэтому я твердо верю, что проблема вызвана SDK чата.

Примечания

Mutidex уже включен

Вот файл моего приложения приложения

    buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

repositories {
    maven { url 'https://maven.fabric.io/public' }
}


android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.myapp"
        minSdkVersion 21
        targetSdkVersion 28
        multiDexEnabled true
        versionCode 1
        versionName "1.0 - Alpha Dev version"


        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
            }
        }

        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }


    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    dataBinding {
        enabled = true
    }

    dexOptions {
        javaMaxHeapSize "4g"
    }

}

dependencies {
    def paging_version = "1.0.1"
    def material = "1.0.0-rc01"
    def qbSdkVersion = '3.8.1'
    def swipyVersion = '1.2.3'
    def stickylistheadersVersion = '0.4.2'
    def androidSupport = '28.0.0'
    def androidArch = '1.1.1'
    def playService = '15.0.1'


    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "com.android.support:appcompat-v7:$androidSupport"
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation "com.android.support:design:$androidSupport"
    implementation 'com.google.firebase:firebase-crash:16.2.0'

    implementation "android.arch.lifecycle:extensions:$androidArch"
    implementation "android.arch.lifecycle:viewmodel:$androidArch"
    implementation "android.arch.persistence.room:runtime:$androidArch"
    annotationProcessor "android.arch.persistence.room:compiler:$androidArch"

    implementation "com.google.android.gms:play-services-location:$playService"
    implementation "com.google.android.gms:play-services-places:$playService"
    implementation "com.google.firebase:firebase-core:16.0.3"

    implementation 'com.google.firebase:firebase-messaging:17.3.2'



    implementation 'com.nineoldandroids:library:2.4.0'
    implementation 'com.daimajia.slider:library:1.1.5@aar'
    implementation 'com.squareup.picasso:picasso:2.5.2'
    implementation 'pub.devrel:easypermissions:1.2.0' /*permission simplified*/
    implementation 'com.github.jrvansuita:PickImage:2.2.3'/*Image picker Camera/Gallery*/
    implementation 'com.theartofdev.edmodo:android-image-cropper:2.7.0' /*Image cropper*/
    implementation 'com.wdullaer:materialdatetimepicker:3.6.3' /*Date picker*/
    implementation 'com.kofigyan.stateprogressbar:stateprogressbar:1.0.0'
    implementation('com.github.ganfra:material-spinner:2.0.0') {
        exclude group: 'com.android.support', module: 'appcompat-v7'
    }
    implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'

    implementation 'com.facebook.android:facebook-android-sdk:4.34.0'
    implementation 'com.github.danimahardhika:cafebar:1.3.1'/*Snack Toast  SDK*/
    implementation(name: 'sinch-android-verification-1.5.1', ext: 'aar') /*SMS verification*/
    implementation 'com.github.blocoio:faker:1.2.7' /*Data faker*/
    implementation 'com.github.joielechong:countrycodepicker:2.1.8'
    implementation 'com.yarolegovich:sliding-root-nav:1.1.0' /*Custom nav drawer*/
    implementation "com.yuyakaido.android:card-stack-view:1.0.0-beta9" /*Card stack view*/
    implementation 'com.jaredrummler:android-animations:1.0.0' /*View Animator*/
    implementation 'com.facebook.fresco:fresco:1.10.0'
    implementation 'com.github.Binary-Finery:Bungee:master-SNAPSHOT'/*Activity Translation*/
    implementation 'com.github.ybq:Android-SpinKit:1.1.0' /*Loading animations*/
    implementation 'com.github.thunder413:DateTimeUtils:1.0' /*Date converter utility*/
    implementation(name: 'filepicker', ext: 'aar')
    implementation(name: 'materialrangebar', ext: 'aar')
    implementation 'com.github.warkiz.widget:indicatorseekbar:2.0.9'
    implementation 'com.github.PuffoCyano:Range-Time-Picker-Dialog:v1.5' /*Multi time range picker*/


    implementation('com.crashlytics.sdk.android:crashlytics:2.9.5@aar') {
        transitive = true;
    }

    implementation "com.quickblox:quickblox-android-sdk-chat:$qbSdkVersion"
    implementation "com.quickblox:quickblox-android-sdk-extensions:$qbSdkVersion"
    implementation "com.quickblox:quickblox-android-sdk-messages:$qbSdkVersion"
    implementation 'com.quickblox:chat-message-adapter:2.0'
    implementation "com.github.orangegangsters:swipy:$swipyVersion@aar"
    implementation "com.timehop.stickyheadersrecyclerview:library:$stickylistheadersVersion@aar"


}

apply plugin: 'com.google.gms.google-services'

Позвольте мне объяснить сценарий, в котором происходит сбой приложения.

  1. Запустить приложение из Android studio / Build APK и установить прямо на устройство.
  2. Заставка -> Страница входа {здесь происходит сбой - неожиданно это происходит только при первом запуске приложения, если я убиваю приложение и запускаю снова, эта проблема не появляется}

Любойпомощь оценена.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Начиная с версии 3.2, Android SDK предоставляет новую функцию - автоматическую подписку для отправки уведомлений из коробки.Это означает, что вам больше не нужно беспокоиться о том, как получить токен GCM или FCM, создать QBPushNotifications.createSubscription и что делать с полученными данными в вашем коде.Вы не добавили зависимость GCM, как указано в Quickblox.Добавьте зависимость GCM с версией, аналогичной версии SDK других игровых сервисов:

implementation "com.google.android.gms:play-services-gcm:$your_version"

Это удалит Caused by: java.lang.NoClassDefFoundError

0 голосов
/ 27 сентября 2018

После нескольких часов исследований, проб и ошибок я получил нечто подобное, чтобы преодолеть проблему.

Я обнаружил, что проблема в основном из-за Quick Blox SubscribeService .

Чтобы преодолеть это, следуйте нижеприведенному решению.

<service android:name="com.quickblox.messages.services.fcm.QBFcmPushInstanceIDService">
                    <intent-filter>
                        <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
                    </intent-filter>
                </service>

Удалитевышеуказанный сервисный тег из манифеста приложения. QBFcmPushInstanceIDService вызывается каждый раз, когда мы открываем приложение, и обновляется токен FCM, который вызывает следующее

SubscribeService.subscribeToPushes(this, true);

Там возникает ошибка.

SubscribeService необходимо вызывать только после успешного входа на сервер Quick Blox.Поэтому я удалил его из манифеста и использовал функции FCM по умолчанию.

    // Get token for sending notification to device { Google FCM }
        FirebaseInstanceId.getInstance().getInstanceId()
                .addOnCompleteListener(task -> {
                    if (!task.isSuccessful()) {
                        Log.warn("getInstanceId failed" + task.getException());
                        return;
                    }

                    // Get new Instance ID token
                    String token = task.getResult().getToken();
                    SubscribeService.subscribeToPushes(this, true);



                });

Приведенный выше код должен быть запущен только после того, как вы войдете в сервер быстрого чата Blox

...