2

プッシュ通知機能が必要な煎茶タッチアプリケーションを開発しています。sencha docs によると、Android プッシュ通知をサポートしていないことがわかっています。私のプロジェクトをPhonegap 3.0と統合しようとしています。プッシュ通知には、このプラグインを使用しています https://github.com/hollyschinsky/PushNotificationSample30/

デモは正常に動作しており、登録 ID を取得しています。その登録 ID にプッシュ通知を送信できます。しかし問題は、私の sencha アプリをこのデモ プッシュ プラグインに統合しようとすると、登録 ID が取得されないことです。

私のindex.htmlはこのように見えます

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>crmapp</title>
    <script id="microloader" type="text/javascript" src="touch/microloader/development.js"></script>
    <script type="text/javascript" src="phonegap.js"></script>
    <script type="text/javascript" src="PushNotification.js"></script>
   <script type="text/javascript" src="js/index.js"></script>
</head>
<body>
<div id="appLoadingIndicator">
    <div></div>
    <div></div>
    <div></div>
</div>
</body>
</html>

そして、私の app.js ファイルから js/index.js ファイルのプッシュ通知関数を呼び出しています。このように見えます

Ext.application({
    name: 'WinReo',
    requires: [
        'Ext.MessageBox',

    ],


    views: [
        'Login',
       // 'MainMenu',
        'CrmFooter',
        'CrmHead',



    ],
    controllers:[
        'Login',
        'Main',
        'Task',

    ],
    models: [
        'Event',
        "Task"
    ],
    stores: [
        'Events',
        'EventsDueListStore'
        //'Contactsstore'
    ],


    icon: {
        '57': 'resources/icons/Icon.png',
        '72': 'resources/icons/Icon~ipad.png',
        '114': 'resources/icons/Icon@2x.png',
        '144': 'resources/icons/Icon~ipad@2x.png'
    },

    isIconPrecomposed: true,

    startupImage: {
        '320x460': 'resources/startup/320x460.jpg',
        '640x920': 'resources/startup/640x920.png',
        '768x1004': 'resources/startup/768x1004.png',
        '748x1024': 'resources/startup/748x1024.png',
        '1536x2008': 'resources/startup/1536x2008.png',
        '1496x2048': 'resources/startup/1496x2048.png'
    },

    launch: function() {

        Ext.fly('appLoadingIndicator').destroy();
        app.initialize(); // **Please see this line**

    },
    onUpdated: function() {
        Ext.Msg.confirm(
            "Application Update",
            "This application has just successfully been updated to the latest version. Reload now?",
            function(buttonId) {
                if (buttonId === 'yes') {
                    window.location.reload();
                }
            }
        );
    }
});

ここに index.js ファイルがあります

var app = {
    // Application Constructor
    initialize: function() {
        this.bindEvents();
    },
    // Bind Event Listeners
    //
    // Bind any events that are required on startup. Common events are:
    // 'load', 'deviceready', 'offline', and 'online'.
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    // deviceready Event Handler
    //
    // The scope of 'this' is the event. In order to call the 'receivedEvent'
    // function, we must explicity call 'app.receivedEvent(...);'
    onDeviceReady: function() {
        app.receivedEvent('deviceready');
        var pushNotification = window.plugins.pushNotification;
        pushNotification.register(app.successHandler, app.errorHandler,{"senderID":"675077458226","ecb":"app.onNotificationGCM"});

    },
    // Update DOM on a Received Event
    receivedEvent: function(id) {
        var parentElement = document.getElementById(id);
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');

        listeningElement.setAttribute('style', 'display:none;');
        receivedElement.setAttribute('style', 'display:block;');

        console.log('Received Event: ' + id);
    },
    // result contains any message sent from the plugin call
    successHandler: function(result) {
        alert('Callback Success! Result = '+result)
    },
    errorHandler:function(error) {
        alert(error);
    },
    onNotificationGCM: function(e) {
        switch( e.event )
        {
            case 'registered':
                if ( e.regid.length > 0 )
                {
                    console.log("Regid " + e.regid);
                    alert('registration id = '+e.regid);
                    document.write(e.regid);
                }
                break;

            case 'message':
                // this is the actual push notification. its format depends on the data model from the push server
                alert('message = '+e.message+' msgcnt = '+e.msgcnt);
                break;

            case 'error':
                alert('GCM error = '+e.msg);
                break;

            default:
                alert('An unknown GCM event has occurred');
                break;
        }
    }

};

この関数を呼び出す方法がわかりません.その関数にまったくアクセスできず、登録IDを取得できません..正しい方向に私を導いてください..それはsencha touchからphonegap関数を呼び出す方法ですか? 問題が発生しました。この問題の解決を手伝ってください。ありがとう..

4

3 に答える 3

0

問題は、ecb の {アプリケーション名}.app.onNotificationGCM を渡す必要があることです。app.js ファイルを調べて、名前が「MyApp」であると伝えます。次に、MyApp.app.onNotificationGCM になります。うまくいけば、これが役に立ちます!

于 2014-02-04T05:02:21.633 に答える
0

こんにちは、あなたはこれを解決するために管理しましたか、私は解決策を見つけました

コルドバのindex.jsにプッシュ登録コードを追加する代わりに、Sencha のapp.js起動関数に直接追加します。

launch: function() {
    var pushNotification = window.plugins.pushNotification;
    pushNotification.register(this.successHandler, this.errorHandler,{"senderID":"675077458226","ecb":"MyAppName.app.onNotificationGCM"});
 },
 //then followed by your othe functions
 receivedEvent: function(id)
  {
    //code here
  },
 errorHandler:function(error) {
   //code here
   },
 onNotificationGCM: function(e) {
  //code here
  }

また、関数の呼び出し方法、app.successHandlerthis.successHandler変更したことにも注意してください

于 2014-11-19T08:38:30.047 に答える