我有一个奇怪的疑问。 我正在我的安卓应用程序中使用 FCM。假设我的应用程序的软件包名称是com.example.example
,并且我使用 FCM 从 FCM 获得了google-service.json
文件com.example.example
并且我获得的令牌和通知也工作正常。 但是现在我将重新分解包 com.example.example 到 com.sample.sample 代码中的每个位置,包括google-service.json
文件,我也能够在这里获得令牌。 现在,如果我使用包com.example.example
转到FCM项目并从那里ping,通知将com.sample.sample
我怀疑它不应该来对吗? 请帮我解决这个问题。
这是我的应用程序级别gradle,其软件包名称在firbase注册:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.pushnotification.fcmnotifier"
minSdkVersion 22
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:mediarouter-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.android.support:design:26.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
compile 'com.google.android.gms:play-services:11.8.0'
compile 'com.google.firebase:firebase-messaging:11.8.0'
}
apply plugin: 'com.google.gms.google-services'
这是我复制的项目的gradle,包名称重构了:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.fcmNotification.fcmNotification"
minSdkVersion 22
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:mediarouter-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.android.support:design:26.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
compile 'com.google.android.gms:play-services:11.8.0'
compile 'com.google.firebase:firebase-messaging:11.8.0'
}
apply plugin: 'com.google.gms.google-services'
如果您要在应用的build.gradle文件中更改应用ID,则需要在Firebase控制台中使用新ID注册新应用。 然后下载该应用程序的google-service.json
文件。
手动更改 json 文件中的应用程序 ID 将不起作用。
另请注意,如果您只更改软件包名称,即清单文件中使用的名称,Google 将无法识别。在 build.gradle 中更改应用程序 ID 需要具有新的应用程序 ID。
有关更多信息,请查看此内容:https://developer.android.com/studio/build/application-id.html
这是Firebase支持对这个问题的回答。希望对您有所帮助。
感谢您联系 Firebase 支持人员。
看来您的情况可能与此SO线程有关。正如我引用我们的一位工程师的话,"请注意,Firebase 不会使用您的 Java 代码中的实际软件包名称,而是使用您应用程序的 build.gradle 文件中的 applicationId:.....但是,如果将代码重构到其他包中,则不会更新应用程序 ID。这就解释了为什么应用程序在这样的重构后将继续工作。
如果您需要进一步的帮助,请告诉我。
问候 理查
这是Firebase的最终结论:
我已经与我们的团队讨论了这个问题,结果发现 FCM 使用 GMP 应用程序 ID 而不是按包名称。这就是为什么即使重构了应用程序 ID 和包名称,通知仍然有效的原因。 我还建议您为不同版本的Android应用程序使用不同的Firebase应用程序,而不是只使用一个。
问候 理查
我不确定这一点,但可能是这个问题背后的一个原因是
更改Package
名称或引用Package
后,您应该必须更改applicationId
表单应用程序级别的 gradle文件,之后每package_name = "com.sample.sample"
更新一次(新的引用package
名称)从google-services.json
文件
希望这对您有所帮助