2015-04-14 41 views
1

我知道這個問題已經被問了很多次收到推送通知,但我仍然無法擺脫parse.comAndroid的工作室:應用程序不會從parse.com

推送通知被成功發送推送通知從parse.com,但我的應用程序不會收到它們。

大多數人使用它解決了他們的問題:I can't receive push notifications in app from Parse BT不適合我。我也試過Android - Can not Receive Push from Parse.com

有人建議更改軟件包名稱,我這樣做,甚至提出了一個新的應用程序,但沒有幫助。

注意:我有進口解析-1.9.1.jar和螺栓,Android的1.2.0.jar

這裏是我的MainActivity

package com.example.user.parsetest; 

import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import com.parse.Parse; 
public class MainActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Parse.initialize(this, "********", "********"); 

} 
} 

我嘗試添加自定義PushReceiver的建議在許多答案

package com.example.user.parsetest; 

import android.app.Activity; 
import android.app.Notification; 
import android.content.Context; 
import android.content.Intent; 
import com.parse.ParsePushBroadcastReceiver; 

public class Receiver extends ParsePushBroadcastReceiver { 

@Override 
protected Notification getNotification(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    return super.getNotification(context, intent); 
} 

@Override 
public void onPushOpen(Context context, Intent intent) { 
    Intent i = new Intent(context, MainActivity.class); 
    i.putExtras(intent.getExtras()); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(i); 
} 
@Override 
protected void onPushReceive(Context context, Intent intent) { 
    //here You can handle push before appearing into status e.g if you want to stop it. 
    super.onPushReceive(context, intent); 

} 
} 

而且AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     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.example.user.parsetest.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" /> 

      <!-- 
       IMPORTANT: Change "com.parse.starter" to match your app's package name. 
      --> 
      <category android:name="com.example.user.parsetest" /> 
     </intent-filter> 
    </receiver> 
    <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" /> 
    <meta-data android:name="com.parse.push.notification_icon" 
     android:resource="@drawable/ic_launcher"/> 

    <!-- 
     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.example.user.parsetest.permission.C2D_MESSAGE" /> 
    <uses-permission android:name="com.example.user.parsetest.permission.C2D_MESSAGE" /> 
</application> 

無法找出問題。 pleaseeee幫助。

+0

您是否收到任何錯誤? –

+0

首先檢查Parse控制檯是否正確發送通知。 其次刪除默認接收器的條目從清單ie即接收器android:name =「com.parse.ParseBroadcastReceiver」> ...... – Napolean

+0

只是一個瘋狂的猜測..但嘗試使用Parse-1.8.2 jar和螺栓,Android的1.1.4.jar?這個組合(以前的版本)似乎在爲我工作 – droidx

回答

0

在您的Application類中緊跟在Parse.initialize(appkey,clientkey)的行後面;只需添加以下行,它應該工作。

// Current installation object 
ParseInstallation parseInstallation = ParseInstallation.getCurrentInstallation(); 

// Save the updated installation object 
parseInstallation.saveInBackground(new SaveCallback() { 
    @Override 
    public void done(ParseException e) { 
     MyLog.e(MainApplication.class.getSimpleName(), "Installation object saved "+((e!=null)?"failed":"successfully")); 
    } 
}); 
+0

尚派一樣..推..沒有收到:( –

+0

我沒有加入這個項目,前幾天。能您嘗試運行此示例項目https://github.com/Keshava11/parsecheck然後在ParseCheckApplication類中替換您的密鑰。 – Napolean

+0

@ Napolean..parecheck項目不會在eclipse.ie中運行,它會在啓動之後崩潰並在Android工作室,有一種找不到插件com.android.application –

0

嘗試下載這個項目:https://www.dropbox.com/s/fpp22fi2o7c8vai/PushParse.zip?dl=0

它包含了1.4.3的lib jar文件。它已經過時了,但它正在工作。

我做了一些調整,設法將它更新到最新的庫(1.9.2)。

注意出現在logcat中的錯誤。我得到了這個:error setting up push notification using parse.com and android studio

如果通過確保我的Android清單非常乾淨和有條理來修復。按照結構。

這裏是我的更新解析庫代碼:

public class ParsePushNotification extends Application { 

    public ParsePushNotification() { 
    } 


    public void onCreate(){ 
     super.onCreate(); 

     Log.d("!!!", "This was called. Parse"); 
     Parse.initialize(this, "paste your app id here", "paste your client id her"); 
//  PushService.setDefaultPushCallback(this, LoginActivity.class); 
//  ParseInstallation.getCurrentInstallation().saveInBackground(); 
     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); 
       } 
      } 
     }); 
    } 
} 

該類應該用在這裏您的清單:

<application 
     android:name="com.example.app.ParsePushNotification" 

這裏是我的接收機類:

public class Receiver extends ParsePushBroadcastReceiver { 
    @Override 
    public void onPushOpen(Context context, Intent intent) { 
     Intent i = new Intent(context, LoginActivity.class); 
     i.putExtras(intent.getExtras()); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 
    } 
} 

這裏的我的清單:

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

<application 
     android:name="com.example.app.ParsePushNotification" 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.NoTitle"> 

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

    <activity 
     android:name=".LoginActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" > 
     <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.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.example.app" /> 
     </intent-filter> 
    </receiver> 
    <receiver android:name="com.example.app.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> 
</application> 

祝你好運!

+0

怎麼樣?你是否在onPushOpen()上工作?當我通過控制檯發送推送時,我無法看到通知到筆。 – portfoliobuilder

+0

你是什麼意思「通過控制檯」?請嘗試下載示例項目以測試您的推送通知。 –

+0

也許當您註冊您的應用程序時,它會將對象ID保存在安裝類中。然後你刪除它,但你沒有卸載應用程序?因爲它發生在我身上幾次我的應用程序無法接收推送,因爲它不再註冊。 嘗試卸載應用程序,然後重新安裝它,看看是否在Parse Core的安裝類中創建一個新行。 –

相關問題