android - 无法访问外部库中存在的 WakefulBroadcastReceiver

标签 android push-notification android-manifest google-cloud-messaging android-broadcast

我正在使用在 SDK 中编写的 GCM 进行推送通知,开发人员需要将我的 SDK 添加为库项目,我的 SDK 使用开发人员的上下文并创建注册 ID,但是当我使用ID 我无法收到任何通知,事实上我的接收器类未被调用

SDK中的Manifest文件有

   <receiver
        android:name=".GcmBroadcastReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <!-- Receives the actual messages. -->
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="com.mysdk" />
        </intent-filter>
    </receiver>
    <service android:name=".GcmIntentService" /> 

权限有

  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.GET_ACCOUNTS" />
  <uses-permission android:name="android.permission.WAKE_LOCK" />
  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
 <permission
    android:name="com.mysdk.permission.C2D_MESSAGE"
    />

<uses-permission android:name="com.mysdk.permission.C2D_MESSAGE" />

将我的 SDK 作为库文件的应用程序 list

      <receiver
        android:name="com.mysdk.GcmBroadcastReceiver" 
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>

            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="com.mysdk" />
        </intent-filter>
    </receiver>
    <service android:name="com.mysdk.GcmIntentService" />

权限有

  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.GET_ACCOUNTS" />
  <uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission
    android:name="com.mysdk.permission.C2D_MESSAGE"
    />

<uses-permission android:name="com.mysdk.permission.C2D_MESSAGE" />

任何人都可以建议哪里出了问题,这可能是可能的,即从发送通知 开发工具包

最佳答案

使用您的 SDK 的应用不应将 com.mysdk 用于 GCM 权限和广播接收器 intent-filter 的类别。相反,它应该使用自己的包名称。

下面我标记了您应该在应用 list 中进行的更改:

<receiver
    android:name="com.mysdk.GcmBroadcastReceiver" 
    android:exported="true"
    android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>

        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="CHANGE_TO_YOUR_APPS_PACKAGE_NAME" />
    </intent-filter>
</receiver>

<service android:name="com.mysdk.GcmIntentService" />

<permission android:name="CHANGE_TO_YOUR_APPS_PACKAGE_NAME.permission.C2D_MESSAGE"/>

<uses-permission android:name="CHANGE_TO_YOUR_APPS_PACKAGE_NAME.permission.C2D_MESSAGE" />

关于android - 无法访问外部库中存在的 WakefulBroadcastReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18985704/

相关文章:

Android:重置按钮永久禁用另一个按钮

android - 如何使用 dagger.android 将 Activity 注入(inject)另一个类?

android - Kotlin 结合了 2 个以上的流程

Android:如何隐藏在编辑文本框中输入的文本?

Firebase 通知 - 发送到用户段与发送到主题差异

java - Android 应用程序未显示在 "All Apps"中

java - 从包创建使用权限时出错

从 Activity 标签中选择的 Android 应用程序图标名称比从应用程序标签中选择的

swift - 图标上的通知不会消失

iphone 的 Python 服务器端推送通知