2016-05-12 65 views
8

在解析控制檯中,它顯示傳遞報告成功,但onPushReceive根本沒有被調用。我在這裏錯過了什麼?任何幫助,將不勝感激。無法在Android中使用Parse接收推送通知

以下是我的代碼。 清單代碼:

<receiver 
     android:name="com.google.android.gms.gcm.GcmReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND"> 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <category android:name="com.appname" /> 
     </intent-filter> 
    </receiver> 

    <service android:name="com.parse.PushService" /> 

    <receiver android:name="com.appname.PushReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" 
     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" /> 

      <!--IMPORTANT: Change "com.parse.starter" to match your app's package name.--> 

      <category android:name="com.appname" /> 
     </intent-filter> 
    </receiver> 

PushReceiver類:

public class PushReceiver extends ParsePushBroadcastReceiver 
{ 

@Override 
protected void onPushReceive(Context context, Intent intent) { 
    super.onPushReceive(context, intent); 

    Log.v("Push Receive called...", ""); 


    if (intent == null) 
     return; 

    try 
    { 
     JSONObject json = new JSONObject(intent.getExtras().getString("com.parse.Data")); 



    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 



} 
+0

可能是你的google-services.json中的錯誤 – Alexander

+0

解析被關閉。你應該轉移到另一項服務。 –

+0

@DevendraSingh Ya我知道,這只是幾個月的臨時解決方案。 – Anirudh

回答

1

檢查安裝的對象與設備令牌。 (也許你應該設置senderID)

似乎不推薦使用。我現在無法從解析文檔中找到任何地方。 嘗試添加以下權限

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<permission 
     android:name="com.appname.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 
<uses-permission android:name="com.appname.permission.C2D_MESSAGE" /> 

這些都需要老版本的SDK(也許年齡大於1.10)的權限。

==============新建部分====

我發現github上推的示例代碼。 https://github.com/ParsePlatform/PushTutorial/tree/master/Android

以下是使用1.11.0 sdk(1.13.0也可以)的項目。 https://dl.dropboxusercontent.com/u/82261293/Appname.zip

根據我的經驗,有些設備有沒有設備令牌的機會。你應該檢查它已經保存。

+0

我在發佈問題前添加了這些權限。不起作用。 – Anirudh

+0

您是否有deviceToken,必須保存在數據庫中? – ChunTingLin

2

添加權限:

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/> 

檢查接收器:

<receiver android:name="com.appname.PushReceiver" android:exported="false"> 
    <intent-filter> 
     <action android:name="com.appname.INTERCEPT"/> 
    </intent-filter> 
</receiver> 
2

我這裏還有權限,你應該在你的清單:

<!-- Push Permissions --> 
    <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.GET_ACCOUNTS" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

    <permission android:protectionLevel="signature" 
     android:name="your_package_name.permission.C2D_MESSAGE" /> 
    <uses-permission android:name="your_package_name.permission.C2D_MESSAGE" /> 

我這裏還有其他的東西你應在您的清單中定義:

<service android:name="com.parse.PushService" /> 
     <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" /> 

       <category android:name="your_package_name" /> 
      </intent-filter> 
     </receiver> 

搖籃的依賴關係:

compile 'com.parse.bolts:bolts-android:1.+' 
compile 'com.parse:parse-android:1.+' 

根據該清單的配置我可以成功地從parse接收推送。

+0

錯字:staff - > stuff –

+0

謝謝@AbAppletic修復 – savepopulation

2

除了權限

有幾件事情,引起解析無法正常發送推送通知。解析在詳細描述它們方面做得並不出色,但從我對Parse的經驗來看,我可以嘗試闡明一些並不總是那麼明顯的東西。

如果您正在檢查Parse儀表板並且能夠看到您的設備註冊,那很好。 然而,您需要確保爲該設備註冊了deviceToken。如果沒有,我幾乎可以保證,如果你檢查你的推送標籤,你會發現推送成功率爲0%或不成功。

確保deviceToken正在註冊 除了簡單的初始化解析,確保您的應用程序的軟件包名稱匹配,您使用的名稱與您的Android清單鏈接。如果情況並非如此,那肯定是不接受推動的原因。

Intializing解析

private void initializeParse() { 
     Parse.enableLocalDatastore(this); 
     Parse.initialize(this); 
     ParseInstallation.getCurrentInstallation().saveInBackground(); 
     Log.d(LOG_TAG, "Initializing parse with app id: " + getString(R.string.parse_app_id) + " client_key: " + getString(R.string.parse_client_key)); 
} 

監聽推

public class ParsePluginReceiver extends ParsePushBroadcastReceiver { 
private static final String TAG = "ParsePluginReceiver"; 
private static final String RECEIVED_IN_FOREGROUND = "receivedInForeground"; 
private static int badgeCount = 0; 
public static final String FORWARD_EXTRA = "FORWARD_ACTIVITY"; 


@Override 
protected void onPushReceive(Context context, Intent intent) { 
    JSONObject pushData = getPushData(intent); 

    if (pushData != null) { 
     Log.d(TAG, "JSON Payload: " + pushData.toString()); 
     super.onPushReceive(context, intent); 
    } 
} 

protected void onPushOpen(Context context, Intent intent) { 
    JSONObject pushData = getPushData(intent); 
    Log.d(TAG, "JSON Payload: " + pushData.toString()); 

    if (pushData != null) { 
     try { 
      super.onPushOpen(context, intent); 
     } catch (Exception ex) { 

     } 
    } 
} 

爲參照,解析SDK位於:https://parse.com/docs/android/guide

旁註 解析將於明年年初開始棄用。

2

確保你擁有所有這些權限:

<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.GET_ACCOUNTS" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

    <permission android:protectionLevel="signature" 
     android:name="your_package_name.permission.C2D_MESSAGE" /> 
    <uses-permission android:name="your_package_name.permission.C2D_MESSAGE" /> 

而你需要所有這些添加到您的清單:

<service android:name="com.parse.PushService" /> 
    <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" /> 

      <category android:name="your_package_name" /> 
     </intent-filter> 
    </receiver> 

只是一些建議,轉移到別的如火力地堡。解析正在關閉。

-1

解析將完全退役。

我從解析郵件中得到郵件說他們要退休了。那麼,爲什麼你要犯的錯誤將會過期。嘗試使用更輕的gsm或插座。

相關問題