2015-05-28 16 views
10

Ich versuche, Parse Push-Benachrichtigungen auf Android für einige Zeit jetzt einrichten. Ich folgte verschiedenen Tutorials, und ich versuche, die Benachrichtigungen von ihrer Web-Plattform zu senden, aber nichts scheint zu funktionieren. Hier ist, was ich bisher versucht habe.Parse Benachrichtigungen auf Android wird nicht funktionieren

Hier ist die onCreate Methode meiner Anwendungsklasse

@Override 
    public void onCreate() { 
     super.onCreate(); 
     Log.i("PushNotifications","PARSE initialize"); 

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

     ParsePush.subscribeInBackground("", new SaveCallback() { 
      @Override 
      public void done(ParseException e) { 
       if (e == null) { 
        Log.i("PushNotifications","com.parse.push" + " successfully subscribed to the broadcast channel."); 
       } else { 
        Log.i("PushNotifications","com.parse.push" + " failed to subscribe for push"); 
       } 
      } 
     }); 

    } 

Diese erfolgreich aufgerufen wird, wie ich das Protokoll erhalten

erfolgreich an die Broadcast-Kanal abonniert.

Auch hier einige relevante Inhalte meiner Manifest-Datei:

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<permission android:name="com.my.app.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
<uses-permission android:name="com.my.app.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.READ_CONTACTS"/> 
<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 


<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:name=".App" 
    android:theme="@style/AppTheme"> 

    <activity 
     android:name=".activities.MainActivity" 
     android:launchMode="standard" 
     android:screenOrientation="sensorPortrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <meta-data android:name="com.parse.push.gcm_sender_id" android:value="id:123456789" /> 
    <meta-data android:name="com.parse.push.notification_icon" android:resource="@drawable/ic_launcher"/> 

    <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> 
    <!--com.parse.GcmBroadcastReceiver"--> 
    <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.my.app" /> 
     </intent-filter> 
    </receiver> 

</application> 

Wenn ich Push versuchen das Senden von Parse Website, geschieht nichts.

Da dies nicht funktioniert, habe ich versucht, meinen eigenen GcmBroadcastReceiver zu implementieren und im Manifest zu ändern.

<receiver android:name=".receivers.MyCustomReceiver" 
      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.my.app" /> 
      </intent-filter> 
</receiver> 

Und

public class MyCustomReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i("PushNotifications","MyCustomReceiver"); 
    } 
} 

Ohne Erfolg.

Dann habe ich auch versucht, meinen eigenen ParsePushBroadcastReceiver zu erstellen (durch Erben von ParsePushBroadcastReceiver).

<receiver android:name=".receivers.CustomParseReceiver" 
      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> 

Und

public class CustomParseReceiver extends ParsePushBroadcastReceiver { 

    @Override 
    protected Notification getNotification(Context context, Intent intent) { 
     Log.i("PushNotifications","PARSE getNotification"); 
     return null; 
    } 

    @Override 
    protected void onPushOpen(Context context, Intent intent) { 
     Log.i("PushNotifications","PARSE onPushOpen"); 
    } 

    @Override 
    protected void onPushReceive(Context context, Intent intent) { 
     Log.i("PushNotifications","PARSE onPushReceive");   
    } 

    private JSONObject getDataFromIntent(Intent intent) { 
     Log.i("PushNotifications","PARSE getDataFromIntent");    
    } 

} 

Es hat nicht funktioniert.

Die Sache ist .. wenn ich meinen eigenen GCM BroadcastReceiver erstelle und ich eine Benachrichtigung von meinem eigenen Server (mit etwas kleinem PHP-Skript) sende, wird die Benachrichtigung erfolgreich empfangen.

Ich frage mich wirklich, was ist falsch mit meiner Implementierung der Client-Seite parse Benachrichtigungen System.

Gibt es einen Hinweis darauf, woher das Problem kommen könnte?

+0

Versuchen Sie es mit 'android: exported =" true "' auf dem Broadcast-Empfänger – FunkTheMonk

+0

Es löst eine SecurityException: Um externe Manipulation der Benachrichtigungen Ihrer App zu verhindern, müssen alle Empfänger für die folgenden Aktionen ihre exportierten Attribute auf false festgelegt haben : com.parse.push.intent.RECEIVE, com.parse.push.intent.OPEN, com.parse.push.intent.DELETE – AlexMok

+1

Ihr Code scheint in Ordnung zu sein. Ich denke, du solltest nach Rechtschreibfehlern suchen. Ich habe Parse benutzt und bin 6 Stunden lang steckengeblieben, nur um einen Rechtschreibfehler 'Player' 'Players' herauszufinden. – Mayank

Antwort

2

zuerst: Haben Sie ermöglichen Push Notification Settings aus dem Projekt Einstellung

ich das gleiche Problem konfrontiert, schließlich lösche ich mein Projekt und neue in Parse bauen, dann ist das Problem gelöst, ohne weitere Dinge zu tun !!! ! Warum ?? Ich weiß nicht ...

und nicht vergessen, immer das neueste Parse SDK, jetzt seine Parse-1.9.2.jar

3

My 2 Cents auf diese (hoffe, das hilft):

ich ein ähnliches Problem hatte, die ich (Erklärung Here) gelöst, so dass das Problem sein könnte, wenn nicht, haben einen Blick auf meine Dateien , bei einem schnellen Blick scheinen sie einige kleine Unterschiede von Ihnen zu haben, und sie arbeiten so ist es einen Blick wert:

Manifest Abschnitt:

<!-- for parse pushes --> 
    <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.MyStuff.stuff.utils.MyPushReceiver" 
      android:exported="false" > 
     <intent-filter> 
      <action android:name="com.parse.push.intent.RECEIVE" /> 
      <action android:name="com.parse.push.intent.OPEN" /> 
      <action android:name="com.parse.push.intent.DELETE" /> 
     </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.MyStuff.stuff" /> 
     </intent-filter> 
    </receiver> 
    <meta-data 
      android:name="com.parse.push.notification_icon" 
      android:resource="@drawable/ic_launcher" /> 

ich meine eigenen ParsePushBroadcastReceiver umgesetzt:

public class MyPushReceiver extends ParsePushBroadcastReceiver 
{ 
    @Override 
    protected void onPushOpen(Context context, Intent intent) 
    { 
    //bla bla... 
    } 

    @Override 
    protected void onPushReceive(Context context, Intent intent) 
    { 
    // bla bla... 
    } 

    @Override 
    protected Notification getNotification(Context context, Intent intent) 
    { 
     Notification notification = super.getNotification(context, intent); 
    // do some stuff with it.. 
    } 

} 

und meine Anwendungsklasse:

public class MyApplication extends Application 
{ 

    private static final String CKey = "***********"; 
    private static final String AId = "************"; 

    @Override 
    public void onCreate() 
    { 
     super.onCreate(); 
     Parse.initialize(this, AId, CKey); 

     //initialized some stuff.. 

     ParsePush.subscribeInBackground("", new SaveCallback() 
     { 
      @Override 
      public void done(ParseException e) 
      { 
       if (null == e) 
       { 
        ParseInstallation install = ParseInstallation.getCurrentInstallation(); 
        String token = install.getString("deviceToken"); 
        //do some stuff with it... 
       } 
      } 
     }); 
     ParseInstallation.getCurrentInstallation().saveInBackground(); 
     //some more stuff 
    } 

Hoffe, dass es Sie auf dem richtigen Weg stellt!

+0

Danke für Ihre Antwort Tommy. Ich habe den Code eingefügt und das Paket mit meinem Code ersetzt. Leider wurde das Problem dadurch nicht behoben. Über das Token, das Sie vom ParseInstallation-Objekt erhalten, ist es dasselbe GCM-Token, das ich mit GoogleCloudMessaging.getInstance (context) .register() erhalten würde? – AlexMok

+0

AFAIK Ja, das kommt von den Parsedokumenten: 'deviceToken: Das von Apple generierte Token für iOS-Geräte oder das Token, das von GCM verwendet wird, um die Registrierungs-ID (nur gelesen) zu verfolgen, aber ich würde mehr darüber lesen ihre Dokumente :) – TommySM

Verwandte Themen