簡體   English   中英

Appcelerator / Titanium:無法將推送通知發送到Android

[英]Appcelerator/ Titanium: Cannot send push notification to Android

我希望能夠使用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儀表板的device部分中。

但是,當要從Appcelerator儀表板發送通知時,Android設備旁邊會出現“失敗”字樣。

推送通知時出錯

突出顯示“?”時的完整錯誤消息 圖標如下:

異常類型:GCM; 錯誤代碼:3103; 錯誤消息:RegistrationId為空或為空; 捕獲的異常:參數不能為空

我在http://docs.appcelerator.com/arrowdb/latest/#!/guide/疑難解答中查找了此錯誤,它的意思是:

GCM客戶端提供了一個空或空的注冊ID。 如果使用的是Modules.CloudPush模塊,此錯誤很少見。

這沒有幫助。

我究竟做錯了什么? 這是Accelerator方面的錯誤嗎?

原來我的代碼很好。 我使用的憑據不正確。 請在這里查看我的其他相關問題:

Appcelerator / Titanium:獲取Android憑據以推送通知

該文檔需要更新。

我不是推送專家,但我將您擁有的東西與我的一個應用程序中的東西進行了比較。

非常確定您需要將deviceToken發送到subscriptionToChannel函數中。

嘗試更改此-

function subscribeToChannel () {

為此-

function subscribeToChannel (deviceToken) {

然后將令牌添加到此處的呼叫中-

subscribeToChannel (deviceToken);

讓我知道這是否適合您。

-喬恩

subscribeToChannel()函數上,應使用type : 'gcm'而不是type: Ti.Platform.name

這是我為Android push創建的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM