7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NIFTYAdvent Calendar 2017

Day 13

mbassを使ってアプリから特定の端末へプッシュ通知を配信する方法

Last updated at Posted at 2017-12-13

この記事はNIFTY Advent Calendar 2017の13日目の記事です。
12日目は@machinanetteさんの「RSSリーダーはやめてGoogle Apps Scriptでchatworkにニュースを流してみた」でした。

#はじめに

Qiitaさんはよく利用させて頂いていますが、書く方は初めてです:relaxed:
そのため拙い内容ですが、我が子の発表会を見るような温かい目でお読みいただけると嬉しいです。

書く内容を『Appleに6回連続リジェクトを食らってリリースを諦めた話』にするか迷いましたが
生産性がないと判断し本記事を採用しました:smirk:

この記事では『mbassを使ってアプリから特定の端末へプッシュ通知を配信する方法』をご紹介します。
mbaasにはニフクラ mobile backendを利用しています。

単にプッシュ通知を配信する記事はいくつか見当たりましたが、
特定の端末を指定して配信する方法を詳しく書いた記事がなかったので今回記載するにあたりました。

#事前準備

まず上記の設定を行い、会員登録とプッシュ通知の両方が使用できる状態にしてください
それぞれ右に記載した記事が大変参考になります

#本題

プッシュ通知を特定の端末に送るには送りたい端末の条件を指定する必要があります
その条件に会員登録の情報を利用します
この会員登録とプッシュ通知を組み合わせることで特定の端末への配信が実現できます

実際の実装手順は以下の通りです。

  • 会員登録をする
  • 会員登録後ログイン時、プッシュ通知配信に利用する「installation」に会員情報の「useId」を加える
  • 「installation」が持つ「useId」の一致を元にプッシュ通知を配信する

以下に詳細なコードを記載します

① 会員登録(ここではメールアドレス登録を例に記載)

let userDataObject = NCMBObject(className: "UserData")
    userDataObject?.setObject(self.userIdTextField.text,forKey:"userId")
    userDataObject?.setObject(self.mailAddressTextField.text,forKey:"mailAddress")
    userDataObject?.saveInBackground({(error) in
        if error != nil {print("Save error : ",error!)}
    })
    NCMBUser.requestAuthenticationMail(self.mailAddressTextField.text, error: nil)

②「installation」に会員情報の「useId」を加える

let installation = NCMBInstallation.current()
installation?.setObject(true, forKey: "loginFlag")
//PushのためにユーザIDを追加
installation?.setObject(self.appDelegate.userDefaults.string(forKey: "userId"), forKey: "userId")
installation?.setObject(self.appDelegate.userDefaults.string(forKey: "mailAddress"), forKey: "mailAddress")
// 端末情報をデータストアに登録
installation?.saveInBackground({ (error) in
    if error != nil {
        // 端末情報の登録に失敗した時の処理
        let err = error! as NSError
        if (err.code == 409001){
            // 失敗した原因がデバイストークンの重複だった場合
            // 端末情報を上書き保存する
            self.updateExistInstallation(currentInstallation: installation!)
        }else{
            // デバイストークンの重複以外のエラーが返ってきた場合
        }
    } else {
        // 端末情報の登録に成功した時の処理
    }
})

③「installation」の「useId」の一致を条件にプッシュ通知を配信

let push = NCMBPush()
let data_iOS = ["contentAvailable" : false, "badgeIncrementFlag" : true, "sound" : "default"] as [String : Any]
push.setData(data_iOS)
push.setPushToIOS(true)
push.setTitle("hogehoge")
push.setMessage("fugafuga")
push.setImmediateDeliveryFlag(true) // 即時配信
/* installation を指定して絞り込み */
let query = NCMBInstallation.query()
query?.whereKey("userId", equalTo: id)
query?.whereKey("loginFlag", equalTo: true)

push.setSearchCondition(query)
push.sendInBackground { (error) in
    if error != nil {
        // プッシュ通知登録に失敗した場合の処理
        print("NG:\(String(describing: error))")
    } else {
        // プッシュ通知登録に成功した場合の処理
        print("OK")
    }
}

アプリからの配信自体は主にこちらを参考にさせて頂きました。
Swiftでアプリからアプリにプッシュ通知を送って見よう!

#まとめ

以上になります
mbaasの2つの機能を使うことで簡単に特定の端末にプッシュ通知を送ることができます
みなさんも是非アプリにプッシュ通知をいれてみてください!

明日の記事は@harimmasさんです。よろしくお願いします!

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?