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

从GCM通知获取数据

芮明知
2023-03-14

有没有办法从"GCM通知"获取数据。这是我用gcm发送的json字符串的一部分:{"data":{"id":"123"}}。我需要在我的应用程序中获取id的值,但我不知道如何...非常感谢。

共有3个答案

谷梁弘深
2023-03-14
<receiver android:name=".beforelogin.GcmBroadcastReceiver"
          android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="android.intent.category.TAB" />
    </intent-filter>
</receiver>
<service android:name=".beforelogin.GcmIntentService" />
<meta-data android:name="com.google.android.gms.version"
           android:value="@integer/google_play_services_version" />
姚麒
2023-03-14

将其作为json表示的最佳方法是将数据添加为json对象。

{
    "registration_ids" : [
        "id1",
        "id2"
    ],
    "data" : {
        "my_json_object": {
            "text" :"This is my message",
            "title":"Some title"
        }
    },
    "collapse_key":"12345"
}

然后,要解析对象,只需执行以下操作:

String json = getIntent().getExtras().getString("my_json_object");
JsonObject jObject = new JsonObject(json);
龚俭
2023-03-14

如果您正在使用新的GCM库,则需要创建一个扩展IntentService的类,GCM库将在收到GCM消息时通知您。请看一下MyIntentService。java示例:

@Override
public final void onHandleIntent(Intent intent) {
    try {
        String action = intent.getAction();
        if (action.equals("com.google.android.c2dm.intent.REGISTRATION")) {
            handleRegistration(intent);
        } else if (action.equals("com.google.android.c2dm.intent.RECEIVE")) {
            handleMessage(intent);
        }
    } finally {
        synchronized(LOCK) {
            sWakeLock.release();
        }
    }
}

private void handleMessage(Intent intent) {
    String id = intent.getExtra("id");
}

如果您没有使用GCM库,那么GCM响应将在接收器中以意图的形式向您发送,那么您可以使用意图的getExtras(). getString()从GCM通知中检索密钥/值对。例如:

// intent come in in your onReceive method of your BroadcastReceiver:
public onReceive(Context context, Intent intent) {
   // check to see if it is a message
   if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {
      String id = intent.getExtras().getString("id");
      String other_key = intent.getExtras().getString("other_key");

      // if your key/value is a JSON string, just extract it and parse it using JSONObject
      String json_info = intent.getExtras().getString("json_info");
      JSONObject jsonObj = new JSONObject(json_info);          
   }
}
 类似资料:
  • 我今天正在测试如何使用gcm。它工作正常,但我得到双重通知。 我所说的双重通知是指在通知发出几分钟后,第二个通知的内容与第一个完全相同。 我正在使用GCM和PHP(Google Cloud Messaging)测试通知 我不知道我哪里出错了…我正在使用模拟器和真实设备进行测试。这是logcat调试。

  • 我正在开发一个与硬件设备连接的BLE(蓝牙LE)应用程序。我能够发现并连接到设备,从设备读取数据,将数据写入设备。 我在苹果的BLE文档中找不到的是,当你靠近一台设备时,当应用程序关闭时,如何获得通知。 我知道如何注册到特征通知,但此通知仅在应用程序位于后台时发生。 我知道可以在应用程序关闭时检测蓝牙,并发送通知,但我想在设备发现具有的特定BLE时收到通知。 iBeacon正在将BLE与UUID、

  • 有没有办法限制Firebase推送通知注册?不寻找主题。假设我有一个登录函数。我希望登录用户订阅推送通知。然后令牌可以被发送到服务器并存储。 在用户注销的同时,还应注销用户。 那么,目前是否有可用的机制?我查阅了Firebase API文档,但没有找到任何相关内容。 只是想知道我是否错过了什么。

  • 我正在开发一个应用程序,它使用GCM进行推送通知。 我的问题是关于如何从用户单击通知时打开/启动应用程序。我有两种潜在的情况: A)应用程序已打开,并且驻留在前台或后台,无论哪种方式,我的GCM工作正常,GCM消息到达用户点击通知并意图启动相关活动(通过通知等待意图传递)。 b)应用程序关闭,收到通知,用户再次点击通知,并试图开始相关活动,这是它变得混乱的地方。该应用程序有一个后端,所以现在需要自

  • 请求header GET /v1/notify Authorization:Bearer {ACCESS TOKEN} Content-Type:application/json 注:请将上方的{ACCESS TOKEN}替换为您的ACCESS TOKEN 返回 { "result": "success", "url": "http://www.foo.com/" }

  • 当我收到firebase的通知时,我需要显示自定义对话框。但我不知道如何从通知负载中获取数据 我已经尝试了下面的代码,但它是机器人为我工作 这是我在控制台的有效载荷 flatter:notification message{gcm.message_id:1578573749312232,id:30,google.c.a.e:1,type:test,aps:{alert:{title:notific