我正在使用需要推送通知的appcelerator Alloy框架制作应用程序。我是第一次使用推送通知,所以请多多包涵,并在这里帮助我。

我在此处https://wiki.appcelerator.org/display/guides2/Push+Notifications关注了推送通知Wiki教程。

这是我的代码在这里:

var deviceToken = null;

// Check if the device is running iOS 8 or later
if (Ti.Platform.name == "iPhone OS" && parseInt(Ti.Platform.version.split(".")[0]) >= 8) {

    // Wait for user settings to be registered before registering for push notifications
    Ti.App.iOS.addEventListener('usernotificationsettings', function registerForPush() {

        // Remove event listener once registered for push notifications
        Ti.App.iOS.removeEventListener('usernotificationsettings', registerForPush);

        Ti.Network.registerForPushNotifications({
            success: deviceTokenSuccess,
            error: deviceTokenError,
            callback: receivePush
        });
    });

    // Register notification types to use
    Ti.App.iOS.registerUserNotificationSettings({
        types: [
            Ti.App.iOS.USER_NOTIFICATION_TYPE_ALERT,
            Ti.App.iOS.USER_NOTIFICATION_TYPE_SOUND,
            Ti.App.iOS.USER_NOTIFICATION_TYPE_BADGE
        ]
    });
}

// For iOS 7 and earlier
else {

    Ti.Network.registerForPushNotifications({
        // Specifies which notifications to receive
        types: [
            Ti.Network.NOTIFICATION_TYPE_BADGE,
            Ti.Network.NOTIFICATION_TYPE_ALERT,
            Ti.Network.NOTIFICATION_TYPE_SOUND
        ],
        success: deviceTokenSuccess,
        error: deviceTokenError,
        callback: receivePush
    });
}

// Process incoming push notifications
function receivePush(e) {
    alert('Received push: ' + JSON.stringify(e));
}
// Save the device token for subsequent API calls
function deviceTokenSuccess(e) {
    deviceToken = e.deviceToken;
}

function deviceTokenError(e) {
    alert('Failed to register for push notifications! ' + e.error);
}


// Require the Cloud module
var Cloud = require("ti.cloud");

function subscribeToChannel () {
    // Subscribes the device to the 'chats' channel
    // Specify the push type as either 'android' for Android or 'ios' for iOS
    Cloud.PushNotifications.subscribeToken({
        device_token: deviceToken,
        channel:'test',
        type: Ti.Platform.name == 'android' ? 'android' : 'ios'
    }, function (e) {
        if (e.success) {
            alert('Subscribed');
        } else {
            alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));
        }
    });
}



function unsubscribeToChannel () {
    // Unsubscribes the device from the 'test' channel
    Cloud.PushNotifications.unsubscribeToken({
        device_token: deviceToken,
        channel:'test',
    }, function (e) {
        if (e.success) {
            alert('Unsubscribed');
        } else {
            alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));
        }
    });
}



function loginUser(username, password){
    // Log in to Arrow
    Cloud.Users.login({
        login: username,
        password: password
    }, function (e) {
        if (e.success) {
            subscribeToChannel ();
            alert('Login successful with device token' + deviceToken);

            // Store the authentication details in the local filesystem
            Ti.App.Properties.setString('usernameSave',username);
            Ti.App.Properties.setString('passwordSave',password);

            // user_id = jsonPost.SuccessResult.user_id;

        } else {
            alert('Error:\n' +
                ((e.error && e.message) || JSON.stringify(e)));
        }
    });
}



var savedUserName = Ti.App.Properties.getString('usernameSave','');
var savedPassword = Ti.App.Properties.getString('passwordSave','');
if(savedUserName != ''){
    $.userNameField.value = savedUserName;
    $.passwordField.value = savedPassword;
}

function login(){
    var username = $.userNameField.value;
    var password = $.passwordField.value;

    loginUser(username, password);
}


单击名为login的按钮时,将调用Login()函数。

我得到了登录时预期的“登录成功”和“已订阅”警报。

每当我尝试向所有用户发送推送通知时,它都起作用。但是,如果我尝试将其发送给指定的用户,则会导致仪表板中的“推送日志”出现故障。

我在这里想念什么?请帮帮我。

谢谢。

最佳答案

好的,我发现了导致此问题的原因。

是的,这是我的错,因为在订阅方法中,我使用令牌订阅而不是频道订阅。由于我正在使用基于会话的方法。

如果有人将来需要,这里就是区别。

检查第二行...

以前的代码

function subscribeToChannel () {

    Cloud.PushNotifications.subscribeToken({
        device_token: deviceToken,
        channel:'test',
        type: Ti.Platform.name == 'android' ? 'android' : 'ios'
    }, function (e) {
        if (e.success) {
            alert('Subscribed');
        } else {
            alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));
        }
    });
}


新密码

function subscribeToChannel(){

    Cloud.PushNotifications.subscribe({
        device_token: deviceToken,
        channel: 'test',
        type: Ti.Platform.name == 'android' ? 'android' : 'ios'
    }, function (e) {
        if (e.success) {
            alert('Subscribed');
        } else {

            alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));
        }
    });
}


谢谢。

干杯。

关于ios - Titanium Appcelerator无法将推送通知发送给指定用户,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34475650/

10-14 21:49