NIFCLOUD-mbaas / UserCommunity

ニフクラ mobile backend ユーザーコミュニティ
https://mbaas.nifcloud.com/
82 stars 18 forks source link

window.NCMB.monacaオブジェクトがAndroidでのみundefinedエラー #1298

Open rhsmz opened 2 years ago

rhsmz commented 2 years ago

Monaca + vue + Framework7でwindow.NCMB.monaca.getInstallationIdを動かした際にwindow.NCMB.monacaがundefinedエラーになります。 iOSでは正常に動作しているため、CordovaプラグインとJSコンポーネントが悪さしているのかなと思い、再インストールしてみましたが動作しません。 解決方法が思いつかないので、アドバイスお願いします

ncmb-push-monaca-plugin: v3.1.1 ncmb.min.js : v3.1.3

以下のメソッド(ncmbInitialize)をApp.vueのmounted() にてthis.$root.ncmbInitialize()で呼び出してます。

app.js (methods)
    ncmbInitialize(){  
        this.getInstallationId();
        this.getDeviceToken();
        // [NCMB] プッシュ通知受信時のコールバックを登録します
        window.NCMB.monaca.setHandler (function(jsonData){
            // 送信時に指定したJSONが引数として渡されます
            console.debug("callback:" + JSON.stringify(jsonData));
        });

        /* 端末登録成功時の処理 */
        var successCallback = function () {
            if (this.objectId != null) {
                this.setupInstallation();
            } else {
                console.debug("成功しました。");
                this.getInstallationId();
                this.getDeviceToken();
            }
        };

        /* 端末登録失敗時の処理処理 */
        var errorCallback = function (err) {
            console.error("失敗しました:" );
        };

        // [NCMB] デバイストークンを取得しinstallationに登録
        window.NCMB.monaca.setDeviceToken( applicationKey, clientKey, successCallback, errorCallback );

        // 開封通知登録の設定
        // trueを設定すると、開封通知を行う
        window.NCMB.monaca.setReceiptStatus(true);
    },
goofmint commented 2 years ago

処理を行っているのは deviceready のイベント後になるでしょうか? deviceready の実行後でないと、Cordovaプラグインが初期化されていない(利用できない)状態の可能性があります。

mountedはDOMがマウントされたタイミングで実行されるので、少し早いのかも知れません。試しに、こうすると window.NCMB.monaca は存在するでしょうか?

// ↓これは適当です
mounted() {
  document.addEventListener('deviceready', e => {
    console.log(window.NCMB.monaca);
  });
}
rhsmz commented 2 years ago

開発しているプロジェクトで試してみると存在してないですね。 一旦Monaca で新規プロジェクトFramework7+vueのバージョン上がってたのでそちらでも試したのですが、こちらではwindow.NCMB.monacaは存在できていました。 代わりにJSコンポーネントのNCMBが‘Class extends value undefined is not a constructor or null‘エラー吐いて起動エラーしますね。。。

goofmint commented 2 years ago

JS/CSSコンポーネントの追加と削除でNCMBを追加していますか?Cordovaプラグインしか入れていないとか?