NIFCLOUD-mbaas / UserCommunity

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

プッシュ通知でアップデートがされない #330

Open e-ishi opened 8 years ago

e-ishi commented 8 years ago

user_name、user_birthdayフィールドのデータをアップデートしたいが出来ません。 以下のプログラムです。 また、user_name、user_birthdayフィールドはncmb上に作成しております。 mmonacaを使用しております。 記述違いなどご教授頂けると幸いです。

            function startInstallationRegistration() {
                //alert("test");
            // プッシュ通知受信時のコールバックを登録します
                window.NCMB.monaca.setHandler
                (
                    function(jsonData){
                        // 送信時に指定したJSONが引数として渡されます 
                        alert("callback :::" + JSON.stringify(jsonData));
                    }
                );

                window.NCMB.monaca.setDeviceToken(  "XXX",  "XXX",  "XXX" );//実際はキーが入る
                // 開封通知登録の設定
                // trueを設定すると、開封通知を行う
                window.NCMB.monaca.setReceiptStatus(true);
                alert("DeviceToken is registed");

                // 登録されたinstallationのobjectIdを取得します。
                window.NCMB.monaca.getInstallationId(
                    function(id) {
                        alert("window.NCMB.monaca.getInstallationId");
                        var user_name       = "";
                        var user_birthday   = "";
                        user_name = document.getElementById("user_name").value;
                        user_birthday = document.getElementById("user_birthday").value;
                        alert("user_name"+user_name);
                        alert("user_birthday"+user_birthday);
                        alert("id"+id);                             //←ここまでアラートが表示される
                        //サーバーへの更新実施
                        ncmb.Installation.fetchById(id)
                        .then(function(installation){
                            alert("ncmb.Installation.fetchById");               //←ここ以降のアラートは表示されずuser_nameなどの更新もされない
                            alert("id"+id);
                            ////端末のuser_nameの値を設定
                            installation.set("user_name", user_name);
                            ////端末のuser_birthdayの値を設定
                            installation.set("user_birthday", user_birthday);
                            alert("installation.set");
                            return installation.update();
                        })
                        .then(function(installation){
                            // 更新後の処理
                            alert("登録完了");
                          })
                         .catch(function(err){
                            // エラー処理
                            alert("エラー発生");
                        });
                    }
                );
            }
goofmint commented 8 years ago

ncmb.Installation.fetchById で thenに流れていないのかなと思うので、catchをつけてみてはどうでしょう?

ではなく、

ならエラーが返ってくるかも知れません。後はMonacaアプリをデバッガービルドにすればSafariやGapDebugなどでデバッグができるかなと。

e-ishi commented 8 years ago

then catch then にしましたがエラーは表示されませんでした。 ncmb.Installation.fetchById(id)の「ncmb」はどこかで宣言しなくてもよいのでしょうか? 見当違いでしたらすみません

ニフティクラウド mobile backend用テンプレートを使用し、上記のjsを追加しています。 プッシュ通知は受け取れます。

goofmint commented 8 years ago

ncmbはNCMBのJavaScript SDKを読み込んだ上で、 var ncmb = new NCMB(application_key, client_key); で使えるようになります。プッシュ通知用プラグインとは別で読み込む必要があります。

e-ishi commented 8 years ago

ありがとうございます。 ncmbを宣言し、他も少し変更してみました。 しかし前回と同じく ncmb.Installation.fetchById(id) .then(function(installation){ からうごかなくなります。

goofmint commented 8 years ago

一つずつデバッグするのが良いかと思います。ncmbがあるか、ncmb.Installation、ncmb.Installation.fetchByIdがあるかといった具合です。

e-ishi commented 8 years ago

ncmbはobjectなのにncmb.Installationがundefinedだったのでncmb-2.0.0.min.jsがあやしいと思い、いろいろ試したら動くようになりました。 ありがとうございました。

詳細 今回monacaの”ニフティクラウド mobile backend用テンプレート” をベースに開発しており、ncmb.jsがncmb-2.0.0.min.jsでした。 ncmb.jsの更新履歴を確認したところ 「v2.0.1 追加  Installationクラスを追加しました。プッシュ配信端末情報の取得・変更・削除が可能になります。」 とありました。

最新の2.0.2のncmb.min.jsをダウンロードして使用したところ動くようになりました。

goofmint commented 8 years ago

良かったです!

e-ishi commented 8 years ago

前回解決したものはandroid4.2.2でした ひきつづきandroid4.4.2とios9.2で動作確認をしたところ、上記の解決前と同じように ncmb.Installation.fetchById(id).then(function(installation){ でエラーになりました。 window.NCMB.monaca.setDeviceTokenへ登録はできているのでプッシュ通知は使用できますが、その他の絞り込みに使用する予定のフィールドの取得、更新ができません。

.catch(function(err) のerrの内容は 「SecurityError:Refused to connect to 'https://mb.api.cloud.nifty.com/2013-09-01/installations/XXトークンXX' because it violates the document's Content Security Policy.」

どなたかご教示ください。

e-ishi commented 8 years ago

追記 セキュリティーポリシーのメタタグ部分です。関係あるかわかりませんが

e-ishi commented 8 years ago

タグが消えました もう一度 <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline';">

e-ishi commented 8 years ago

セキュリティーポリシーのメタタグをコメントアウトしたらうごきました。 タグを解析してみます。