收到推送通知后打开窗口时出现Titanium appcelerator错误



我使用titanium appcelerator作为一个小应用程序,使用pushwoosh作为通知服务器。

在我的index.xml上,我有以下内容:

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

其次是index.js,我在这里接收推送并希望将用户重定向到登录js,例如,目的是从推送自定义值打开相应的页面,但这里我做得很简单,只是为了测试

if (OS_ANDROID) {
	$.index.addEventListener('open', after_win_load);
	$.index.open();
} else {
	$.nav.addEventListener('open', after_win_load);
	$.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;
;
		console.log('Push token ' + pushwoosh.getPushToken());
		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>
	<Window id="login" >
		<ScrollView scrollingEnabled="true" contentWidth="Ti.UI.FILL" disableBounce="true">
			<!-- Here another view -->
		</ScrollView>
	</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 = "Controller@file:///var/containers/Bundle/Application/ADE5F25A-17A4-4197-98C7-0781216545A3/myApp.app/alloy/controllers/login.js:1:2330ncreateController@file:///var/containers/Bundle/Application/ADE5F25A-17A4-4197-98C7-0781216545A3/myApp.app/alloy.js:1:5254nopenWin@file:///var/containers/Bundle/Application/ADE5F25A-17A4-4197-98C7-0781216545A3/myApp.app/xpng.js:1:283nfile:///var/containers/Bundle/Application/ADE5F25A-17A4-4197-98C7-0781216545A3/myApp.app/alloy/controllers/firstscreen.js:1:3855";
[ERROR] :  }

我不知道错误在哪里,你能帮我解决这个问题吗?非常感谢。

您只需要对代码进行一点更改:

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

对于iOS-您需要使用NavigationWindowopenWindow()方法,对于Android,这是一个简单的open()调用。

注意:

由于你提到你想将用户导航到应用程序的不同部分,所以在打开另一个窗口之前,你需要注意你的NavigationWindow是否存在。

这就是为什么你会得到这个null错误,因为当你收到通知并点击它时,它会打开应用程序并运行这个pushwoosh.onPushOpened方法,直到现在你还没有创建任何NavigationWindow。因此,您需要一个不同的流程来导航到不同的部分。

  • 点击通知后,如果您的应用程序在后台模式下运行,那么我相信您不会收到此错误,因为您已经创建了导航窗口

  • 但是如果您的应用程序处于终止状态,并且您收到并点击通知,那么您将收到此错误,因为您的应用尚未创建导航窗口(这就是为什么您在控制台上看到不同的上下文)。

因此,要想做你想做的事,你需要创建一个不同的流来处理在收到推送消息后打开应用程序登录窗口的场景。(简单地说,您仍然需要创建NavigationWindow并在其中打开login窗口,或者使用其他方法)。

我希望你现在清楚地知道是什么导致你的应用程序显示错误。

相关内容

  • 没有找到相关文章

最新更新