我没有更多的头发要撕掉并需要帮助..
我想从服务器(通过GCM)向主题(或频道)发送消息,以便它到达订阅该主题的所有设备。
将推送消息发送到各个设备的工作正常,发送到主题的格式是相同的,除了指定deviceToken,在for / topics / mytopic中指定主题
这里描述:
https://developers.google.com/cloud-messaging/downstream https://developers.google.com/cloud-messaging/topic-messaging
在Titanium方面(Android现在,但计划是IOS太晚了)我将设备注册到频道" myChannel"。我可以通过返回的成功消息以及Appcelerators控制台验证这一点。
现在,我使用curl模拟服务器,并向" myChannel"发送消息。到GCM。消息响应成功,我从GCM收到一个message_id。
curl -H "Content-Type:application/json" -H "Authorization:key=APIKEY" --data '{"to": "/topics/myChannel","data": {"payload":{ "message": "Hi!" } }}' https://gcm-http.googleapis.com/gcm/send
我的问题是此消息未路由到设备。 我猜测在Titanium中订阅的频道与我用于GCM的频道之间需要进行一些语法转换,但我不知道。
有趣的是,一旦我在curl中放入deviceToken,它就能很好地工作。
我错过了一些基本的东西吗?通道不在那里将相同的消息路由到订阅它的多个设备吗? 任何帮助,线索都非常感谢。
我的代码如下所示:
// Require the module
var CloudPush = require('ti.cloudpush');
// Initialize the module
CloudPush.retrieveDeviceToken({
success: deviceTokenSuccess,
error: deviceTokenError
});
CloudPush.addEventListener('callback', receivePush);
function receivePush(evt) {
alert("Notification received: " + JSON.stringify(evt.payload));
}
function deviceTokenSuccess(e) {
Alloy.Globals.DeviceToken = e.deviceToken;
Titanium.API.info(Alloy.Globals.DeviceToken);
// Subscribe to topic
var Cloud = require("ti.cloud");
var subscribe_data = {
device_token: Alloy.Globals.DeviceToken,
channel: Alloy.Globals.topicChannelID,
type: Ti.Platform.name == 'android' ? 'android' : 'ios'
};
Cloud.PushNotifications.subscribeToken(
subscribe_data, function (e) {
if (e.success) {
Titanium.API.info('Subscribed successfully');
} else {
Titanium.API.error('Error subscribing');
}
});
}
// Something went wrong getting the device token
function deviceTokenError(e) {
Titanium.API.error('Failed ' + e.error);
}
答案 0 :(得分:2)
GCM不了解频道。这是Arrow跟踪并转换为订阅的令牌的内容。因此,您需要通过Arrow API或Appcelerator Dashboard发送推送。
http://docs.appcelerator.com/platform/latest/#!/guide/Sending_and_Scheduling_Push_Notifications
http://docs.appcelerator.com/arrowdb/latest/#!/api/PushNotifications