Android:使用 ParsePushBroadcastReceiver 解析推送通知不起作用

Posted

技术标签:

【中文标题】Android:使用 ParsePushBroadcastReceiver 解析推送通知不起作用【英文标题】:Android: Parse push notifications with ParsePushBroadcastReceiver doesn't work 【发布时间】:2016-03-18 12:33:43 【问题描述】:

我关注了启动,我有一个正在运行的应用程序可以读取和写入解析,问题是我希望用户接收推送通知,但我无法让它工作。

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<permission android:protectionLevel="signature"
    android:name="com.messaging.application.app.permission.C2D_MESSAGE"/>
<user-permission android:name="com.messaging.application.app.permission.C2D_MESSAGE"/>

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Light.NoTitleBar"
    android:name="com.messaging.application.app.MyApplication">
    <activity
        android:name="com.messaging.application.app.LoginActivity"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity 
        android:name="com.messaging.application.app.ListUsersActivity"
        android:screenOrientation="portrait">
    </activity>
    <activity
        android:name="com.messaging.application.app.SignUpActivity"
        android:screenOrientation="portrait">
    </activity>
    <activity
        android:name="com.messaging.application.app.ListFriendRequests"
        android:screenOrientation="portrait">
    </activity>
    <activity
        android:name="com.messaging.application.app.ListFriendsActivity"
        android:screenOrientation="portrait">
    </activity>
    <service android:name="com.messaging.application.app.MessageService"/>


    <service android:name="com.parse.PushService" />
    <receiver android:name="com.parse.ParsePushBroadcastReceiver"
        android:exported="false">
        <intent-filter>
            <action android:name="com.parse.push.intent.RECEIVE" />
            <action android:name="com.parse.push.intent.DELETE" />
            <action android:name="com.parse.push.intent.OPEN" />
        </intent-filter>
    </receiver>
    <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="com.messaging.application.app" />
        </intent-filter>
    </receiver>


    <!--<receiver android:name="com.messaging.application.app.CustomReceiver"-->
        <!--android:exported="false">-->
        <!--<intent-filter>-->
            <!--<action android:name="com.parse.push.intent.RECEIVE"/>-->
            <!--<action android:name="com.parse.push.intent.DELETE"/>-->
            <!--<action android:name="com.parse.push.intent.OPEN"/>-->
        <!--</intent-filter>-->
    <!--</receiver>-->


    <activity android:name="com.messaging.application.app.MessagingActivity"
              android:screenOrientation="portrait">
    </activity>

</application>

还有我的 build.grade

    apply plugin: 'com.android.application'
apply plugin: 'com.parse'

buildscript 
    repositories 
        mavenCentral()
        maven  url 'https://maven.parse.com/repo' 
    
    dependencies 
        classpath 'com.parse.tools:gradle:1.+'
    


android 
    compileSdkVersion 19
    buildToolsVersion "19.1.0"
    defaultConfig 
        applicationId "com.messaging.application.app"
        minSdkVersion 11
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    
    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        
    
    productFlavors 
    


dependencies 
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:19.+'
    compile files('libs/sinch-android-rtc-3.9.2.jar')
    compile 'com.parse.bolts:bolts-android:1.+'
    compile fileTree(dir: 'libs', include: 'Parse-1.13.0.jar')

我已经在安装过程中初始化了MyApplication 类中的解析。

public class MyApplication extends Application 
    @Override
    public void onCreate() 
        super.onCreate();
        Parse.initialize(this, "xxxx", "xxxx"); // replaced just for the question
        ParseInstallation.getCurrentInstallation().saveInBackground();

    

当我登录解析时,我按了一些简单文本的发送通知,但我的设备上没有收到通知。问题可能是什么?

【问题讨论】:

你连接到互联网了吗?您能在安装表中看到您的安装吗?它的 deviceToken 呢?您是否将推送发送给正确的受众? 嗨,我已连接到互联网,在解析中我可以看到安装,我将推送发送给所有用户(只有这 1 个),我不明白 deviceToken 问题。你能具体说明那是什么吗? 当然。在安装表中有一个名为 deviceToken 的列。如果它为 NULL,则可能是您的问题的原因。 它是 。那会有什么不同吗? 是的,这就是问题所在。未发送推送,因为 Parse 无法识别您的设备。这是由于您的应用中的配置错误造成的。 【参考方案1】:

我想你错过了ParseBroadcastReceiver。这是我在我的配置和你的配置之间看到的唯一差异。尝试将此添加到您的清单中:

   <receiver android:name="com.parse.ParseBroadcastReceiver">
     <intent-filter>
       <action android:name="android.intent.action.BOOT_COMPLETED"/>
       <action android:name="android.intent.action.USER_PRESENT"/>
     </intent-filter>
   </receiver>

检查deviceToken ;)

希望对你有帮助!

【讨论】:

我也添加了这个接收器。我只是找不到 ParseInstallation 有什么问题以及为什么它忽略了 deviceToken 我发现如果应用程序在android上,deviceToken实际上不存在。这就是他们在 Parse.com 上的文档中所写的内容。

以上是关于Android:使用 ParsePushBroadcastReceiver 解析推送通知不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android之SharedPreferences使用

想要使用cordova/android禁用android的HardBack按钮

如何在Mac中使用Android SDK

何时使用“?android”或“@android”?

Android 安装包优化Android 中使用 SVG 图片 ( 使用 appcompat 支持库兼容 5.0 以下版本的 Android 系统使用矢量图 )

Android Handler使用