当应用程序处于非活动状态时,GCM 推送通知不适用于 iOS
Posted
技术标签:
【中文标题】当应用程序处于非活动状态时,GCM 推送通知不适用于 iOS【英文标题】:GCM push notifications not working for iOS when the app is not active 【发布时间】:2015-10-12 17:53:16 【问题描述】:我在 xcode 中启用了后台模式并选中了“远程通知”。
我是否也必须启用“推送通知”?用于 GCM
这是来自我的休息客户端的有效负载
"data":
"displayMessage":
"message": "Package delivered",
,
"registration_ids": [
"dgfdghdfghgfhhfjhgjghjghjhjghjghjghjghjghjghjhgggh"
],
"content-available" : true,
"priority": "high"
当应用程序在前台时这有效,当应用程序不在前台时无效。
非常感谢任何帮助让这个 GCM 用于 ios 工作。
【问题讨论】:
看看这个问题虽然***.com/questions/33192145/… GCM Notifications not receiving when app is in background mode in iOS的可能重复 【参考方案1】:我建议检查这里提到的消息格式:
Making GCM work for iOS device in the background
【讨论】:
在发布这个问题之前我已经尝试过了,但没有成功。你能想到我可能缺少的其他东西吗? 我想它与服务器端而不是客户端有关,你能提供一些代码来展示你如何向 GCM 发出请求吗? @SanthoshAdari 我只是用户休息客户端,称为谷歌浏览器的“高级休息客户端” “到”: “dfgdfgdfgdfc:APA91bGAmf3utL-k3BaZtzVXYayceu6XfW28ewdsgdgdfgdfhgdfgdf86zxxVyi9sIvJqRBZxz18-6PzZxjDeX_Bdn-ZmXaeTslB8qCGsH4m79iUK1bueN2bzTpQ3tx”, “数据”: “声音”: “缺省”, “徽章”: “2”, “标题”: “默认”,“正文”:“测试推送!” , "内容可用":true 当我使用“通知”而不是“数据”时出现内部服务器错误。使用“数据”我可以在应用程序处于活动状态时打开通知。【参考方案2】:你的钥匙错了。使用content_available
,而不是content-available
。
另外,您的 JSON 无效。具体来说:
"message": "Package delivered",
结尾不应有逗号。
【讨论】:
content_available 总是会给我“InternalServerError”。我已阅读文档并同意它要求我们将 content_available 用于 gcm。 我正在使用 GCM 推送到 iOS 设备,它对我有用。我正在使用 content_available。 你能告诉我你用的是什么rest客户端吗? 当我使用 content_available 时,响应总是 multicast_id: 6973668141157543000 success: 0 failure: 1 canonical_ids: 0 results: [1] 0: error: "InternalServerError" - -
。但是,当我使用 content-available 时,它不会唤醒应用程序。
HTTP响应也是5xx错误吗?如果是这样,文档说联系 android-gcm 组报告错误。 developers.google.com/cloud-messaging/http-server-ref群组网址为groups.google.com/forum/#!forum/android-gcm【参考方案3】:
此问题发生在服务器端。通知消息正文应该是这样的。
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"content_available" : "true"
"notification" :
"body" : "great match!",
"title" : "Portugal vs. Denmark"
这是我已经实现并且运行良好的代码。
<?php
// Message to send
$notificationTitle = "Notification title";
$notificationtBody = "Notification arrived";
$registrationId = 'GCM_DEVICE_TOKEN';
$apiKey = "GCM_SERVER_KEY";
$response = sendNotification(
$apiKey,
$registrationId,
array(
'sound' => "default",
'badge' => 1,
'body' => $notificationtBody,
'title' => $notificationTitle
)
);
echo $response;
function sendNotification( $apiKey, $registrationId, $messageData )
$headers = array("Content-Type:" . "application/json", "Authorization:" . "key=" . $apiKey);
$data = array(
'to' => $registrationId,
'content_available' => true,
'notification' => $messageData
);
$ch = curl_init();
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch, CURLOPT_URL, "https://android.googleapis.com/gcm/send" );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($data) );
$response = curl_exec($ch);
curl_close($ch);
return $response;
【讨论】:
【参考方案4】:此通知对我有用
"to":"ID",
"notification":
"sound":"default",
"title":"TITLE",
"body":"BODY"
,
"priority": "high"
【讨论】:
以上是关于当应用程序处于非活动状态时,GCM 推送通知不适用于 iOS的主要内容,如果未能解决你的问题,请参考以下文章
当应用程序一天不活动时,GCM 推送通知不会出现在 iPhone 上
当应用程序处于非活动状态并运行代码时,Swift iOS 应用程序会收到推送通知
如何在应用程序处于非活动状态时获取推送通知ios swift3