Java 解析标记为已发送但在设备上看不到的android推送通知
编辑:解决了!问题是我在模拟器中运行该应用程序,但没有生成parse deviceToken。我在实际设备上运行了它,现在我收到了通知 我一直在尝试让解析推送通知在android上工作。 在Parse.com仪表板上,我看到我的应用程序已注册并连接到Parse,但当我发送推送通知时,Parse说它已发送,但它没有显示在设备/模拟器上 主要活动: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
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>