google-cloud-messaging 相关问题

Google Cloud Messaging是一项服务,可以将数据远程发送到Android和iOS应用程序以及Chrome扩展程序和打包应用程序。

Android - 使用收件人的 IMEI 号码向手机发送短信?

我正在开发一个Android应用程序,通过它用户可以锁定手机,或者使用来自另一部手机的短信(当然附有密码)将手机恢复出厂设置,以防手机被盗。 ...

回答 2 投票 0

GCM 在 Android 4.1 设备上无法工作(引发错误)

我正在实现GCM,理论上它有一个合理的要求,Android 2.3:https://developers.google.com/cloud-messaging/android/client 问题是它可以在我的 Android 5.1 中运行

回答 1 投票 0

无法找到用户使用 Azure 通知中心版本 Google (FCM v1) 进行测试通知

由于 Google 迁移了 FCM,我一直在阅读有关 Fcm V1 的内容。 我的应用程序已经在 Android 和 Apple 平台上拥有了多个用户。 我使用 Azure 来集中管理...

回答 1 投票 0

Amazon SNS:重新输入之前有效的 GCM API 密钥时出现“平台凭证无效”

自今年 4 月以来,我们一直在使用 Amazon SNS 发送 Android 推送通知。 推送已发送,没有问题,但从未有任何对云消息 AP 的呼叫记录...

回答 5 投票 0

获取令牌失败,消息:FIS_AUTH_ERROR

我正在使用 Expo 构建 2 个 Android 应用程序,并使用 1 个 Firebase 项目。 对于通知,我正在使用博览会通知。 我已将 Firebase 服务器密钥上传到 Expo expo Push:android:upload --api-key XXX...

回答 1 投票 0

使用 django 和 GCM 推送通知

我有一个android客户端应用程序,我的服务器在django中。 我想在服务器中实现推送通知,以便在与特定用户相关的数据发生变化时通知他们,因为

回答 4 投票 0

使用 php 的 Firebase 推送通知出现问题

我想使用 PHP 发送推送通知,但收到此错误。 { “错误”: { “代码”:401, "message": "请求的身份验证凭据无效。例如...

回答 1 投票 0

iOS 中的 Google Cloud Pub/Sub 集成

我正在寻找一种标准方法将我的 iOS 应用程序与 Google 云 Pub/Sub 集成。经过两天的时间在互联网上的研究,我没有找到任何直接的实现方法。只是

回答 1 投票 0

SecurityException:不允许启动服务Intent { act=com.google.android.c2dm.intent.REGISTER pkg=com.google.android.gms (有额外功能)}

我尝试从 Google 获取我的 GCM 注册 ID。 我的代码: 字符串SENDER_ID =“722*****53”; /** * 向 GCM 服务器异步注册应用程序。 * * 存储注册信息... 我尝试从 Google 获取我的 GCM 注册 ID。 我的代码: String SENDER_ID = "722******53"; /** * Registers the application with GCM servers asynchronously. * <p> * Stores the registration ID and the app versionCode in the application's * shared preferences. */ private void registerInBackground() { new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { String msg = ""; try { if (gcm == null) { gcm = GoogleCloudMessaging.getInstance(context); } regid = gcm.register(SENDER_ID); msg = "Device registered, registration ID=" + regid; // You should send the registration ID to your server over // HTTP, so it // can use GCM/HTTP or CCS to send messages to your app. sendRegistrationIdToBackend(); // For this demo: we don't need to send it because the // device will send // upstream messages to a server that echo back the message // using the // 'from' address in the message. // Persist the regID - no need to register again. storeRegistrationId(context, regid); } catch (IOException ex) { msg = "Error :" + ex.getMessage(); // If there is an error, don't just keep trying to register. // Require the user to click a button again, or perform // exponential back-off. } return msg; } @Override protected void onPostExecute(String msg) { mDisplay.append(msg + "\n"); } }.execute(null, null, null); } 我收到错误: 03-01 19:15:36.261: E/AndroidRuntime(3467): FATAL EXCEPTION: AsyncTask #1 03-01 19:15:36.261: E/AndroidRuntime(3467): java.lang.RuntimeException: An error occured while executing doInBackground() 03-01 19:15:36.261: E/AndroidRuntime(3467): at android.os.AsyncTask$3.done(AsyncTask.java:299) 03-01 19:15:36.261: E/AndroidRuntime(3467): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 03-01 19:15:36.261: E/AndroidRuntime(3467): at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 03-01 19:15:36.261: E/AndroidRuntime(3467): at java.util.concurrent.FutureTask.run(FutureTask.java:239) 03-01 19:15:36.261: E/AndroidRuntime(3467): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 03-01 19:15:36.261: E/AndroidRuntime(3467): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 03-01 19:15:36.261: E/AndroidRuntime(3467): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 03-01 19:15:36.261: E/AndroidRuntime(3467): at java.lang.Thread.run(Thread.java:841) 03-01 19:15:36.261: E/AndroidRuntime(3467): Caused by: java.lang.SecurityException: Not allowed to start service Intent { act=com.google.android.c2dm.intent.REGISTER pkg=com.google.android.gms (has extras) } without permission com.google.android.c2dm.permission.RECEIVE 03-01 19:15:36.261: E/AndroidRuntime(3467): at android.app.ContextImpl.startServiceAsUser(ContextImpl.java:1800) 03-01 19:15:36.261: E/AndroidRuntime(3467): at android.app.ContextImpl.startService(ContextImpl.java:1772) 03-01 19:15:36.261: E/AndroidRuntime(3467): at android.content.ContextWrapper.startService(ContextWrapper.java:480) 03-01 19:15:36.261: E/AndroidRuntime(3467): at com.google.android.gms.gcm.GoogleCloudMessaging.b(Unknown Source) 03-01 19:15:36.261: E/AndroidRuntime(3467): at com.google.android.gms.gcm.GoogleCloudMessaging.register(Unknown Source) 03-01 19:15:36.261: E/AndroidRuntime(3467): at com.example.gcm.DemoActivity$1.doInBackground(DemoActivity.java:177) 03-01 19:15:36.261: E/AndroidRuntime(3467): at com.example.gcm.DemoActivity$1.doInBackground(DemoActivity.java:1) 03-01 19:15:36.261: E/AndroidRuntime(3467): at android.os.AsyncTask$2.call(AsyncTask.java:287) 03-01 19:15:36.261: E/AndroidRuntime(3467): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 03-01 19:15:36.261: E/AndroidRuntime(3467): ... 4 more 这是我的清单: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.manyexampleapp" android:installLocation="preferExternal" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="11" 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.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="com.example.manyexampleapp.c2dm.permission.RECEIVE" /> <uses-permission android:name="com.example.manyexampleapp.gcm.permission.C2D_MESSAGE" /> <permission android:name="com.example.manyexampleapp.gcm.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <application android:name="com.zoomer.ifs.BaseApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <activity android:name="com.zoomer.ifs.MainActivity" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden|screenSize" android:launchMode="singleTop"> <!-- <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> --> </activity> <!-- PUSH --> <!-- WakefulBroadcastReceiver that will receive intents from GCM services and hand them to the custom IntentService. The com.google.android.c2dm.permission.SEND permission is necessary so only GCM services can send data messages for the app. --> <receiver android:name="com.example.gcm.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <!-- Receives the actual messages. --> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.example.manyexampleapp" /> </intent-filter> </receiver> <service android:name="com.example.gcm.GcmIntentService" /> <activity android:name="com.example.gcm.DemoActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- DB --> <activity android:name="com.example.db.DbActivity" android:label="@string/app_name" > <intent-filter> </intent-filter> </activity> <activity android:name="com.example.http.RestGetActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" > </activity> <activity android:name="com.example.fb.FacebookLoginActivity" android:label="@string/app_name" > <!-- <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> --> </activity> <activity android:name="com.example.http.SendFeedbackActivity" android:label="@string/app_name" > <!-- <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> --> </activity> <activity android:name="com.zoomer.general.SearchNearbyOffersActivity" android:label="@string/app_name" > <intent-filter> </intent-filter> </activity> <activity android:name="com.facebook.LoginActivity" android:label="@string/app_name" > <intent-filter> </intent-filter> </activity> <activity android:name="com.example.manyexampleapp.StoresListActivity" > <intent-filter> </intent-filter> </activity> <activity android:name="com.example.fb.ShareActivity" > <intent-filter> </intent-filter> </activity> <activity android:name="com.example.notifications.NotificationsActivity" > <intent-filter> </intent-filter> </activity> <activity android:name="com.example.fb2.no_use.MainActivity" > <intent-filter> </intent-filter> </activity> <activity android:name="com.zoomer.offers.OffersListActivity" > <!-- <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> --> </activity> <activity android:name="com.example.http.SearchNearbyOffersActivity" > <!-- <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> --> </activity> <service android:name="com.example.geo.LocationService" android:enabled="true" /> <receiver android:name="com.example.manyexampleapp.BootReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="com.example.manyexampleapp.LocationService.LOCATION_BROAD_MSG" /> </intent-filter> </receiver> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id" /> </application> </manifest> 改变 <uses-permission android:name="com.example.manyexampleapp.c2dm.permission.RECEIVE" /> 到 <!-- This app has permission to register and receive data message. --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 您收到异常是因为您尚未定义所需的权限 如果应用程序开发后安装了播放服务, 可能会发生 com.google.android.c2dm.permission.RECEIVE 权限已被授予但 android 仍在抱怨同样的错误。 在这种情况下,您必须完全重新安装开发的应用程序才能使此权限发挥作用。 我认为你必须检查 Kotlin 版本兼容性。

回答 3 投票 0

在哪里可以找到 Firebase 云消息传递的 API 密钥?

我正在尝试弄清楚新版本的 GCM 或 Firebase Cloud Messaging 是如何工作的,因此我将我的一个项目移至新的 Firebase 控制台,如果我没有 API KEY 或者我想创建一个...

回答 13 投票 0

开启/关闭推送通知的实现方法

我已经在我的 Flutter 应用程序中使用 FCM 实现了推送通知。 接下来,我想让用户根据自己的内容来控制接收推送通知的ON/OFF状态(类似于接收

回答 1 投票 0

是否可以设置 Kafka 在主题中接收带有上传到 Google Storage 的文件名称的消息?

连接器只允许我读取 json、avro、字节和字符串格式。但是,如果 pdf 文件到达,则需要由通过与 clou 关联的图像执行的脚本进行处理...

回答 1 投票 0

PHP 使用 Phpseclib 加密 AES-256-GCM 并使用 crypto.subtle 使用 Javascript 解密

为了实现我所写的主题,我有这个php代码: 为了实现我所写的主题,我有这个 php 代码: <?php require 'vendor/autoload.php'; use phpseclib3\Crypt\AES; // Per l'encryptMessage use phpseclib3\Crypt\Random; // Per la generateSharedKey function generateSharedKey() { return base64_encode(Random::string(16)); } function encryptMessage($messaggio_da_criptare, $chiave) { $aes = new AES('gcm'); $aes->setKey($chiave); $iv=base64_encode(openssl_random_pseudo_bytes(12)); $aes->setNonce($iv); $testo_cifrato = $aes->encrypt($messaggio_da_criptare); $tag = $aes->getTag(); $dati_criptati = ['messaggio_criptato_con_tag' => base64_encode($testo_cifrato.$tag),'iv' => $iv]; return $dati_criptati; } $messaggio = "Hello, this is a secret message!"; echo "Messaggio di esempio da criptare: ".$messaggio."<br>"; $chiave = generateSharedKey(); echo "Chiave segreta: ".$chiave."<br>"; $dati_criptati = encryptMessage($messaggio, $chiave); echo "Messaggio criptato con tag incluso: ".$dati_criptati["messaggio_criptato_con_tag"]."<br>"; echo "IV: ".$dati_criptati["iv"]."<br>"; ?> 还有这个html代码 <!DOCTYPE html> <html> <script> var phpkey = "TWw4QCkeZEnXoCDkI1GEHQ=="; var phpiv = "CRKTyQoWdWB2n56f"; var phpmessageencrypted = "7K+HAB7Ch9V4jJ1XJPM0sANXA2ocJok="; (async () => { function _base64ToArrayBuffer(base64) { var binary_string = atob(base64); var len = binary_string.length; var bytes = new Uint8Array(len); for (var i = 0; i < len; i++) { bytes[i] = binary_string.charCodeAt(i); } return bytes.buffer; } async function _importKeyAes(key) { return await window.crypto.subtle.importKey("raw",key,{ name: "AES-GCM" },false,["encrypt", "decrypt"]); } async function decryptMessageSymetric(key, data, iv) { var keyArrayBuffer = _base64ToArrayBuffer(key); var keyt = await _importKeyAes(keyArrayBuffer); var ivt = new TextEncoder().encode(iv); var datat = _base64ToArrayBuffer(data); var result = await window.crypto.subtle.decrypt({ name: "AES-GCM", iv: ivt, tagLength: 128 },keyt,datat); return new TextDecoder().decode(result); } var result = await decryptMessageSymetric(phpkey, phpmessageencrypted, phpiv); console.log(result); })(); </script> </html>type here 问题是: 如果您启动 php 脚本并使用如下在线工具测试结果: 文字 它有效并且似乎加密步骤是正确的。 如果您启动 html 页面并与检查员进行检查,则使用提供的示例数据它可以工作。 但是,如果你更换: var phpkey = "TWw4QCkeZEnXoCDkI1GEHQ=="; var phpiv = "CRKTyQoWdWB2n56f"; var phpmessageencrypted = "7K+HAB7Ch9V4jJ1XJPM0sANXA2ocJok="; 使用 php 给定的数据,它不起作用,浏览器给出以下(且无用的)错误代码: Uncaught (in promise) DOMException: The operation failed for an operation-specific reason 而在线工具报告了这一点: 我真的不知道我做错了什么。可能与 KEY 和 IV 有关,但为什么它们被在线工具接受,而不被 html/js 脚本接受? 感谢您的帮助。 我期待它以确定性的方式工作。 问题在于,在 PHP 代码中,直接使用 Base64 编码密钥,即不进行 Base64 解码。如果这也是在 JavaScript 代码中完成的,则解密有效,如以下示例所示(数据是使用您发布的 PHP 代码生成的): // Attention: works e.g. in Firefox, but not in Chrome and Chrome-based browsers, for an explanation see below! var phpkey = "YIUDaeHCjlX3gQb2nxFIxg=="; var phpiv = "BwKuWNyG/PBKr4H/"; var phpmessageencrypted = "J1DQz24HB6ka4tZhhz08hV3TrMIrms/+56ah8n2z3N02LeDEYWzIBIMH2BC6RcyW"; (async () => { function _base64ToArrayBuffer(base64) { var binary_string = atob(base64); var len = binary_string.length; var bytes = new Uint8Array(len); for (var i = 0; i < len; i++) { bytes[i] = binary_string.charCodeAt(i); } return bytes.buffer; } async function _importKeyAes(key) { return await window.crypto.subtle.importKey("raw",key,{ name: "AES-GCM" },false,["encrypt", "decrypt"]); } async function decryptMessageSymetric(key, data, iv) { // var keyArrayBuffer = _base64ToArrayBuffer(key); var keyArrayBuffer = new TextEncoder().encode(key); // Fix! var keyt = await _importKeyAes(keyArrayBuffer); var ivt = new TextEncoder().encode(iv); var datat = _base64ToArrayBuffer(data); var result = await window.crypto.subtle.decrypt({ name: "AES-GCM", iv: ivt, tagLength: 128 },keyt,datat); return new TextDecoder().decode(result); } var result = await decryptMessageSymetric(phpkey, phpmessageencrypted, phpiv); console.log(result); })(); 请注意,如果没有 Base64 解码 24 字节密钥,则使用 AES-192!因此,该代码不适用于 Chrome 和基于 Chrome 的浏览器,因为它们不支持 AES-192。可以运行代码的可能浏览器是 Firefox。 但是,使用 AES-192,尤其是浏览器限制可能不是您想要的,而是使用 AES-128 以及对 Chrome 和基于 Chrome 的浏览器的支持。 必须在 PHP 代码中对此进行修复:由于 generateSharedKey() 提供的密钥是 Base64 编码的,因此在解密之前必须对其进行 Base64 解码:... $chiave = generateSharedKey(); // Base64 encoded key echo "Chiave segreta: ".$chiave."<br>"; $dati_criptati = encryptMessage($messaggio, base64_decode($chiave)); // Fix: Base64 decode key before encryption ... 无需修复 JavaScript 代码。

回答 1 投票 0

即使我们不再使用 GCM SDK,应用程序已被标记为使用 GCM SDK

最近,我们收到一封电子邮件,通知我们我们的应用程序受到 GCM 弃用的影响: 下面列出了使用 Firebase Cloud Messaging API 的 Firebase 项目: 应用程序名称(XXXXXX) 你的

回答 1 投票 0

Google Cloud Messaging 显示特殊字符错误

我有一个 Google Cloud Function (GCF),它通过 Google Cloud Messaging (GCM) 发送推送通知。通知的标题和正文包含特殊字符(ä、ö、ü)。问题是...

回答 2 投票 0

即使在指定 FLAG_IMUTABLE 后,由于目标 S+(版本 31 及更高版本)仍存在未决意图问题,应用程序崩溃

崩溃的应用程序是一个遗留应用程序,仍在使用 GCM 进行通知,没有任何支持,但是当我将应用程序升级到 Target sdk api 33 时,它开始在手机中崩溃...

回答 1 投票 0

多用户应用程序中推送通知的最佳实践?

我正在开发一种推送架构,需要支持允许多个用户的应用程序。这意味着多个用户可以使用其凭据登录该应用程序。问题...

回答 4 投票 0

验证为域颁发的 fcm 令牌

我使用https://iid.googleapis.com/iid/info/id_token api 此 api 适用于 Chrome 浏览器生成的令牌,并显示生成的令牌的域(例如 shopify.com),但对于 Firefox 浏览器令牌,它

回答 1 投票 0

Firebase Cloud Message 可选参数

如何在 json 中包含值为“My New Name”的通知名称键来发送推送通知? { “至”:“fECXbr5qTkOb9CSAqy3hRB:APA91bEF2A1-b6r8pO6W_9X-

回答 1 投票 0

应用程序未运行时小米收不到通知

我正在开发一个使用 Google 推送通知的应用程序。该应用程序在小米手机中运行时会收到通知。否则,当它被杀死时,它不会收到...

回答 4 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.