Ответ 1
Я нашел решение в этом сообщении GCM не регистрируется при изменении имени пакета с помощью Gradle. Я просто переоцениваю BroadcastReceiver, если кто-нибудь может объяснить, почему он помогает, пожалуйста, скажите мне.
У меня есть проект андроида android gradle GCM. Сработало хорошо, когда я добавляю 2 аромата, push-уведомление перестало работать. Мой манифест компиляции (взятый из файла app\build\intermediates\manifests\ex\debug
) приведен ниже:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.flavor.app"
<uses-permission android:name="com.flavor.app.permission.C2D_MESSAGE" />
<permission
android:name="com.flavor.app.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.flavor.app" />
</intent-filter>
</receiver>
<service android:name="com.ex.app.GCMIntentService" />
<service
android:name="com.ex.app.AppLocationService"
class=".AppLocationService" >
<intent-filter>
<action
android:name=".AppLocationService"
android:value=".AppLocationService" />
</intent-filter>
</service>
Что мне делать, чтобы исправить эту проблему? Пожалуйста помоги.
UPD1. Я использую gradle v.0.12+. Я думаю, что мой последний файл манифеста выглядит хорошо, GCMRegistrar.checkManifest(this); - без ошибок, но GCMRegistrar.isRegistered(this) всегда false. = (
UPD2. Мой первый проект аромата с оригинальным названием пакета (как проект в основной ветке) работает хорошо, но второй аромат с измененным пакетом не работает (registrationId для push все еще пуст), но в файле манифеста все разрешения верны.
Я нашел решение в этом сообщении GCM не регистрируется при изменении имени пакета с помощью Gradle. Я просто переоцениваю BroadcastReceiver, если кто-нибудь может объяснить, почему он помогает, пожалуйста, скажите мне.
Симпы используют псевдоним ${applicationId}
, подобный этому
<permission android:name= "${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel= "signature" />
<uses-permission android:name= "${applicationId}.permission.C2D_MESSAGE" />
<uses-permission android:name= "com.google.android.c2dm.permission.RECEIVE" />
И для соответствующего приемника используйте этот
<receiver
android:name = "com.mixpanel.android.mpmetrics.GCMReceiver"
android:permission = "com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name = "com.google.android.c2dm.intent.RECEIVE"/>
<action android:name = "com.google.android.c2dm.intent.REGISTRATION"/>
<category android:name = "${applicationId}"/>
</intent-filter>
</receiver>
добавьте следующий код в apps build.gradle, который скопирует выбранный файл flovour json в папку приложения.
gradle.taskGraph.beforeTask { Task task ->
if(task.name ==~ /process.*GoogleServices/) {
android.applicationVariants.all { variant ->
if(task.name ==~ /(?i)process${variant.name}GoogleServices/){
copy {
from "/src/${variant.flavorName}"
into '.'
include 'google-services.json'
}
}
}
}
}