这是我在Parse Console上的“安装”页面中的情况:
如您所见,有些设备具有“deviceToken”,而有些则没有“deviceToken”。 这不好,因为每个设备都必须具有deviceToken才能正常工作。
这怎么可能?这是一个严重的问题,因为没有deviceToken 的用户不会收到推送通知!
我已经按照Parse.com上的所有说明进行了操作,并按照他们所说的执行了所有操作,即使在他们的空白项目的帮助下以及在网络上的各种问题的帮助下也是如此。但是没有什么能解决我的问题,现在我什么也做不了。
我唯一能想到的是,在我的应用程序(已在商店中)用于使用 Google Cloud Messaging 之前,然后通过此新更新,我决定更改系统并使用 Parse 完全删除GCM系统。两种系统之间是否可能存在冲突?
我需要解决此问题,因为您可以想象这是一个严重的错误,现在我的3/4用户没有收到推送通知。
如果您下载并安装了该应用程序:一切正常,则deviceToken没问题。如果您由于设备上已经存在带有GCM的版本而更新了该应用,请执行以下操作:
对于没有deviceToken的设备,我尝试了很多事情:手动插入deviceToken,卸载并重新安装应用程序,删除Parse上的特定行等。但是,没有任何好处。。。仍然面临着这个问题。
我的代码
Application.java
public class Application extends android.app.Application {
public Application() {
}
@Override
public void onCreate() {
super.onCreate();
// Initialize the Parse SDK.
Parse.initialize(this, "x", "x");
// Specify an Activity to handle all pushes by default.
PushService.setDefaultPushCallback(this, MainActivity.class);
}
}
MainActivity.java
在我的mainActivity中,我只是将deviceToken(在我的情况下是installationId)连接到我的userAgent中:这项工作很好:我一直都具有installationId,没有任何问题!这是我在MainActivity中唯一要做的事情(我还需要做其他事情吗?saveInBackground,回调等等。?)
deviceToken = ParseInstallation.getCurrentInstallation().getInstallationId();
webSettings.setUserAgentString(userAgent + " ||" + deviceToken);
AndroidManifest.xml
<!-- Gestione del guasto-->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- Utilizzo di internet -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Permesso di vibrare per le push notifications -->
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<!-- Mantiene attivo il processore così da poter ricevere in qualsiasi momento le notifiche -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- Consente di impostare l'allarme per l'aggiornamento automatico -->
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<permission android:name="com.hoxell.hoxellbrowser.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.hoxell.hoxellbrowser.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<application
android:name="com.hoxell.hoxellbrowser.Application"
android:allowBackup="true"
android:icon="@drawable/ic_launcher_hoxell"
android:label="@string/app_name"
android:theme="@style/AppTheme"
>
<!-- Richiesto per le applicazioni che usano Google Play Services -->
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SettingsActivity"></activity>
<receiver android:name=".AlarmReceiver"/>
<service android:name="com.parse.PushService" />
<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>
<receiver android:name="com.hoxell.hoxellbrowser.Receiver"
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.hoxell.hoxellbrowser" />
</intent-filter>
</receiver>
</application>
Build.gradle
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
// You must install or update the Support Repository through the SDK manager to use this dependency.
compile 'com.android.support:support-v4:20.+' //support
compile "com.google.android.gms:play-services:5.0.+" //play services
compile 'com.parse.bolts:bolts-android:1.+'
compile fileTree(dir: 'libs', include: 'Parse-*.jar')
}
我真的不知道该怎么办,这就是为什么我希望有人可以帮助我。
谢谢。
最佳答案
您是否同时在平板电脑上使用2个用户个人资料?因为我遇到了完全相同的问题,并且根据我的经验,配置文件之间存在冲突。实际上,在我的情况下,一台设备正在将2行记录到Parse数据库中。一种带有deviceToken,另一种带有“undefined” deviceToken。
不幸的是,我从来没有解决过这个问题,我想这是Parse的一个错误。
关于android - PARSE : Push Notifications “deviceToken” undefined,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28449777/