我目前正在使用 parse 在Android应用上发送和接收推送通知 一切都很好,直到我为我的build.gradle添加了一个应用程序ID后缀,用于调试构建类型:
defaultConfig {
applicationId "com.example.myapp"
...
}
buildTypes {
debug {
applicationIdSuffix ".debug"
...
}
release {
...
}
}
现在我可以在Parse中看到新的安装已经在applicationId字段中注册:com.example.myapp.debug
,因此在清单文件中我使用了以下代码:
<receiver
android:name="com.parse.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="${applicationId}" />
</intent-filter>
</receiver>
这样做我认为根据构建类型注册是动态的。
实际上它不起作用:使用.debug
后缀注册的安装没有GCMSenderId
也没有DeviceToken
,因此我无法收到任何通知。我显然错过了一点,或者我不了解注册的工作原理,但我无法确定如何使注册成功。
Parse使用applicationId来注册应用程序,还是使用真实的包名(用于R)?
是否有人设法处理具有不同buildTypes(applicationId后缀)的解析通知?
答案 0 :(得分:5)
好的,我终于明白了。我忘了在权限声明中添加动态applicationId
...
<permission
android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
问题解决了。