当前位置: 首页 > 知识库问答 >
问题:

Android亚马逊 SNS 问题 (GCM)

戴凯歌
2023-03-14

我的Android应用程序中有一个与亚马逊SNS服务相关的问题。我正在使用亚马逊SNS推送服务。请查看此链接http://docs.aws.amazon.com/sns/latest/dg/SNSMobilePush.html有关亚马逊SNS服务的更多详细信息,请参阅。

我像在Amazon samples http://docs . AWS . Amazon . com/SNS/latest/DG/mobile-push-GCM . html中一样实现了它,它在一段时间内对我来说工作得很好。

但最近,一些使用Android 4.0.3或4.0.4的用户向我报告了一份报告,称推送服务不正确。我开始调查这个问题,并发现了一个奇怪的行为:有时我的推送接收器使用消息“unregistered=my.package.name”而不是我推送的真实消息进行推送。

以下是我的AndroidManifest.xml代码:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="my.package"
    android:versionCode="14"
    android:versionName="1.49" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="18" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="com.google.android.c2dm.permission.REGISTER" />

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

    <application
        android:name="com.test.package.AppClass"
        android:allowBackup="true"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Black.NoTitleBar" >
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <receiver
            android:name="com.test.package.ExternalReceiver"
            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" />
                <action android:name="com.google.android.c2dm.intent.REGISTER" />

                <category android:name="com.test.package" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

这是我的外部接收器:

    public class ExternalReceiver extends BroadcastReceiver {
    private static final String ACTION_REGISTRATION =  "com.google.android.c2dm.intent.REGISTRATION";
    private static final String ACTION_RECEIVE = "com.google.android.c2dm.intent.RECEIVE";
    private static final String UNREGISTERED = "unregistered";

    public void onReceive(Context context, Intent intent) {
        if (intent != null) {
            Bundle extras = intent.getExtras();

            String message = "";
            String action = intent.getAction();

            if (extras != null) {
                for (String key : extras.keySet()) {
                    message += key + "=" + extras.getString(key) + "\n";
                }
            }

            if (action.equalsIgnoreCase(ACTION_REGISTRATION)) {
                Log.i(TAG, message);
            } else if (action.equalsIgnoreCase(ACTION_RECEIVE)) {
                String pushText = intent.getStringExtra("default");
                processPush(pushText, context);
            }
        }
    }
}

这是一个LogCat消息,当我推送到已经注册的设备时,我有一些消息:

12-20 13:32:33.683: I/Test ExtrernalReceiver(5353): registration_id=APA91bFQymRS8NOPgHDlFicpQIXDwvgWQR6_CVYC1Le-Cmhl8uTzPDPVbe1yjjKdQjMsilo4XGImAiX8ORnkZiySjbwgTmzC7lC8T3Plch1m0faKiiqc6hl75msTBmMIBhtLtKdtz_R6CY1yjygvyWplTh_yq04tCaOKCfcDcsYwYbQdmscyfUA
12-20 13:32:49.693: I/Test ExtrernalReceiver(5353): registration_id=APA91bFQymRS8NOPgHDlFicpQIXDwvgWQR6_CVYC1Le-Cmhl8uTzPDPVbe1yjjKdQjMsilo4XGImAiX8ORnkZiySjbwgTmzC7lC8T3Plch1m0faKiiqc6hl75msTBmMIBhtLtKdtz_R6CY1yjygvyWplTh_yq04tCaOKCfcDcsYwYbQdmscyfUA
12-20 13:33:19.763: I/Test ExtrernalReceiver(5353): unregistered=my.package

共有1个答案

阎德业
2023-03-14

如果您的清单显示您的接收者条目有点偏离。此处的意向过滤器类别标签需要与您的应用程序包匹配(请参阅第2行<code>package=“my.package”)。其中一个包名是错误的。

    <receiver
        android:name="com.test.package.ExternalReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <action android:name="com.google.android.c2dm.intent.REGISTER" />
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="my.package" />
        </intent-filter>
    </receiver>

如果实际包是“com.test.package”,则更改两个引用

<category android:name="com.test.package" />

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.test.package"

我建议在这里将更新的Google Play服务示例与支持库一起使用(它使用支持库WakefulBroadcast收件人,不再需要为以下操作设置广播接收器:

            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <action android:name="com.google.android.c2dm.intent.REGISTER" />

…因为您可以通过以下方式向GCM注册您的申请:

                GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
                String regId = gcm.register(senderId);
 类似资料:
  • 我们正在开发一个系统,我们需要向数千部手机发送推送通知。我们使用Amazon SNS进行了设置。我们将向每部手机发送单独的消息,因此我们直接发送到SNSendpointARN,而不是主题ARN。 我们目前正在想这个系统的性能。我在网上找不到任何关于可以向SNS发送多少消息的内容。例如,如果我需要向25000个SNSendpoint发送25000条消息,我可以以多快的速度发送它们?秒、分钟、小时?

  • 我对amazon sns有奇怪的问题。我正在使用amazon aws的nodejs sdk向android设备发送推送通知。问题是当我将消息发送到亚马逊服务器时,它会返回一个MessageID,但消息没有传递。 这是亚马逊发布的代码: 如果我使用亚马逊控制台发布通知工作完美。此外,如果我从gcmMessage中删除JSON.stringify,它正在发送push通知,但没有gcm数据。

  • 亚马逊云 图 1.20.2.1 - AWS AWS,即 Amazon Web Services,是亚马逊(Amazon)公司的 IaaS 和 PaaS 平台服务。AWS 提供了一整套基础设施和应用程序服务,使用户几乎能够在云中运行一切应用程序:从企业应用程序和大数据项目,到社交游戏和移动应用程序。AWS 面向用户提供包括弹性计算、存储、数据库、应用程序在内的一整套云计算服务,能够帮助企业降低 IT

  • 我使用的是Hazelcast v3。6在两台amazon AWS虚拟机上(不使用hazelcast的AWS特定设置)。连接应该通过TCP/IP连接设置(而不是多播)工作。我已在虚拟机上打开5701-5801地址进行连接 我曾尝试在两台虚拟机上使用iperf,通过这两台虚拟机,我可以看到一台虚拟机上的客户机连接到另一台虚拟机上的服务器(当我切换iperf的客户机-服务器设置时,反之亦然)。 当我在不

  • 我正在尝试使用亚马逊AWS向我的手机发送短信。特别是,我正在使用SNS服务,在创建新订阅的过程中陷入了困境。 抱歉,我的屏幕截图在下拉菜单中无法工作,所以我用手机拍了一张贫民区的照片。 有什么想法吗?

  • 我正在使用亚马逊 SNS 和亚马逊认知服务在 iOS 应用程序中实施推送通知。Cognito成功保存了代币,我的应用程序收到通知,一切正常,但有一件事。 现在,当仍在开发中时,我需要手动将endpoint添加到SNS主题,以便所有订阅者都可以获得通知。当我向App Store推送更新时,将会有数千个令牌需要添加。 我正在研究Amazon AWS留档,但不知道是否有可能在没有额外努力的情况下实现它。