0

我希望能够在 Android 上使用 Titanium 和 Arrow Push 发送推送通知。

我已按照此处的说明进行操作:

配置推送服务

订阅推送通知

模块.CloudPush

我的简单代码如下所示:

var CloudPush = require('ti.cloudpush');
var deviceToken = null;
    
// Works fine
CloudPush.retrieveDeviceToken({
    success: function () {
        deviceToken = e.deviceToken;
        alert('deviceToken: ' + deviceToken);
        subscribeToChannel();
    },
    error: function () {
        alert('Failed to register for push notifications! ' + e.error);
    }
});
    
// Never runs!!!
CloudPush.addEventListener('callback', function (evt) {
    Ti.API.info('New notification!');
    alert("Notification received: " + evt.payload);
});

// Works fine
function subscribeToChannel () {
    Cloud.PushNotifications.subscribeToken({
        device_token: deviceToken,
        channel: 'general',
        type: Ti.Platform.name
    }, function (e) {
        if (e.success) {
            alert('Subscribed');
        } else {
            alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));
        }
    });
}

上面的大部分代码都与文档类似。代码的订阅方面似乎工作得很好,因为用户的设备也出现在 Appcelerator 仪表板的设备部分。

但是,在从 Appcelerator 仪表板发送通知时,我的 Android 设备旁边会出现“失败”一词。

推送通知错误

突出显示“?”时的完整错误消息 图标如下:

异常类型:GCM;错误代码:3103;错误消息:RegistrationId(s) 为空或为空;捕获的异常:参数不能为空

我在http://docs.appcelerator.com/arrowdb/latest/#!/guide/troubleshooting上查看了这个错误,它说的是:

GCM 客户端提供了一个 null 或空的注册 ID。如果您使用的是 Modules.CloudPush 模块,则此错误并不常见。

这没有帮助。

我究竟做错了什么?这是加速器方面的错误。

4

3 回答 3

1

原来我的代码很好。但是,我使用的凭据不正确。请在此处查看我的其他相关问题:

Appcelerator/Titanium:获取 Android 凭据以推送通知

文档需要更新。

于 2017-05-04T11:51:49.943 回答
0

我几乎不是推送方面的专家,但我将您拥有的内容与我在其中一个应用程序中拥有的内容进行了比较。

很确定您需要将 deviceToken 发送到 subscribeToChannel 函数中。

尝试改变这个 -

function subscribeToChannel () {

对此——

function subscribeToChannel (deviceToken) {

然后在此处将令牌添加到调用中-

subscribeToChannel (deviceToken);

让我知道这是否适合你。

-乔恩

于 2017-05-03T02:26:29.807 回答
0

subscribeToChannel()功能上,您应该使用type : 'gcm'而不是type: Ti.Platform.name

这是我为我的 Android 推送创建的 commonJS 模块:

function ACSPush(_callback) {

    var debug_mode = true;
    var Cloud = require('ti.cloud');        
    var CloudPush = require('ti.cloudpush');
    CloudPush.enabled = true; 
    var deviceToken;

    CloudPush.retrieveDeviceToken({
        success : function deviceTokenSuccess(e) {
            if(debug_mode)
                Ti.API.info('Device Token: ' + e.deviceToken);
            deviceToken = e.deviceToken;
            if(Ti.App.Properties.getString("deviceToken") != deviceToken.toString()){
                defaultSubscribe();
            };
        },
        error : function deviceTokenError(e) {
            if(debug_mode)
                Ti.API.info('deviceTokenError.. :( ' + e.error);
        }
    });

    function defaultSubscribe() {
        Cloud.PushNotifications.subscribeToken({
            channel : 'MyChannel',
            device_token : deviceToken,
            type : 'gcm'
        }, function(e) {
            if(e.success) {
                if(debug_mode)
                    Ti.API.info("Success registerForPushNotifications");
                Ti.App.Properties.setString("deviceToken", deviceToken.toString());
            } else {
                if(debug_mode)
                    Ti.API.info('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));
            };
        });
    };

    CloudPush.addEventListener('callback', function(evt) {
        var payload = JSON.parse(evt.payload);
        if(debug_mode){
            Ti.API.info("Received a push notification\nPayload:\n" + JSON.stringify(evt.payload));
            Ti.API.info("payload: " + payload);
        };
        _callback(payload);
    });
    CloudPush.addEventListener('trayClickLaunchedApp', function(evt) {
        if(debug_mode)
            Ti.API.info('Tray Click Launched App (app was not running)');
    });
    CloudPush.addEventListener('trayClickFocusedApp', function(evt) {
        if(debug_mode)
            Ti.API.info('Tray Click Focused App (app was already running)');
    });

};

module.exports = ACSPush;

显然,必须先配置Android Push Service http://docs.appcelerator.com/platform/latest/#!/guide/Configuring_push_services-section-src-37551713_Configuringpushservices-ConfiguringpushservicesforAndroiddevices

于 2017-05-03T14:56:03.003 回答