我遇到的问题是我在所有环境中都收到了所有通知。所有构建当前具有相同的包名称。因此,只能在设备上同时安装一个版本。但是我会收到针对所有构建的通知(可以是正确的一个或其他一个)。
我查看了注册ID,它总是一样的。问题可能是所有应用程序共享相同的包名?
我看到的注册参数是:
清单中的广播接收器:
<receiver android:name="com.google.android.c2dm.C2DMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.company.product" /> </intent-filter> <intent-filter> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="com.company.product" /> </intent-filter> </receiver>
权限:
<permission android:name="com.company.product.permission.C2D_MESSAGE"
android:protectionLevel="signature"/> <uses-permission android:name="com.company.product.permission.C2D_MESSAGE"/>报名方式:
Intent registrationIntent = new Intent(REQUEST_REGISTRATION_INTENT); registrationIntent.setPackage(GSF_PACKAGE); registrationIntent.putExtra(EXTRA_APPLICATION_PENDING_INTENT, PendingIntent.getBroadcast(getApplicationContext(), 0, new Intent(), 0)); registrationIntent.putExtra(EXTRA_SENDER, "app@company.com"); context.startService(registrationIntent);
为了仅接收针对正在运行的应用程序(环境)的通知,我究竟需要进行哪些更改?
此外,如果问题是包名称,我不明白为什么。假设我使用调试版本登录。使用包名 x 注册。现在我注册生产,也使用包名 x。我是否会收到来自调试的通知,因为它之前使用相同的包名称注册?这是否意味着如果我从未使用/注册过调试版本,我将永远不会使用生产应用程序收到来自调试环境的通知?