質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.38%

  • Monaca

    1156questions

    「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

mobile backendのinstallationが登録されない

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,077

cloudspider

score 80

monacaを使ってiOS,Android向けのアプリを開発しています。
プッシュ通知を実装しようと思いmobile backendを利用しているのですが、なかなかうまくいきません。

AndroidのためのAPIキーの設定やiOSのための証明書などドキュメントにかかれてあることは一通り試し、ビルドしてみたのですが、やはりプッシュ通知がうまくいきません。

そこでいろいろ調べてみると、
アプリ起動→「通知を送信します」のアラート→OKをタップ→mobile backendのデータストアのInstallationにデータが追加される

とあるのですが、見てみるとinstallationには何も表示されていません。

何度試してみても表示されないのですが、どこに問題があるのでしょうか。

var ncmb = new NCMB("アプリケーションキー","クライアントキー");
などや
プッシュ通知ドキュメントにある以下のコードも適当に修正し実装されています。(getInstallationId関数をどのタイミングで実行すればよいのかはわかっていません)

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


                // デバイストークンを取得してinstallation登録が行われます
                // ※ aplication_key,client_keyはニフティクラウドmobile backendから発行されたkeyに置き換えてください
                // ※ sender_idは【GCMとの連携に必要な準備】で作成したProjectのProject Numberを入力してください
                window.NCMB.monaca.setDeviceToken(
                     " #####application_key#####",
                     " #####client_key#####",
                     " #####sender_id#####" 
                );

                // 開封通知登録の設定
                // trueを設定すると、開封通知を行う
                window.NCMB.monaca.setReceiptStatus(true);

                alert("DeviceToken is registed");
            },false); 

            function getInstallationId() {
                // 登録されたinstallationのobjectIdを取得します。
                window.NCMB.monaca.getInstallationId(
                    function(id) {
                        alert("installationID is: " + id);
                    }
                );
            }

またアプリ上とmobile backendの連携がとれていることの証拠として、アプリ内のデータベースとしてmobile backendのデータストアを使用しているのですが、しっかり読み込むことができています。

あとはinstallationクラスさえ上手く行けばプッシュ通知の実装ができると思っているのですが、この原因を突き止めるにもとても時間がかかってしまって、また躓いてしまいました。

どなたかなにかわかる方がいらっしゃればご教示願えませんでしょうか
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

開封通知の前にgetInstallationId関数を実行します。
私の場合ObjectIdが1回で取得できない場合がありましたので(インストール後初回起動時)
下記の様な形で実装しています。

        var ncmbTimer = setInterval(function() {
            // ObjectId取得試行
            window.NCMB.monaca.getInstallationId(function(id) {
                if(id) {
                    alert(id);
                    // 取得できたら解除
                    clearInterval(ncmbTimer);
                }
            });
        }, 1000);

実現したいこととは違いますが、ご参考ください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/08/24 13:50

    ご回答ありがとうございます。
    実際に実装してみてmonaca localkit上でのプレビューと、スマホアプリ上のデバッグ機能で試してみましたが、mobile backend上にinstallationは登録されませんでした。

    localkitの方ではコンソールに
    「'cannot read property 'getInstallationId' of undefined」というエラーが毎秒表示されています。

    まだビルドしてアップデートはしていなのですが、これってlocalkitやアプリのプレビューでもmobile backendにinstallationは作成されるのでしょうか。
    よければ教えて頂けるとうれしいです。

    キャンセル

  • 2017/08/24 13:58

    お考えの通り、ビルド後でないとプラグイン(ncmb-push-monaca-plugin)は動作しません。
    なので検証する場合は逐一ビルドをしてください。

    また、上記の回答についでですが、installationに端末登録するものではなく、
    端末登録が完了した場合にObjectIdを取得してくる関数ですので、
    installationが登録される部分はwindow.NCMB.monaca.setDeviceToken実行後になります。

    Monaca上でプラグインの有効化はされていますか?

    キャンセル

  • 2017/09/05 00:34

    返信遅くなりました。すみません。
    monaca上のプラグインは有効化されています。mobile backendのデータベースは利用できています。

    コードを実装してみてビルド、アップデートしてみたところinstallationに1つだけ表示されました。(恐らく自分のではない)
    もう少し調べてみると、mobaile backendのプッシュ通知のドキュメントのandroidとiosのページには、「installationが削除された場合」や「アプリが再インストールされた場合」などがあるのですが、monacaのページには見当たりません。恐らくこの辺が必要なのだと思うのですが、何かわかることがありませんでしょうか。

    先程android(JAVA?)とios(swift?)のその実装のコードを見てjavascriptに書き直せるかなと思ったのですが、両方共しらないのでそれは諦め、新しくmobile backend上にアプリを作成し、キーなどを登録し直してビルドしてappleの承認を待っているところです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.38%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Monaca

    1156questions

    「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。