0

我使用鈦加速器作爲通知服務器的小應用程序,並使用pushwoosh作爲通知服務器。在收到推送通知後打開窗口時出現鈦加速器錯誤

在我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,其中i接收推送,並希望將用戶重定向到登錄例如JS,目的是從推送自定義值中打開相應的頁面,但是在這裏我簡單地進行測試。

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

對於的iOS - 你需要使用的openWindow(方法)NavigationWindow,併爲的Android很簡單開放( )打電話。

注:

既然你提到,要導航用戶到應用程序的不同部分,所以你將需要採取你在它打開另一個窗口前,你NavigationWindow存在照顧。

這是因爲當你收到通知,你點擊就可以了,爲什麼你得到的是空的錯誤,它會打開應用程序,並運行此pushwoosh.onPushOpened方法,並直到這個時候你沒有任何NavigationWindow創建。所以你需要一個不同的流程來導航到不同的部分。

  • 敲擊通知,如果您的應用程序在後臺模式下運行,那麼我相信,因爲你已經有了一個NavigationWindow創造了你不會得到這個錯誤,

  • 如果你的應用程序處於死亡狀態,並且你收到並點擊通知,那麼你會得到這個錯誤,因爲你的應用程序沒有創建NavigationWindow(這就是爲什麼你看到不同的上下文寫在控制檯上)。

所以要做你想做的事情,你需要創建一個不同的流來處理接收推送消息時打開應用程序登錄窗口的場景。 (簡單地說,您仍然需要創建NavigationWindow並打開登錄窗口或其他方法)。

我希望你現在清楚地知道究竟是什麼導致你的應用程序顯示錯誤。

+0

以外,我只是能夠轉到另一個頁面你好,謝謝,但它不工作,我創建一個沒有內部控制器的新登錄頁面,但我得到相同的錯誤: 腳本錯誤{ERROR]:column = 1112; [錯誤]:行= 1; [錯誤]:message =「null不是一個對象(評估'i .__ views.login.add')」; – Rahajason

+0

你好,謝謝,但它不工作,我創建了一個沒有任何內部控制器的新登錄頁面,但我得到了同樣的錯誤,但是當我把這個Pushwoosh事件以外的事件「正在工作。 – Rahajason

+0

我在回答中添加了一些註釋,希望它能幫助你! –

相關問題