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

使用appEngine实现谷歌云消息

龙玺
2023-03-14

我正在尝试使用appengine实现GCM。我创建并部署了默认的appengine后端GCM模板。我创建一个GCM注册id:

GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
String regId = gcm.register(SENDER_ID);  //sender_id is my project number

然后,我使用模板中的默认注册endpoint将这个regID存储在appengine上。我的广播接收器如下所示:

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        Log.i("Ayush", "Received");

        // Explicitly specify that GcmIntentService will handle the intent.
        ComponentName comp = new ComponentName(context.getPackageName(),
                GcmIntentService.class.getName());
        // Start the service, keeping the device awake while it is launching.
        startWakefulService(context, (intent.setComponent(comp)));
        setResultCode(Activity.RESULT_OK);
    }
}

这是我的舱单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="reach.project" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <receiver
            android:name=".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" />
                <action android:name="com.google.android.c2dm.intent.GCM_RECEIVED_ACTION" />
                <category android:name="reach.project" />
            </intent-filter>
        </receiver>
        <service android:name=".GcmIntentService" />

        <activity
            android:name=".MyActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <permission
        android:name="reach.project.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" />

</manifest>

BroadCastReceiver和intent服务在我的项目中是独立的类。appengine后端GCM是一个单独的模块。创建此模块期间:

编译项目(路径:':app2',配置:'androidendpoint')

该行已自动附加到生成。主模块的渐变。

包com。实例我的模块。app2是指向我的MessaginEndpoint的路径。

当我注册设备时,我的广播接收器被激活,但当我尝试从appspot发送消息时。com网站,或从api浏览器,它没有收到任何东西。我可以确认消息正在被发送,如后端的日志所示。请帮忙。

我遵循本教程:https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/GcmEndpoints

共有1个答案

端木夕
2023-03-14

根据清单,您的应用程序包名为reach。项目

所以你应该改变

<uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" />

<uses-permission android:name="reach.project.permission.C2D_MESSAGE" />
 类似资料:
  • 上面写着“Google Cloud Messaging(GCM)是一个免费服务”,但是为了使它能够运行,我需要在Google Cloud平台中创建一个项目,这需要花钱…那怎么免费呢?还是我错过了什么?

  • 我尝试过将deendpoint与云SQL和Hibernate集成。但是,每次都有错误。跟随我的测试: 1 -源文件夹中的persistence . XML:http://imgur.com/hKjf8Cs给我错误:http://imgur.com/QJe8rvq 2-资源文件夹中的persistence.xml给我错误: ServletInitializationParameters.java:5

  • 更新:已弃用GCM,请使用FCM 如何将新的Google云消息集成到PHP后端?

  • 介绍如何在谷歌云平台获取在云联壹云平台需要使用的配置参数。 如何获取谷歌云服务帐号密钥信息? 纳管指定项目 打开“GCP Console中的IAM和管理-IAM页面”页面并登录。 单击顶部“选择项目”,选择需要授权的项目。 在左侧导航栏中选择“服务账号”,进入指定项目的服务账号页面。 单击 “创建服务账号” 按钮,进入创建服务账号页面。 配置服务账号名称、服务账号ID、服务账号说明等,单击 “创建

  • 我正在尝试,为了实施新的GCM,我遵循Google get声明:http://developer.android.com/guide/google/gcm/gs.html 我被困在获取我的设备注册ID! 我的应用程序一直试图与谷歌服务器连接,这里我的错误日志: 这是我的活动代码,询问身份证: 这是我的服务代码 这是我的Android清单: 我遵循谷歌的指示,但我坚持这个服务不可用的错误, 我做错了

  • 我使用新的GCM API来注册。方法的留档明确指出: 为GCM注册应用程序并返回注册ID。安装应用程序后,必须调用此函数一次,然后将返回的注册ID发送到服务器。 重复调用此方法将返回原始注册ID。 然而,在阅读本文时(http://developer.android.com/google/gcm/adv.html#reg-州),它指出有两种情况需要特殊处理: 另外还有两种情况需要特别注意: 应用程