权限名称 C2D_MESSAGE 不是唯一的同时出现在 C2D_MESSAGE

Posted

技术标签:

【中文标题】权限名称 C2D_MESSAGE 不是唯一的同时出现在 C2D_MESSAGE【英文标题】:Permission name C2D_MESSAGE is not unique appears in both C2D_MESSAGE 【发布时间】:2018-09-22 12:48:34 【问题描述】:

我收到此错误:

Permission name C2D_MESSAGE is not unique (appears in both my.packagename.permission.C2D_MESSAGE and my.packagename.acc.permission.C2D_MESSAGE) (Previous permission here)

在我的 android 清单中:

<permission
    android:name="my.packagename.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="my.packagename.permission.C2D_MESSAGE" />

问题是在将 applicationIdSuffix 添加到 build.gradle 中的一个风味之后开始的(乍一看似乎与它无关)。

Build.gradle:

flavorDimensions "type"
productFlavors 
    acceptance 
        dimension="type"
        applicationIdSuffix ".acc"
        versionNameSuffix "-acc"
    
    production 
        dimension="type"
        applicationIdSuffix ""
        versionNameSuffix ""
    

Application.java:

    if (BuildConfig.DEBUG) 
        GoogleAnalytics.getInstance(context).setDryRun(true);
     else 
        setupGoogleAnalytics();
    

我创建了 google-services.json 的副本。

我已将 google-services.json 添加到:

 app\src\acceptance\google-services.json (fake numbers)

 app\src\production\google-services.json

我为接受中的键设置了不同的虚假值。我不希望接受版本中的 Google Analytics。所以我宁愿不创建单独的 google-services.json。这可能吗?

Simply removing manifest 中的权限 不适用于 API

【问题讨论】:

你检查过this SO post中的建议答案了吗? 是的,我已经检查过了,它不适用于 API 【参考方案1】:

您使用的是最新的 Firebase 云消息传递 (FCM) SDK,但保留了旧的 GCM 权限。 FCM SDK 在构建时自动将必要的权限注入到您的清单中。

根据此处的迁移指南从清单中删除 C2D_MESSAGE 权限:https://developers.google.com/cloud-messaging/android/android-migrate-fcm

【讨论】:

文档不正确。我在 API 18 上对此进行了测试,但失败了。 您在 API 18 上看到了哪些错误?【参考方案2】:

将新的 androidmanifest 添加到:

app\src\acceptance\androidmanifest.xml

并添加“acc”前缀:

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<!--this needs to be in there for API 23 and lower-->
<permission
    android:name="my.packagename.acc.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="my.packagename.acc.permission.C2D_MESSAGE" />

【讨论】:

【参考方案3】:

当您尝试在同一设备上安装应用的调试版和发布版时,通常会出现此问题。

为了修复此错误,您尝试卸载并重新安装该应用程序。

关于文件AndroidManifest.xml中的源代码:

<permission
    android:name="my.packagename.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="my.packagename.permission.C2D_MESSAGE" />

我认为您的许可没问题。

【讨论】:

以上是关于权限名称 C2D_MESSAGE 不是唯一的同时出现在 C2D_MESSAGE的主要内容,如果未能解决你的问题,请参考以下文章

设置推送通知权限

如何覆盖使用功能和使用权限

Laravel 验证:唯一,当名称相同,但其他字段不同时

基于Flask实现后台权限管理系统 - 表设计

Weka 3.8 中的属性名称不是唯一的

名称属性在 HTML 文档中是不是必须是唯一的?