LoginSignup
5
8

More than 5 years have passed since last update.

iOS ニフティクラウドmobile backendを使ってサイレントプッシュをする

Posted at

サイレントプッシュとは

PUSH通知が来た際にアラートを表示しないやり方です。
アプリ内のコンテンツを任意のタイミングで更新したい時などに使えます。
アラートを表示しないため通知の許可画面が必要ありません。

リモート通知の仕組み

iOSではApple Push Notification service(APNs)を経由しなければなりません。
送信元サーバー→APNs→各デバイスという流れで通知されます。

証明書の取得

Appleの開発者サイトから証明書を取得する必要があります。
詳細はこちらをご確認ください。

ニフティクラウドで設定

新しいアプリの作成
ニフティクラウドダッシュボード上部にある新しいアプリよりアプリを作成します。
スクリーンショット 2016-05-08 14.29.02.png

通知の許可、証明書のアップロード
プッシュ通知の許可と、さきほど取得した証明書のアップロードをします。
詳細はこちらをご確認ください。

Xcodeに実装

SDKのインストール
下記のようなPodfileでインストールできます。

Podfile
pod 'NCMB', :git => 'https://github.com/NIFTYCloud-mbaas/ncmb_ios.git'

APIキーの設定
アプリ設定→アプリ基本→APIキーにあるアプリケーションキーとクライアントキーを設定します。

AppDelegate
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

        NCMB.setApplicationKey("アプリケーションキー", clientKey: "クライアントキー")
        UIApplication.sharedApplication().registerForRemoteNotifications()

        return true
    }

デバイストークン(通知するデバイスの情報)の登録

AppDelegate
    func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
        let installation = NCMBInstallation.currentInstallation()
        installation.setDeviceTokenFromData(deviceToken)
        installation.saveInBackgroundWithBlock { (error) in
            if error == nil {
                print("デバイストークン登録成功")
            }else {
                print("デバイストークン登録失敗")
            }
        }
    }

リモートプッシュを通知
コンテンツの更新処理などをここに書きます。

AppDelegate
    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
        //コンテンツ更新などの何かしらの処理
        if let controller = window?.rootViewController as? ViewController {
            controller.lblDisplay.text = "Silent Push成功"
        }
    }

バックグラウンド中も通知
CapabilitiesのBackground modesをONにして
Remote Notificationを有効化します。

プッシュ通知

ニフティクラウドダッシュボードのプッシュ通知→新しいプッシュ通知を選択します。

  • iOS端末に配信するをチェック
  • 音声ファイル名を空白
  • content-availableを有効にする
  • プッシュ通知を作成するを選択

スクリーンショット 2016-05-08 15.35.42.png
スクリーンショット 2016-05-08 15.39.03.png

iOSデバイスで通知できたら成功です。少し時間がかかります。

プッシュ通知に成功するとニフティクラウドダッシュボードは下記のようになります。
スクリーンショット 2016-05-08 16.31.18.png

最後に

許可画面不要で任意のタイミングでコンテンツの更新ができるのは結構使えるかと思います。
実装もそこまで難しくありません。
ネックなのは1か月でプッシュできる回数が決まっていることです。
無料では100万回までとなっています。
例えば1回のプッシュで10万デバイスに通知すると、残り100万-10万=90万デバイスとなります。

コードをGitHubで公開しておりますのでよろしければ参考にしてください。

5
8
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
5
8