2015-12-26 3 views
0

Я создаю приложение с использованием рамки сплайсера-адаптора, которая требует push-уведомлений. Я впервые использую push-уведомления, так что несите меня и помогите мне здесь.Titanium Appcelerator не может отправить push-уведомление указанному пользователю

Я последовал толчок уведомление вики учебник здесь https://wiki.appcelerator.org/display/guides2/Push+Notifications

Это мой код здесь:

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); 
} 

Функция Логин() вызывается при нажатии кнопки с именем Логин щелкают.

Я получаю Войти Успешные и подписаны оповещения, как ожидается, при входе в систему.

Всякий раз, когда я пытался отправить push-уведомление всем пользователям, это сработало. Но если я попытаюсь отправить его указанному пользователю, это приведет к сбою в журналах Push на панели управления.

Что мне здесь не хватает? Пожалуйста, помогите мне.

Спасибо.

+0

Появляется ли пользователь в списке пользователей в источнике данных ArrowDB? Вы также можете запросить API, чтобы убедиться, что они отображаются правильно: http://docs.appcelerator.com/arrowdb/latest/#!/api/PushNotifications-method-channels_query или http://docs.appcelerator.com/arrowdb/ last/#!/api/PushNotifications-method-query –

+0

@FokkeZandbergen отображается правильно, вы имеете в виду панель управления push-уведомлением? Если это то, что вы имеете в виду, тогда да, это выглядит правильно. – Steve

ответ

1

Хорошо, я нашел проблему, которая вызывала это.

Да, это была моя ошибка, так как в методе подписки я использую подписку на токен вместо подписки на канал. Поскольку я использую метод, основанный на сеансе.

Вот в чем разница, если кому-то это нужно в будущем.

Проверьте второй линии ...

Предыдущий код

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))); 
     } 
    }); 
} 

Спасибо.

Cheers.

Смежные вопросы