Parse.com禁用推送通知通知

时间:2014-07-21 15:26:06

标签: android push-notification parse-platform google-cloud-messaging

我想处理推送通知而不在通知栏中显示它,默认情况下Parse.com会做什么。

Parse.com 需要清单中的条目,因此我无法将其更改为我自己的BroadcastReceiver,因为它无效。

    <receiver android:name="com.parse.GcmBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND"
            android:priority="1">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

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

所以我所做的就是为同一个IntentFilter创建第二个接收器,但优先级更高。

    <receiver android:name="packagename.ParseComPushReceiver"
        android:permission="com.google.android.c2dm.permission.SEND"
        android:priority="2">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="packagename" />
        </intent-filter>
    </receiver>

我尝试中止广播

@Override
public void onReceive(final Context context, final Intent intent) {
    abortBroadcast();
    // handle here
}

但不幸的是,我仍然看到&#34;收到通知&#34;通知栏中的通知。

2 个答案:

答案 0 :(得分:4)

您实际上可以使用自己的自定义广播接收器和Parse。它已在推送指南here中记录。

具体来说,替换:

    <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.example.MyCustomReceiver"
        android:exported="false">
        <intent-filter>
            <action android:name="com.example.UPDATE_STATUS" />
            <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>

并实施自己的接收器:

public class MyCustomReceiver extends ParsePushBroadcastReceiver {
private static final String TAG = "MyCustomReceiver";

  @Override
  public void onReceive(Context context, Intent intent) {
    try {
      String action = intent.getAction();
      String channel = intent.getExtras().getString("com.parse.Channel");
      JSONObject json = new JSONObject(intent.getExtras().getString("com.parse.Data"));

      // Custom behavior goes here

    } catch (JSONException e) {
      Log.d(TAG, "JSONException: " + e.getMessage());
    }
  }
}

答案 1 :(得分:2)

我无法弄清楚如何让这种方法适用于从Web控制台发送而不是从设备构建的推送,因此默认的&#34;通知收到&#34;消息仍然存在。

对我有用的是添加android:exported =&#34; false&#34;到这样的parse.com条目:

    <receiver
        android:name="com.parse.GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND"
        android:exported="false">
        <intent-filter>
            <action android:name="com.example.DISABLE_PARSE_PUSH" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="com.example" />
        </intent-filter>
    </receiver>
    <service android:name="com.parse.PushService" />

这会禁用默认通知。