带有 iOs 的 Phonegap 推送通知插件
Posted
技术标签:
【中文标题】带有 iOs 的 Phonegap 推送通知插件【英文标题】:Phonegap push notification plugin with iOs 【发布时间】:2016-07-02 21:36:16 【问题描述】:我正在使用 phonegap-plugin-push 向 android 设备发送推送通知。
我正在尝试弄清楚如何向 iO 发送通知。
我已经在https://developers.google.com/mobile/add?platform=ios&cntapi=gcm&cnturl=https:%2F%2Fdevelopers.google.com%2Fcloud-messaging%2Fios%2Fclient&cntlbl=Continue%20Adding%20GCM%20Support&%3Fconfigured%3Dtrue注册了
我在客户端应用程序中获取令牌的方式与在 Android 中相同:
var push = PushNotification.init(
android:
senderID: "5993...475"
,
ios:
alert: "true",
badge: true,
sound: 'false'
,
windows:
);
push.on('registration', function(data)
$.ajax(
url: '/save-token/',
data: token: data.registrationId,
success: function (json)
);
);
在我得到客户的令牌后,我尝试向他们发送推送通知:
$to = ModelGcmTokens::getInstance()->getToken($userId);
$API_KEY = 'AIzaS...HcEYC346zQ';
$message = array(
'data' => array(
'title' => ($title) ? $title : 'Test!',
'message' => $message
),
'to' => $to
);
$message = json_encode($message);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://gcm-http.googleapis.com/gcm/send");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $message);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Authorization:key=$API_KEY",
"Content-Type:application/json",
));
// receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);
// further processing ....
if ($server_output == "OK")
return true;
else
return false;
Google 云消息以 InvalidRegistration 错误响应:
"multicast_id":4701637331500989392,"success":0,"failure":1,"canonical_ids":0,"results":["error":"InvalidRegistration"]
当我用谷歌搜索这个错误时 - 据说我得到了客户的令牌错误。 但我使用与 Android 上相同的 excat 脚本得到它。它适用于 Android。
我看到的唯一区别是令牌的格式:
谁能告诉我如何让推送插件在 iO 上工作? iOs 令牌有什么问题,我应该如何向 GCM 发送消息以供 iOs 接收?
非常感谢您的任何建议。我真的被困住了。
【问题讨论】:
Apple push 有不同的环境用于发送推送,一种用于开发,一种用于生产。如果您获得 dev 令牌并将其发送到 prod 环境,反之亦然,那么它将无法工作。您知道您尝试将推送发送到 iOS 的环境吗? 好吧,我得到了生产密钥并将其发送到生产服务器 我真的不明白如何获得“生产”或“开发”令牌。我通过插件的魔力得到它们,当它向 GCM 服务器发送一些信号并从那里获取令牌时。它是什么令牌——我不知道。但应该是生产,因为我已将生产 p12 密钥上传到 GCM 服务器。 【参考方案1】:您调用 init 方法的方式是从 APNS 而非 GCM 请求注册 ID。如果您阅读 phonegap-plugin-push 存储库中GCM on iOS 上的文档,您会看到需要像这样调用 init:
var push = PushNotification.init(
android:
senderID: "5993...475"
,
ios:
senderID: "5993...475",
gcmSandbox: true,
alert: "true",
badge: true,
sound: 'false'
,
windows:
);
如果 iOS 选项有 senderID
,它将注册到 GCM。
另外,我注意到在对其中一个 cmets 的回复中,您不知道 APNS 上的 production
和 development
环境之间的区别。好吧,你真的需要阅读这个。在 iOS 设备上,APNS 环境会有所不同,具体取决于您是否使用 production
和 development
环境。如果您将应用设置为 development
并通过 production
发送推送,它将永远不会到达您的设备。
现在您可能会问我为什么要谈论 APNS。这是因为当您在 iOS 上使用 GCM 时,您会将推送消息发送到 GCM,然后 GCM 会将您的消息转发到 APNS 服务器,最后转发到您的设备。
【讨论】:
非常感谢。这句话If the iOS options has a senderID it will register with GCM.
- 如此简单和非常重要。再次感谢!
Simon,如果您看一下下一个问题,我将不胜感激;我现在没有得到任何registrationId ***.com/questions/38268507/…以上是关于带有 iOs 的 Phonegap 推送通知插件的主要内容,如果未能解决你的问题,请参考以下文章