close
我在openshift上安裝了aerogear的GCM Server,要測試Android的GCM,在Genymotion模擬器中測試是正常的,
但是安裝到紅米實機上測試時,卻出現下列的錯誤:
Android java.net.SocketException: socket failed: EACCES (Permission denied)

雖然訊息說的很明確是權限的問題,但是為什麼Genymotion模擬器(Android 4.4)上測試正常,但是實機卻是失敗的。

原本我的程式全寫在index.html,改以Phonegap的Hello The World的範例結構,重新改寫一次如下:

index.html
=================================================================
...略






test.js
=================================================================
var app = {

initialize: function() {
this.bindEvents();
},

bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},

onDeviceReady: function() {
app.receivedEvent('deviceready');
},

receivedEvent: function(id) {
alert("aaaaaa");

//離開程式
$("#a_exit").click(function(){
if (navigator.app) {
navigator.app.exitApp();
} else if (navigator.device) {
navigator.device.exitApp();
}
});

$("#a_reg").click(function() {
try {
//設定參數
var pushConfig = {
pushServerURL: "https://aerogear-XXXXX.rhcloud.com/ag-push",
senderID: "12345678",
variantID: "8133-160f5f6fd3",
variantSecret: "956a-65441bf7"
};
push.register(onNotification, successHandler, errorHandler, pushConfig);
} catch(e) {
alert(e);
}
});

//取消註冊
$("#a_unreg").click(function() {
try {
push.unregister(un_successHandler,un_errorHandler);
} catch(e) {
alert(e);
}
});


function onNotification() {
alert("收到");
}

function successHandler() {
alert("註冊成功");
}

function errorHandler() {
alert("註冊失敗");
}

function un_successHandler() {
alert("取消註冊成功");
}

function un_errorHandler() {
alert("取消註冊失敗");
}


} // receiveEvent: function(id)


}; // app



寫完之後重新編輯再試一次,這次雖然也是失敗,但是卻出現了紅米不允許這支APP透過行動網路(3G)的視窗,
原來是紅米的問題,因為有設定不允許APP透過行動網路(3G)出去的緣故,設定允許我自己的APP通過就正常了。
就算把程式還原成之前全寫在index.html內,也變得正常了,只是為什麼改寫了程式就會有不同的訊息,
init的用意是什麼,我也不太清楚,總之問題是暫時解決了。其他的問題等有時間再好好研究一番。
arrow
arrow
    全站熱搜

    keven 發表在 痞客邦 留言(0) 人氣()