przed znakowaniem to jako duplikat:nie popycha otrzymane po aplikacja jest zamknięty
czytałem co najmniej 15 Podobne wątki i każda z nich jest albo za pomocą starego kodu Parse (the teraz przestarzałe setDefaultPushCallback) lub problem był wynikiem wywołania funkcji Parse.initialize (...) w działaniu, a nie w klasie Application. Ale to jest nie dotyczy mojej sprawy. Oficjalny przykład (którego używam) ewidentnie robi to dobrze, więc kod jest już w klasie Application.
Pobrałem plik Push Starter example from Parse's official guides i wypróbowałem go na emulatorze. Otrzymuję wypychania tylko wtedy, gdy aplikacja jest uruchomiona. Chwila, gdy jest zamknięta (usunięta z listy "ostatnich aplikacji", a nie wymuszona), już nie dostaję wypychania. Co sprawia, że cała funkcja jest raczej bezużyteczna ... Próbowałem z GCM i bez niego, zachowanie jest takie samo.
Jakieś wskazówki, co może być nie tak? Wszystkie klasy są przykładowymi przykładami, niczego nie przesłoniłem ani nie dodałem (wyjątkiem jest id/key i wywołanie ParsePush.subscribeInBackground, które skopiowałem z przewodnika). Co dziwne, przykładowy kod nie zawierał ParsePush.subscribeInBackground, a QuickStart go nie wspomina. Daje nawet przycisk testu, który rzekomo wysyła naciśnięcie, którego nigdy nie otrzymuję, z lub bez subskrybowaniaInBackground. Jedyny sposób, w jaki udało mi się uzyskać dotychczasowy push, polegał na subskrybowaniuBackground i ręcznym wysyłaniu przez konsolę internetową i tylko wtedy, gdy aplikacja jest uruchomiona. Konsola internetowa również informuje, że są 2 zarejestrowane urządzenia ... co jest nieprawdą.
Oczywisty:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.parse.starter"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="21"/>
<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.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<!--
IMPORTANT: Change "com.parse.starter.permission.C2D_MESSAGE" in the lines below
to match your app's package name + ".permission.C2D_MESSAGE".
-->
<permission android:protectionLevel="signature"
android:name="com.parse.starter.permission.C2D_MESSAGE" />
<uses-permission android:name="com.parse.starter.permission.C2D_MESSAGE" />
<application
android:name=".ParseApplication"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:allowBackup="true">
<activity
android:name=".ParseStarterProjectActivity"
android:label="@string/app_name" >
<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.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.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" />
<!--
IMPORTANT: Change "com.parse.starter" to match your app's package name.
-->
<category android:name="com.parse.starter" />
</intent-filter>
</receiver>
</application>
</manifest>
ParseApplication:
package com.parse.starter;
...
public class ParseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Initialize Crash Reporting.
ParseCrashReporting.enable(this);
// Enable Local Datastore.
Parse.enableLocalDatastore(this);
ParseUser.enableAutomaticUser();
// Add your initialization code here
Parse.initialize(this, "***", "***");
ParseACL defaultACL = new ParseACL();
// Optionally enable public read access.
// defaultACL.setPublicReadAccess(true);
ParseACL.setDefaultACL(defaultACL, true);
ParsePush.subscribeInBackground("", new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Log.d("com.parse.push", "successfully subscribed to the broadcast channel.");
} else {
Log.e("com.parse.push", "failed to subscribe for push", e);
}
}
});
}
}
Cześć Kaqqao, otrzymywanie powiadomień push przez "Parse Way" przestanie działać, gdy zabijesz swoją aplikację od niedawna. Dzieje się tak, ponieważ zabicie aplikacji powoduje przerwanie połączenia z serwerami zaplecza programu Parse, a zatem serwery nie mogą już niczego naciskać. Powiadomienia push za pośrednictwem GCM powinny działać, nawet jeśli twoja aplikacja zostanie zabita (nie wymuszona zatrzymana). Dzieje się tak dlatego, że GCM działa za pośrednictwem Usług Google Play, aplikacji, która zawsze działa w tle i która może uruchomić Twoją aplikację w razie potrzeby (i nie wymuszać jej wstrzymania). Twój kod również wygląda poprawnie, więc naprawdę nie widzę problemu. –
Zastanawiam się, czy istnieje konflikt nazwy pakietu (ponieważ używasz tego samego pakietu co przykład), w ten sposób istnieje wiele aplikacji z tym samym pakietem, ale inny podpis. Czy możesz spróbować zmienić swój pakiet na coś wyjątkowego? 'com.parse.kaqqao' –
@jmols OMG, wygląda na to, że twoja teoria nazw pakietów była poprawna! Po zmianie nazwy zacząłem otrzymywać wiadomości z zamkniętą aplikacją. Nie wiadomo, dlaczego działało z uruchomioną aplikacją, ale ... Czy w takim razie chciałbyś zamienić dwa komentarze w odpowiedź, aby móc przyznać nagrodę, zanim wygaśnie? – kaqqao