2

サーバーがプッシュ通知を開始したときに完全に機能する次のレシーバーがあります。ADB を使用してローカルでテストできるようにしたいと考えています。これは私が使用しているコマンドです:

adb shell am broadcast -a com.parse.push.intent.RECEIVE --es com.parse.Data "Ipsum Lorem" -n com.jon.ticktock/.CustomParseGCMReceiver

マニフェストで受信者を定義する方法は次のとおりです。

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

ただし、コマンドはこのレシーバーをトリガーしていないようです。

4

3 に答える 3

1

「exported」「false」のReceiver属性の場合、直接呼び出すことはできません。

アンドロイド:エクスポートされた="false"

ただし、「true」の場合、Parse SDK「SecurityException」の初期化でクラッシュしてしまいます。

パース.java

public static void initialize(Context context, String applicationId, String clientKey) {
    ...
    if (!allParsePushIntentReceiversInternal()) {
    throw new SecurityException("To prevent external tampering to your app's notifications, " +
          "all receivers registered to handle the following actions must have " +
          "their exported attributes set to false: com.parse.push.intent.RECEIVE, "+
          "com.parse.push.intent.OPEN, com.parse.push.intent.DELETE");
    }
    ...
}

allParsePushIntentReceiversInternal

private static boolean allParsePushIntentReceiversInternal() {
    List<ResolveInfo> intentReceivers = ManifestInfo.getIntentReceivers(
        ParsePushBroadcastReceiver.ACTION_PUSH_RECEIVE,
        ParsePushBroadcastReceiver.ACTION_PUSH_DELETE,
        ParsePushBroadcastReceiver.ACTION_PUSH_OPEN);

    for (ResolveInfo resolveInfo : intentReceivers) {
        if (resolveInfo.activityInfo.exported) {
            return false;
        }
    }
    return true;
}

本当に送信したい場合は、Parse SDK の初期化を行わずにビルドする必要があります。ADB でブロードキャストを送信できます。

//Parse.initialize(this, "PARSE APPLICATION ID", "PARSE API KEY");

「onReceive」を呼び出すことができます。

于 2015-10-23T13:18:31.410 に答える
1

ブロードキャストを段階的に受信できるかどうかをテストできます。

  1. 生放送

adb shell am broadcast -a com.parse.push.intent.RECEIVE

  1. おまけ付き

adb shell am broadcast -a com.parse.push.intent.RECEIVE --es com.parse.Data "Ipsum Lorem"

  1. 与えられたコンポーネントで

adb shell am broadcast -a com.parse.push.intent.RECEIVE --es com.parse.Data "Ipsum Lorem" -n com.jon.ticktock/.CustomParseGCMReceiver

どの部分がエラーなのかを確認します。

于 2015-09-15T14:45:48.847 に答える
0

android:exported="false"マニフェストで削除します。

エクスポートされていないコンポーネントは、ルート シェルでない限り、シェル経由でアクセスできないためです。 http://developer.android.com/guide/topics/manifest/receiver-element.html#exported

于 2015-12-04T01:15:36.760 に答える