解析 Android 推送通知

Posted

技术标签:

【中文标题】解析 Android 推送通知【英文标题】:Parse Android Push Notifcations 【发布时间】:2017-01-28 03:57:45 【问题描述】:

我在 Back4Apps 上运行 Parse,我已按照他们的说明向 T 了解如何为 android 设置推送通知。

http://docs.back4app.com/docs/android/push-notification/send-push-dashboard/

我从 Parse 仪表板推送通知并且我的手机振动,它有时甚至会显示通知 1/2 秒然后立即消失,所以我知道我的手机正在接收它,我错过了什么?为什么不显示?

非常感谢。

主要应用:

  public class MainApplication extends Application 
     public MainApplication()
    
        instance=this;
    
    public static Context getContext()
    
        return instance;
    

    @Override
    public void onCreate() 
        super.onCreate();

              // Enable Crash Reporting
        ParseCrashReporting.enable(this);
        Parse.enableLocalDatastore(this);
        Parse.initialize(new Parse.Configuration.Builder(getApplicationContext())
                .applicationId("blah blah")
                .clientKey("blah blah")
                .server("https://parseapi.back4app.com/")
                .enableLocalDataStore()
                .build());

        ParseInstallation installation = ParseInstallation.getCurrentInstallation();
        installation.put("GCMSenderId", "123456789 etc");
        installation.saveInBackground();


    

Build.Gradle:

 dependencies 
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile files('src/main/java/libs/ParseCrashReporting-1.9.2.jar')
    compile files('src/main/java/libs/picasso-2.5.2.jar')
    compile 'com.parse.bolts:bolts-android:1.+'
    compile 'com.google.android.gms:play-services:10.0.1'
    compile 'com.google.android.gms:play-services-ads:10.0.1'
    compile 'com.facebook.android:facebook-android-sdk:[4,5)'
    compile 'com.parse:parsefacebookutils-v4-android:1.10.3@aar'
    compile 'com.google.firebase:firebase-core:10.0.1'
    compile 'com.google.firebase:firebase-messaging:10.0.1'
    compile 'com.parse:parse-android:1.13.1'

apply plugin: 'com.google.gms.google-services'

Android 清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="adam.exercisedictionary">

<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.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<permission android:name="adam.exercisedictionary.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="adam.exercisedictionary.permission.C2D_MESSAGE" />
<application android:allowBackup="true"
    android:label="@string/app_name"
    android:icon="@drawable/ic_launcher"
    android:name="adam.exercisedictionary.MainApplication"
    android:theme="@style/AppTheme"
    android:largeHeap="true">
<activity
        android:name="adam.exercisedictionary.CategoryList"
        android:label="Gym Exercises">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data android:name="android.app.default_searchable"
            android:value=".SearchResultsActivity"/>
    </activity>
<service android:name="com.parse.PushService" />
    <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="adam.exercisedictionary" />
        </intent-filter>
    </receiver>
    <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.OPEN" />
            <action android:name="com.parse.push.intent.DELETE" />
        </intent-filter>
    </receiver>
    <meta-data android:name="com.parse.push.gcm_sender_id"
        android:value="id:123456789 etc" />

【问题讨论】:

【参考方案1】:

您能否尝试创建一个扩展 AppCompatActivity 的 Activity,而不是扩展 Application 的类?这可能是问题所在,因为您指出的教程使用的是该方法,而不是这种方法。

【讨论】:

谢谢,我昨晚想通了。上面的代码工作正常。我正在测试的设备有问题。我将 APK 发送到我朋友的一些 Android 设备上尝试,它运行良好,他们收到了警报。我的设备上一定有东西禁止通知,我的应用程序允许在设备上发出通知,但它不会工作。 我明白了。太好了,你发现了问题。我会尝试重新安装 Android SDK【参考方案2】:

上面的代码运行良好。我正在测试的设备有问题。我将 APK 发送到我朋友的一些 Android 设备上尝试,它运行良好,他们收到了警报。我的设备上一定有东西禁止通知,我的应用程序允许在设备上发出通知,但它只是无法工作。

证明了在多台设备上进行测试的要点,以防万一一切看起来应该可以正常工作而不能正常工作。

【讨论】:

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

Android 解析推送通知和新 GCM 生成错误的设备令牌并解析推送通知不起作用

为 Android 设置解析推送通知

在 Android 中未收到解析推送通知

如何启用和禁用解析推送通知 Android

解析Android推送通知收不到

Android - 解析推送通知在打开时崩溃