LoginSignup
4
2

More than 5 years have passed since last update.

Swiftでアプリからアプリにプッシュ通知を送って見よう!

Last updated at Posted at 2017-03-30

はじめに

事前準備

動作環境

以下の環境で動作確認をしています。準ずる環境をご用意ください。

  • Mac 10.12.3
  • Xcode 8.2.1
  • プッシュ通知受信用のiPhone6 10.0.1

環境準備

  1. mBaaSのアカウント登録と新規アプリの作成をしてください(参考
  2. 本ドキュメントプッシュ通知配信テスト用にXcode でプロジェクトを作成し、mBaaS iOS SDK の設定と初期化をしてください(★注1)
  3. 上記とは別で、プッシュ通知受信用のiPhoneに、プッシュ通知受信の設定をしたアプリをビルドしておいてください(★注2)

(★注1)
SDKの設定と初期化については以下を参照してください▼
クイックスタート
このプロジェクトは本ドキュメントの動作確認に必要です。
※ここで設定するmBaaS のアプリは必ず ★注2 と同じものを使用してください。
(★注2)
プッシュ通知受信の設定をしたアプリをビルド方法は以下を参照してください▼
【iOS Swift3】プッシュ通知を送ろう!
※ここで設定するmBaaS のアプリは必ず ★注1 と同じものを使用してください。

プッシュ通知を送る[基本形]

下記コードをコピーして、プッシュ通知配信テスト用に用意したXcode プロジェクト(環境準備の2.)の、AppDelegate に記入しSimulator で実行すると簡単に動作確認が可能です。(環境準備3.に配信されることを確認できます)

Swift3
let push = NCMBPush()
let data_iOS = ["contentAvailable" : false, "badgeIncrementFlag" : true, "sound" : "default"] as [String : Any]
push.setData(data_iOS)
push.setPushToIOS(true)
push.setTitle("-----Title-----")
push.setMessage("-----Message-----")
push.setImmediateDeliveryFlag(true) // 即時配信
push.sendInBackground { (error) in
    if error != nil {
        // プッシュ通知登録に失敗した場合の処理
        print("NG:\(error)")
    } else {
        // プッシュ通知登録に成功した場合の処理
        print("OK")
    }
}

最小限のプッシュ通知

プッシュ通知を配信するために、最小限必要なコードは以下の2点です。
Titleやmessageが無くてもプッシュ通知は配信が可能です。(その場合は、サイレントプッシュとなります)

Swift3
// プッシュ通知を生成
let push = NCMBPush()
/* 配信OS */
push.setPushToIOS(true)
/* 配信タイミング */
push.setImmediateDeliveryFlag(true) // 即時配信
/* ↓その他設定がある場合はここに追記↓ */

/* ↑その他設定がある場合はここに追記↑ */
// 配信処理
push.sendInBackground { (error) in
    if error != nil {
        // プッシュ通知登録に失敗した場合の処理
    } else {
        // プッシュ通知登録に成功した場合の処理
    }
}

以降に案内しているプッシュ通知の追加詳細設定をする場合は、

/* ↓その他設定がある場合はここに追記↓ */

/* ↑その他設定がある場合はここに追記↑ */

ここに追記することで、設定できます◎

プッシュ通知の設定項目

ここからはコントロールパネル画面と照らし合わせて表示しています◎

タイトルとメッセージ

Titleやmessageは以下用に設定できます。
-----Title-----,-----Message-----の部分を自由に変更して試してみましょう。

Swift3
/* タイトル */
push.setTitle("-----Title-----")
/* メッセージ */
push.setMessage("-----Message-----")
  • コンパネから配信する場合

029.png

時間指定配信設定

即時配信(setImmediateDeliveryFlag)または、指定配信(setDeliveryTime)いずれかを必ず指定する必要があります。

Swift3
/* 即時配信 */
push.setImmediateDeliveryFlag(true)
  • コンパネから配信する場合

030.png

Swift3
/* 配信日時指定 */
// 例) 日時指定 ※今より未来を設定
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
let deliveryTime = formatter.date(from: "2017/03/31 15:30:00")
push.setDeliveryTime(deliveryTime)
  • コンパネから配信する場合の設定

031.png

Swift3
// 例) 今から3分後
let deliveryTime = Date(timeIntervalSinceNow: 3*60)
push.setDeliveryTime(deliveryTime)

  • 上記はコンパネからは設定できません

配信期限設定

Swift3
/* プッシュ通知の配信日時から設定したインターバル後を有効期限に設定 */
// 1日後
push.expire(afterTimeInterval: "1day")
// 1時間後
// push.expire(afterTimeInterval: "1hour")
  • コンパネから配信する場合の設定

038.png
040.png

Swift3
/* プッシュ通知の有効期限を設定 */
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
let expirationDate = formatter.date(from: "2017/03/31 15:30:00")
push.expire(at: expirationDate)
  • コンパネから配信する場合の設定

041.PNG

ちなみに、デフォルトでは10日間となっています。コンパネは以下の状態です。

039.png

リッチプッシュ設定

Swift3
push.setRichUrl("http://mb.cloud.nifty.com/")
  • コンパネから配信する場合の設定

032.png

注意:リッチプッシュは受信する端末側にも別途実装が必要です

参考:受信アプリ側の設定
https://github.com/natsumo/SwiftRichPushApp#リッチプッシュの取得

JSON設定(ペイロード)

Swift3
push.setUserSettingValue(["key1" : "value1", "key2" : "value2"]);
  • コンパネから配信する場合の設定

033.PNG

注意:JSONは受信する端末側にも別途実装が必要です

参考:受信アプリ側でのJSON取得方法
https://github.com/natsumo/SwiftPayloadApp_iOS10#ペイロード取得

絞り込み配信設定

Swift3
/* installation を指定して絞り込み */
let query = NCMBInstallation.query()
query?.whereKey("objectId", equalTo: "***objectId***")
push.setSearchCondition(query)
  • コンパネから配信する場合の設定

036.PNG

Swift3
/* アプリのバージョンが2.0より古い端末に絞り込み */
let query = NCMBInstallation.query()
// query?.whereKey("appVersion", lessThan: "2.0")
push.setSearchCondition(query)
  • コンパネから配信する場合の設定

037.PNG

ちなみに、デフォルトでは全配信となります。コンパネは以下の状態です。

035.PNG

パーミッション設定

Swift3
/* 準備中 */

[おまけ] Android端末に配信する場合

Android端末へ配信する場合は、以下のコードで配信登録が可能です。

Swift3
let push = NCMBPush()
let data_Android = ["action" : "ReceiveActivity", "title" : "testPush"] as [String : Any]
push.setData(data_Android)
push.setDialog(true)
push.setPushToAndroid(true)
push.setTitle("-----Title-----")
push.setMessage("-----Message-----")
push.setImmediateDeliveryFlag(true) // 即時配信
push.sendInBackground { (error) in
    if error != nil {
        // プッシュ通知登録に失敗した場合の処理
        print("NG:\(error)")
    } else {
        // プッシュ通知登録に成功した場合の処理
        print("OK")
    }
}

参考:Android端末でのプッシュ通知受信設定は以下をご参考ください
【Android】プッシュ通知機能!
※APIキーは必ず同じものを使用しください

参考

4
2
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
4
2