0

Я использую титановый appcelerator для небольшого приложения с pushwoosh в качестве сервера уведомлений.Ошибка фильтра титанов при открытии окна после получения push-уведомления

На моем index.xml я следующее:

<Alloy> 
 
\t <!-- Anddroid Window --> 
 
\t <Window id="index" platform="android"> 
 
\t \t <Require type="view" id="firstscreen" src="firstscreen"/> 
 
\t </Window> 
 

 
\t <!-- iOS Window --> 
 
\t <NavigationWindow id="nav" platform="ios"> 
 
\t \t <Window id="win1" backgroundColor="white"> 
 
\t \t \t <Require type="view" id="firstscreen" src="firstscreen"/> 
 
\t \t </Window> 
 
\t </NavigationWindow> 
 
</Alloy>

вторых index.js, где я получаю толчок и перенаправить пользователя для входа в систему JS, например, цель чтобы открыть соответствующую страницу из пользовательского значения push, но здесь я делаю это просто, просто для теста.

if (OS_ANDROID) { 
 
\t $.index.addEventListener('open', after_win_load); 
 
\t $.index.open(); 
 
} else { 
 
\t $.nav.addEventListener('open', after_win_load); 
 
\t $.nav.open(); 
 
} 
 

 
var pushwoosh = require('com.pushwoosh.module'); 
 
/* 
 
* PUSHWOOSH 
 
* */ 
 

 
pushwoosh.onPushOpened(function(e) { 
 
    var message = e.message; 
 
    var login = Alloy.createController('login').getView(); 
 
     $.nav.open(login); 
 
}); 
 

 
pushwoosh.initialize({ 
 
    "application" : "XXXX-XXXXXX", 
 
    "gcm_project" : "XXXXXXXXXXX" 
 
}); 
 

 
pushwoosh.registerForPushNotifications(
 
    function(e) { 
 
     var pushToken = e.registrationId; 
 
     ; 
 
\t \t console.log('Push token ' + pushwoosh.getPushToken()); 
 
\t \t Alloy.Globals.resgisterId = e.registrationId; 
 

 
    }, 
 
    function(e) { 
 
     var errorMessage = e.error; 
 
     console.log("Error during registration: " + e.error); 
 
     // alert('push error'); 
 
    } 
 
);

И последний login.xml и login.js

<Alloy> 
 
\t <Window id="login" > 
 
\t \t <ScrollView scrollingEnabled="true" contentWidth="Ti.UI.FILL" disableBounce="true"> 
 
\t \t \t <!-- Here another view --> 
 
\t \t </ScrollView> 
 
\t </Window> 
 
</Alloy> 
 

 
//// login.js is simple : 
 
var args = $.args; 
 
console.log('hey boy');

При получении толчок уведомление, и нажмите на него, чтобы перенаправить чтобы залогиниться JS я следующее сообщение об ошибке:

[WARN] : Creating [object login] in a different context than the calling function. 
 
[WARN] : Creating [object __alloyId48] in a different context than the calling function. 
 
[ERROR] : Script Error { 
 
[ERROR] :  column = 2330; 
 
[ERROR] :  line = 1; 
 
[ERROR] :  message = "null is not an object (evaluating 'a.__views.login.add')"; 
 
[ERROR] :  sourceURL = "file:///var/containers/Bundle/Application/ADE5F25A-17A4-4197-98C7-0781216545A3/myApp.app/alloy/controllers/login.js"; 
 
[ERROR] :  stack = "[email protected]:///var/containers/Bundle/Application/ADE5F25A-17A4-4197-98C7-0781216545A3/myApp.app/alloy/controllers/login.js:1:2330\[email protected]:///var/containers/Bundle/Application/ADE5F25A-17A4-4197-98C7-0781216545A3/myApp.app/alloy.js:1:5254\[email protected]:///var/containers/Bundle/Application/ADE5F25A-17A4-4197-98C7-0781216545A3/myApp.app/xpng.js:1:283\nfile:///var/containers/Bundle/Application/ADE5F25A-17A4-4197-98C7-0781216545A3/myApp.app/alloy/controllers/firstscreen.js:1:3855"; 
 
[ERROR] : }

Я понятия не имею, где ошибка есть, могли бы вы помочь мне решить эту проблему? Спасибо.

+0

ПРИМЕЧАНИЕ: Я просто могу перейти на другую страницу, если я положил Alloy.createController ('login'). GetView(). Open() вне события Pushwoosh – Rahajason

ответ

0

Вам просто нужно немного изменить в коде:

pushwoosh.onPushOpened(function(e) { 
    var message = e.message; 

    var login = Alloy.createController('login').getView(); 
    OS_IOS ? $.nav.openWindow(login) : login.open(); 
}); 

Для прошивки - вам нужно использовать OpenWindow() метода NavigationWindow, и для Android это просто открытых () call.

Примечание:

Поскольку вы упомянули, что вы хотите, чтобы перейти пользователю другой раздел приложения, так что вам нужно будет позаботиться о том, существует ваш NavigationWindow, прежде чем открыть другое окно в нем.

Вот почему вы получаете эту ошибку, потому что нулевой, когда вы получите уведомление и вы нажмете на нее, она открывает приложение и запустить этот метод pushwoosh.onPushOpened, и до этого времени не имеет какой-либо NavigationWindow создан. Таким образом, вам нужен другой поток для навигации по различным разделам.

  • После нажав на уведомление, если приложение работает в фоновом режиме, то я полагаю, вы не получите эту ошибку, потому что у вас уже есть NavigationWindow создан,

  • Но, если ваше приложение находится в состоянии «убито», и вы получаете его и нажимаете на уведомление, вы получите эту ошибку, потому что у вашего приложения нет NavigationWindow (вот почему вы видите другой контекст, написанный на консоли).

Так делать то, что вы хотите, вам нужно будет создать другой поток для обработки сценария открытия окна входа в приложениях при получении нажимного сообщения. (простыми словами вам все равно нужно создать NavigationWindow и открыть логин окно в нем или другой подход).

Надеюсь, у вас теперь есть четкое представление о том, что на самом деле заставляет ваше приложение показывать эту ошибку.

+0

Привет, спасибо, но он не работает, я создала новую страницу входа, где ничего не было внутри контроллера, но я получаю ту же ошибку: Ошибка скрипта { [ERROR]: column = 1112; [ERROR]: line = 1; [ERROR]: message = "null не является объектом (оценка« i .__ views.login.add »)»; – Rahajason

+0

Привет, спасибо, но он не работает, я создал новую страницу входа, в которой ничего не было внутри контроллера, но я получаю ту же ошибку, но когда я помещаю это за пределы события Pushwoosh, он работает. – Rahajason

+0

Я добавил некоторые заметки в свой ответ, надеюсь, что это поможет вам! –

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