Navigation Menu

Skip to content
This repository has been archived by the owner on Apr 1, 2024. It is now read-only.

NIFCLOUD-mbaas/ObjcSegmentPushApp_iOS10

 
 

Repository files navigation

【iOS Objective-C】個別、グループごとに絞り込んでプッシュ通知を送ろう!

画像1

概要

  • ニフクラ mobile backendの『プッシュ通知』機能を利用したサンプルプロジェクトです!
  • 全配信だけでなく、ユーザー(端末)のグループで絞り込んでプッシュ通知を送れます。たとえば、appleとorangeとbananaという重複可能なグループがあったときに、appleに属しているユーザー(端末)にだけプッシュ通知を送ることが出来ます。
  • 簡単な操作ですぐに ニフクラ mobile backendの機能を体験いただけます!!

目次

ニフクラ mobile backendって何??

スマートフォンアプリのバックエンド機能(プッシュ通知・データストア・会員管理・ファイルストア・SNS連携・位置情報検索・スクリプト)が開発不要、しかも基本無料(注1)で使えるクラウドサービス!

注1:詳しくはこちらをご覧ください

画像2

動作環境

  • Mac OS 12.5.1 (Monterey)
  • Xcode Version 14.0
  • iPhone X (iOS 16)
  • このサンプルアプリは、実機ビルドが必要です

※上記内容で動作確認をしています

プッシュ通知の仕組み

  • ニフクラ mobile backendのプッシュ通知は、iOSが提供している通知サービスを利用しています
  • iOSの通知サービス APNs(Apple Push Notification Service)

画像1

  • 上図のように、アプリ(Xcode)・サーバー(ニフクラ mobile backend)・通知サービス(APNs)の間でやり取りを行うため、認証が必要になります
  • 認証に必要な鍵や証明書の作成は作業手順の「0.プッシュ通知機能使うための準備」で行います

作業の手順

  • これから、次のような流れで作業を行います(少し長いので休憩しつつ行うことをオススメします)
  1. プッシュ通知機能を使うための準備
  2. [ニフクラ mobile backendの会員登録とログイン→アプリ作成と設定](#2-ニフクラ -mobile-backendの会員登録とログインアプリ作成と設定)
  3. GitHubからサンプルプロジェクトのダウンロード
  4. Xcodeでアプリを起動
  5. 実機ビルド
  6. 動作確認
  7. プッシュ通知を送りましょう!

1.プッシュ通知機能を使うための準備

【iOS】プッシュ通知の受信に必要な証明書の作り方(開発用)

  • 上記のドキュメントをご覧の上、必要な証明書類の作成をお願いします
  • 証明書の作成にはApple Developer Programの登録(有料)が必要です

画像i002

2. ニフクラ mobile backendの会員登録とログイン→アプリ作成と設定

  • 上記リンクから会員登録(無料)をします。登録ができたらログインをすると下図のように「アプリの新規作成」画面が出るのでアプリを作成します   画像3  
  • アプリ作成されると下図のような画面になります
  • この2種類のAPIキー(アプリケーションキーとクライアントキー)はXcodeで作成するiOSアプリにニフクラ mobile backendを紐付けるために使用します   画像4  
  • 続けてプッシュ通知の設定を行います
  • ここで⑦APNs用証明書(.p12)の設定も行います

画像5    

3. GitHubからサンプルプロジェクトのダウンロード

 

  • 下記リンクをクリックしてプロジェクトをダウンロードをMacにダウンロードします

  • ObjcSegmentPushApp_iOS

4. Xcodeでアプリを起動

  • ダウンロードしたフォルダを開き、「ObjcSegmentPushdApp.xcworkspace」をダブルクリックしてXcode開きます(白い方です)

画像09

画像i25

  • 「ObjcSegmentpushApp.xcodeproj」(青い方)ではないので注意してください!

画像08

5. APIキーの設定

  • AppDelegate.mを編集します
  • 先程ニフクラ mobile backendのダッシュボード上で確認したAPIキーを貼り付けます

画像07

  • それぞれYOUR_NCMB_APPLICATION_KEYYOUR_NCMB_CLIENT_KEYの部分を書き換えます
  • このとき、ダブルクォーテーション(")を消さないように注意してください!
  • 書き換え終わったらcommand + sキーで保存をします

6. 実機ビルド

  • 始めて実機ビルドをする場合は、Xcodeにアカウント(AppleID)の登録をします
  • メニューバーの「Xcode」>「Preferences...」を選択します
  • Accounts画面が開いたら、左下の「+」をクリックします
  • Apple IDとPasswordを入力して、「Add」をクリックします   図F2.png  
  • 追加されると、下図のようになります。追加した情報があっていればOKです
  • 確認できたら閉じます。   図F3.png  
  • 「TARGETS」 >「General」を開きます

画像14

  • 「Identity」>「Bundle Identifier」を入力します

  • 「Bundle Identifier」にはAppID作成時に指定した「Bundle ID」を入力してください

  • 「Signing(Debug)」>「Provisioning Profile」を設定します

  • 今回使用するプロビジョニングプロファイルをプルダウンから選択します

  • プロビジョニングプロファイルはダウンロードしたものを一度__ダブルクリック__して認識させておく必要があります(プルダウンに表示されない場合はダブルクリックを実施後設定してください)

  • 選択すると以下のようになります 画像15

  • 「TARGETS」>「Capabilities」を開き、「Push Notifications」を__ON__に設定します

  • 設定すると以下のようになります 画像16  

  • 設定は完了です

  • lightningケーブルで登録した動作確認用iPhoneをMacにつなぎます

  • 実機ビルドが初めての場合はこちらをご覧いただき、実機ビルドの準備をお願いします

  • Xcode画面で左上で、接続したiPhoneを選び、実行ボタン(さんかくの再生マーク)をクリックします

  • ビルド時にエラーが発生した場合の対処方法

  • Xcodeのバージョンが古い場合#import <NCMB/NCMB.h>にエラーが発生し、上手くSDKが読み込めないことがあります

6.動作確認

  • インストールしたアプリを起動します
  • 注意!!! プッシュ通知の許可を求めるアラートが出たら、必ず許可してください!
  • 起動されたらこの時点でデバイストークンが取得されます
  • 注意! デバイストークンが取得されて画面に表示されるまでに少しの時間がかかります
  • ニフクラ mobile backendのダッシュボードで「データストア」>「installation」クラスを確認してみましょう!   画像12

7.特定のグループに向けてプッシュ通知を送りましょう!

まずは全配信のプッシュ通知を送る

  • ニフクラ mobile backendのダッシュボードで「プッシュ通知」>「+新しいプッシュ通知」をクリックします
  • プッシュ通知のフォームが開かれます
  • 必要な項目を入力して「プッシュ通知を作成する」をクリックします

画像13  

  • 端末を確認しましょう!
  • 少し待つとプッシュ通知が届きます!!!

絞り込んで配信

今回は、ユーザーの属性を「apple」、「orange」、「banana」の3つのグループに分けます(グループは重複していても良いとします)。「apple」か「orange」、どちらかのグループに入っているユーザーに対してプッシュ通知を送ってみましょう。

  • アプリをまず起動しましょう。初期状態はこのような状態になっており、channelsの編集と新しいフィールドの追加ができます
  • "channnels"は、mBaaSに最初から用意されているフィールドで、任意の配列を入れることができます。今回はグループ分けに使っていますが、使い方は自由です

画像cap1

  • channelsに、"apple,orange"と入れてみましょう

  • channelsは,で区切ることで、配列の要素として処理することができます

  • 同時に新しいフィールドの追加もしてみましょう。"favorite"というフィールドを作り、中身には"music"と入れてみました。こうすることで、ユーザーに新しい属性を付与することができるようになります!

  • 編集が完了したら更新ボタンをタップして下さい

画像cap2

  • 送信後、viewが自動でリロードされ、追加・更新が行われていることがわかります。追加したフィールドは後から編集することが可能です

画像cap3  

  • ダッシュボードから、更新ができていることを確認してみましょう!

画像cap4

  • 端末側で起動したアプリは一度閉じておきます
いよいよグループ配信
  • プッシュ通知を作成する際に、「配信端末」を「installationクラスから絞り込み」に設定します
  • channelsに「apple」と「orange」が含まれている人だけにプッシュ通知を送る場合は、次のように設定します

画像cap5

  • 作成をクリックし、少し待つと端末にプッシュ通知が届きます。・・・届きましたか??

画像cap6

  • 作成したプッシュ通知の「SearchCondition」を開くとどのように絞りこまれているか確認することができます

画像7

  • ちなみに、「banana」で絞り込もうとした場合はが配信端末がなしになります。試して確認してみましょう!

画像8

まとめると

  • 上のようにinstallationの絞り込み設定をしてプッシュ通知を作成することで、特定のグループや個人に対してプッシュ通知を送ることができます!!
  • 「favorite」が「music」のユーザーにだけ配信や、ある特定のユーザーにだけ配信ということも出来ます。
  • 様々な絞り込みを試してみましょう!

解説

サンプルプロジェクトに実装済みの内容のご紹介

SDKのインポートと初期設定

deviceToken取得ロジック

  • AppDelegate.mdidFinishLaunchingWithOptionsメソッドにAPNsに対してデバイストークンの要求するコードを記述し、デバイストークンが取得された後に呼び出されるdidRegisterForRemoteNotificationsWithDeviceTokenメソッドを追記をします
  • デバイストークンの要求はiOSのバージョンによってコードが異なります  
#import "AppDelegate.h"
#import <NCMB/NCMB.h>
#import <UserNotifications/UserNotifications.h>

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    //********** APIキーの設定とSDKの初期化 **********
    [NCMB setApplicationKey:@"YOUR_APPLICATION_KEY"
                  clientKey:@"YOUR_CLIENT_KEY"];

    if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){10, 0, 0}]){

        //iOS10以上での、DeviceToken要求方法
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert |
                                                 UNAuthorizationOptionBadge |
                                                 UNAuthorizationOptionSound)
                              completionHandler:^(BOOL granted, NSError * _Nullable error) {
                                  if (error) {
                                      return;
                                  }
                                  if (granted) {
                                      //通知を許可にした場合DeviceTokenを要求
                                      [[UIApplication sharedApplication] registerForRemoteNotifications];
                                  }
                              }];
    } else if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){8, 0, 0}]){

        //iOS10未満での、DeviceToken要求方法

        //通知のタイプを設定したsettingを用意
        UIUserNotificationType type = UIUserNotificationTypeAlert |
        UIUserNotificationTypeBadge |
        UIUserNotificationTypeSound;
        UIUserNotificationSettings *setting;
        setting = [UIUserNotificationSettings settingsForTypes:type
                                                    categories:nil];

        //通知のタイプを設定
        [[UIApplication sharedApplication] registerUserNotificationSettings:setting];

        //DeviceTokenを要求
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    } 

    return YES;
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    //端末情報を扱うNCMBInstallationのインスタンスを作成
    NCMBInstallation *installation = [NCMBInstallation currentInstallation];
    //Device Tokenを設定
    [installation setDeviceTokenFromData:deviceToken];
    //端末情報をデータストアに登録
    [installation saveInBackgroundWithBlock:^(NSError *error) {
        if(!error){
            //端末情報の登録が成功した場合の処理
        } else {
            //端末情報の登録が失敗した場合の処理
        }
    }];
}

installation取得ロジック

  • ViewController.mgetInstallationメソッド内でinstallationクラスを生成しています
  • allKeysで、フィールドを全件取得できます
  • objectForKeyで、指定したフィールドの中身を取り出すことができます
    NCMBInstallation *installation = [NCMBInstallation currentInstallation];

    //ローカルのinstallationをfetchして更新
    [installation fetchInBackgroundWithBlock:^(NSError *error) {
        if(!error){
            //端末情報の取得が成功した場合の処理

        } else {
            //端末情報の取得が失敗した場合の処理
            NSLog(@"取得成功:%@",installation);
            NSString *favorite = [installation objectForKey:@"favorite"];
        }
    }];

installation更新ロジック

  • postInstallationメソッド内で行います。
  • setObjectで更新内容とフィールド名を指定し、saveInBackgroundWithBlockで更新します
        
    NCMBInstallation *installation = [NCMBInstallation currentInstallation];

    [installation setObject:更新内容 forKey:フィールド名];

    [installation saveInBackgroundWithBlock:^(NSError *error) {
        if(!error){
            //端末情報の更新が成功した場合の処理

        } else {
            //端末情報の更新が失敗した場合の処理

        }
    }];
  • 更新後は自動でviewのリロードが実行され、更新内容が書き換わります

参考

  • 同じ内容の【Swift】版もご用意しています
  • Swift版

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Objective-C 96.5%
  • C 3.1%
  • Ruby 0.4%