Java 解析标记为已发送但在设备上看不到的android推送通知

Java 解析标记为已发送但在设备上看不到的android推送通知,java,android,parse-platform,push-notification,android-notifications,Java,Android,Parse Platform,Push Notification,Android Notifications,编辑:解决了!问题是我在模拟器中运行该应用程序,但没有生成parse deviceToken。我在实际设备上运行了它,现在我收到了通知 我一直在尝试让解析推送通知在android上工作。 在Parse.com仪表板上,我看到我的应用程序已注册并连接到Parse,但当我发送推送通知时,Parse说它已发送,但它没有显示在设备/模拟器上 主要活动: protected void onCreate(Bundle savedInstanceState) { super.onCreate(save

编辑:解决了!问题是我在模拟器中运行该应用程序,但没有生成parse deviceToken。我在实际设备上运行了它,现在我收到了通知

我一直在尝试让解析推送通知在android上工作。 在Parse.com仪表板上,我看到我的应用程序已注册并连接到Parse,但当我发送推送通知时,Parse说它已发送,但它没有显示在设备/模拟器上

主要活动:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
舱单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="XXXXX.XXXXX.XXXXX.XXXXX">


<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.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:protectionLevel="signature"
    android:name="${applicationId}.permission.C2D_MESSAGE" />
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<application
    android:name=".News"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <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="${applicationId}" />
        </intent-filter>
    </receiver>
    <meta-data android:name="com.parse.push.notification_icon"
        android:resource="@mipmap/ic_launcher"/>
</application>

</manifest>
我是一个新的解析者,Iv'e尝试了很多我在网上看到的东西(如果我的代码乱七八糟,我很抱歉),但我似乎找不到解决这个问题的方法

任何帮助都将不胜感激, 多谢各位


(我见过有人将解析内容放在不同的类中,我自己也尝试过,但我真的不知道该做什么或它是如何工作的)

最好在
应用程序
子类中初始化解析,而不是在
活动
中初始化解析

例如,当接收到推送时,您的
BroadcastReceiver
将被激活,从而触发
应用程序首先运行。这将根据需要初始化解析

请记住,您还需要订阅正确的频道才能接收任何内容

下面是一个示例应用程序类:

public class MyApp extends Application {

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

        Parse.initialize(this, "XXXXXXXXX", "XXXXXXXXX");
        ParseInstallation.getCurrentInstallation().saveInBackground();

        ParsePush.subscribeInBackground("<Channel Name>");
    }
}
您的广播接收器如下所示:

<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>

在构建应用程序之前,Gradle将自动将
${applicationId}
扩展为正确的字符串


当您开始构建不同的应用程序风格时,这一点变得至关重要,因为您需要处理不同的应用程序ID。

@RichardLeMesurier谢谢您的回答。我的代码还好吗?@RichardLeMesurier好的,谢谢,我会尽快尝试并报告!您能解释一下如何将解析代码移到应用程序类中吗?因为正如我在问题中所说的,我试过了,但没有成功。如果你能给我解释一下/给我指个向导,那就太好了。非常感谢!1) 你确定你订阅了正确的频道吗。。。2) 如果转到Parse仪表板的installations data表,它是否会在
deviceToken
列中显示注册ID为的设备。。。3) 检查您的
adb logcat
输出是否有推送发生的迹象?1)是的,通道显示良好,一切正常。2) deviceToken列为空。3) 没有证据。@RichardLeMesurier是的,我有点傻:)谢谢你的详细回答,你真的帮助我理解了一切是如何工作的,以及如何更好地使用解析!非常感谢。谢谢你的详细回答。我将解析代码移到了另一个应用程序类中,但现在parse甚至没有注册设备已连接。我根据Iv'e在代码中所做的更改编辑了问题根据您的回答,我这样做对吗?它仍然不起作用。
<application
    android:name=".MyApp">
... etc ...
</application>
<permission
    android:name="${applicationId}.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<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>