나는 여러 가지 맛의 안드로이드 애플 리케이션을 가지고. 패키지 이름은 두 가지 유형 (com.mycompany.base)에서 동일합니다. 앱 레벨 gradle 파일에서 두 가지 맛은 고유 한 애플리케이션 ID (com.mycompany.firstflavor 및 com.mycompany.secondflavor)를가집니다.FCM - onTokenRefresh는 멀티 맛의 안드로이드 애플 리케이션에서 결코 호출되지 않습니다
예전에는지도와 같은 Google Play 서비스의 경우 애플리케이션 ID를 모두 사용하고 두 가지 맛의 정보가 포함 된 google-services.json 파일을 받았습니다. 난 단지 내 애플 리케이션에이 json 파일을 복사해야하며 모든 일을 잘.
최근에는 푸시 알림을 구현하기 위해 FCM 프로젝트를 만들었고 이전과 같이 애플리케이션 ID를 사용하여 각 풍미를 앱으로 추가했습니다. 처음에는 응용 프로그램의 제안 된 위치에 하나의 json 파일 만 포함 시켰습니다. 한 가지 맛으로 앱을 실행했을 때 Firebase가 성공적으로 초기화되었다고합니다. 그러나 onTokenRefresh 메서드는 호출되지 않습니다. 인터넷에서 검색 한 결과 몇 가지 관련 주제가 있었지만 내 경우에는 아무런 해결책도 없었습니다. 다른 맛으로 앱을 실행하면 다음과 같은 오류 메시지가 표시되어 앱이 계속 충돌합니다. java.lang.NoSuchMethodError : 정적 메서드 없음 zzb (Ljava/lang/Object; Ljava/lang/Object;) Ljava/lang/Object; Lcom/google/android/gms/common/internal/zzab 클래스의 또는 슈퍼 클래스 ('com.google.android.gms.common.internal.zzab'선언은 /data/app/com.suran.dwmobile-2/base.apk:classes2.dex에 표시됨). 문제는 실제 기기와 시뮬레이터 모두에서 발생했습니다. 그런 다음 온라인으로 읽은 일부 제안 된대로 json 파일을 두 위치에 복사했습니다. 이제 동일한 json 파일이 app/src/firstflavor 및 app/src/secondflavor와 같은 각 flavo 아래의 두 위치에 나타납니다. 그러나 이것은 전혀 도움이되지 않았고 나는 여전히 같은 문제가있었습니다. 그리고 이것은 단지 디버그 모드입니다.
릴리스 변형 세트로 앱을 실행했을 때 두 가지 버전 모두에서 오류 메시지가 표시됩니다. com.android.build.api.transform.TransformException : java.util.zip.ZipException : 중복 항목 : com/google/android/gms/common/internal/zzv $ zza $ zza.class. 비슷한 문제에 대한 답변을 찾았지만 아무도 내 문제를 해결할 수 없습니다. 여기
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:amazon="http://schemas.amazon.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.mycompany.base"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="21"
/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="archos.permission.FULLSCREEN.FULL" />
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>
<uses-permission android:name="android.permission.SEND_SMS" android:required="false" />
<uses-permission android:name="android.permission.CAMERA" android:required="false"/>
<uses-feature android:name="android.permission.ACCESS_NETWORK_STATE" android:required="false"/>
<uses-feature android:name="android.permission.ACCESS_COARSE_LOCATION" android:required="false" />
<uses-feature android:name="android.permission.ACCESS_FINE_LOCATION" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.front" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.telephony" android:required="false" />
<uses-feature android:glEsVersion="0x00020000" android:required="false"/>
<application
android:name=".application.BaseApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:theme="@style/CompanyTheme"
>
<service android:name=".FBInstanceService">
<intent-filter>
<action android:name="come.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<service android:name=".FBMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>
</manifest>
내 응용 프로그램 수준 Gradle을 파일입니다 :
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion '25.0.0'
useLibrary 'org.apache.http.legacy'
defaultConfig {
minSdkVersion 10
targetSdkVersion 23
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
firstflavorRelease {
storeFile file("XXXXXX.jks");
storePassword("XXXXXXX");
keyAlias "XXXXXXX";
keyPassword "XXXXXXX";
}
secondflavorRelease {
storeFile file("XXXXXXX.jks");
storePassword("XXXXXXXX");
keyAlias "XXXXXXXXX";
keyPassword "XXXXXXXX";
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
productFlavors {
firstflavor {
applicationId = "com.mycompany.firstflavor"
signingConfig signingConfigs.firstflavorRelease
versionCode 1000
versionName "1.9.2"
}
secondflavor {
applicationId = "com.mycompany.secondflavor"
signingConfig signingConfigs.secondflavorRelease
versionCode 1000
versionName "1.2.2"
}
}
testOptions {
unitTests.returnDefaultValues = true
}
}
dependencies {
compile project(':myappCore')
compile files('libs/amazonmaps-1.0.2.jar')
compile files('libs/zbar.jar')
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.9.5'
androidTestCompile 'com.linkedin.dexmaker:dexmaker-mockito:2.2.0'
androidTestCompile 'com.android.support:support-annotations:23.4.0'
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support.test:rules:0.5'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
androidTestCompile "com.android.support.test.espresso:espresso-intents:2.2.1"
testCompile 'org.powermock:powermock-api-mockito:1.6.1'
testCompile 'org.powermock:powermock-module-junit4-rule-agent:1.6.1'
testCompile 'org.powermock:powermock-module-junit4-rule:1.6.1'
testCompile 'org.powermock:powermock-module-junit4:1.6.1'
testCompile "org.robolectric:robolectric:3.2.2"
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.google.android.gms:play-services-maps:9.0.0'
compile 'com.google.android.gms:play-services-gcm:9.0.0'
compile 'com.google.android.gms:play-services-auth:9.0.0'
compile 'com.android.support:support-v4:23.4.0'
compile 'com.android.support:mediarouter-v7:23.4.0'
compile 'com.google.firebase:firebase-core:9.2.1'
compile 'com.google.firebase:firebase-messaging:9.2.1'
compile 'org.jsoup:jsoup:1.10.2'
}
apply plugin: 'com.google.gms.google-services'
그리고 여기 내 프로젝트 수준 Gradle을 파일 : 여기에
은 디버깅에 유용 할 수 있습니다 내 매니페스트 파일의 일부입니다
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
classpath 'com.google.gms:google-services:3.0.0'
}
}
allprojects {
repositories {
jcenter()
}
}
도움을 주시면 대단히 감사하겠습니다.
'firebase- *'라이브러리와 일관되게 만들기 위해'play-services- *'라이브러리 버전 9.2.1을 사용하도록 빌드 의존성을 업데이트하십시오. –
@BobSnyder 나는 fire-basemessaging의 버전과 일치시키기 위해 play-services-maps, play-services-gcm 및 play-services-auth의 버전을 9.2.1로 변경하라는 귀하의 제안을 따랐습니다. 사용되지 않는 MapView.getMap을 사용했기 때문에 MapFragmentFragment를 사용하도록 변경해야합니다. 변화가 있은 후에, 나는 전에 가지고 있던 오류가 사라졌고 이것은 아주 좋은 소식입니다. 그 점에 대해 대단히 감사합니다. 그러나 onTokenRefresh는 여전히 호출되지 않습니다. FirebaseInstanceId.getInstanc(). getToken()을 다른 액티비티의 다른 곳으로 호출하면 이전과 같이 토큰을 얻을 수 있습니다. 그러나 나는 그 문제를 해결했다고 생각하지 않는다. –
아직 파이어베이스 메시징 서비스가 필요합니다.firebase 인스턴스 서비스의 메소드가 호출되지 않았기 때문에 메시징 서비스의 메소드가 호출 될 것이라고 생각하지 않습니다.이 메소드에는 메시지 처리가 많이 포함되어 있으며 푸시 알림 구현에 중요합니다. 나는 여전히 google-services.json 파일을 두거나 패키지 이름 대신 applicationID를 사용하는 방식에 문제가 있다고 생각합니까? 그러나 Firebase 콘솔에 packagename을 사용하여 app을 추가했습니다. 따라서 내 firebase 프로젝트에는 실제로 세 가지 응용 프로그램이 있습니다. –