Это ситуация на моей странице установки на консоли анализа:
Как вы видите, некоторые устройства имеют "deviceToken", а некоторые не имеют "deviceToken". Это не хорошо, потому что для каждого устройства должно быть устройствоToken для работы.
Как это возможно? Это серьезная проблема, потому что те, у кого нет устройстваToken , не получают push-уведомления!
Я следил за всеми инструкциями на Parse.com и реализовал все, как они сказали, даже с помощью своего пустого проекта и с помощью различных вопросов в Интернете. Но ничего не исправила мою проблему, и теперь я ничего не могу сделать.
Единственное, о чем я могу думать, это то, что перед тем, как мое приложение (уже в Магазине) использовало Облачные сообщения Google, а затем с этим новым обновлением, я решил изменить систему и используйте Parse, полностью удалив систему GCM. Возможно, существует конфликт между двумя системами?
Мне нужно исправить это, так как вы можете себе представить, что это серьезная ошибка, и теперь 3/4 моих пользователей не получают push-уведомлений.
Если вы загрузите приложение и установите его: все хорошо, deviceToken в порядке. Если вы обновите приложение, потому что на нем уже была версия с GCM:
- некоторые устройства регистрируются в Parse хорошо, без каких-либо проблем
- некоторые устройства регистрируются в Parse, но без deviceToken
Для устройств, у которых нет устройства Token, я пробовал много вещей: вставлять 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: и эта работа прекрасна: у меня всегда есть инсталляция без проблем! И это единственное, что я делаю в своей MainActivity (нужно ли мне что-то делать? SaveInBackground, callback и т.д.?)
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')
}
Я не знаю, что еще делать, поэтому я надеюсь, что кто-то может мне помочь в этом.
Спасибо.