プッシュ
    • PDF

    プッシュ

    • PDF

    記事の要約

    最新のコンテンツが反映されていません。早急にアップデート内容をご提供できるよう努めております。最新のコンテンツ内容は韓国語ページをご参照ください。

    Classic/VPC環境で利用できます。

    開発者がサーバまたはクラウドからモバイルデバイスに信頼できて効率的な方法でメッセージを送信できるようにします。プッシュを使用すると、通知メッセージ(システムがユーザーに表示できるメッセージ)とデータメッセージ(アプリが処理するキーと値のペアデータ)をモバイルアプリやウェブアプリに送信できます。プッシュは、iOS、Android、ウェブアプリケーションなど、さまざまなプラットフォームをサポートします。

    主な機能

    • さまざまなメッセージ送信: 通知メッセージやデータメッセージを含むさまざまなタイプのメッセージを送信できます。
    • 大規模メッセージング: 数百万人のユーザーに同時にメッセージを送信できるため、大規模アプリケーションの効率的なメッセージ送信が可能です。
    • さまざまなプラットフォームに対応: iOS、Android、ウェブアプリケーションなどさまざまなプラットフォームからメッセージを受信できます。
    • 高度なメッセージングオプション: メッセージの優先順位設定、寿命(lifetime)設定、トピックベースのサブスクリプション、条件付きメッセージ送信などの高度な機能を提供します。

    ダッシュボードの設定

    FCMプッシュキーの作成方法

    1. Firebase Console > プロジェクトの設定 > クラウドメッセージング > サービスアカウント管理をクリックします。
      ko-gamepot3-push01.png

    2. Google Cloud > サービスアカウント > 作成済みのメールアカウントを選択します。
      ko-gamepot3-push02.png

    3. キー > キーの追加 > 新しいキーを作成 > キーのタイプは「JSON」にして [作成] ボタンをクリックします。

      • 作成済みのキーがあれば、そのファイルを使用しても構いません。
        ko-gamepot3-push03.png

    APNS認証キーの作成方法

    1. Apple Developerサイトにログイン > Certificates, IDs & Profiles > キーを選択 > [+] ボタンをクリックしてキーを新規作成します。

      • プッシュの認証キーは2個まで作成できます。
        ko-gamepot3-push04.png
    2. Key Nameを入力し、Apple Push notifications service(APNs)を有効化します。
      ko-gamepot3-push05.png

    3. [Register] ボタンをクリックして認証キーを発行します。
      ko-gamepot3-push06.png

    4. Key IDを確認してダウンロードします。

      • ダウンロードされたファイルの拡張子は.p8です。
      • Keyファイルは一度だけダウンロードできます。
        ko-gamepot3-push07.png

    ダッシュボードキーの設定方法

    • プロジェクトの設定 - 連携 - Google Android (FCM) Configuration

      • SenderID: Firebaseコンソール > プロジェクトの設定 > クラウドメッセージング > 送信者 ID
      • Private Key (json file): FCMプッシュキーの作成方法で作成した JSONファイルをメモ帳やテキストエディタのようなプログラムで開き、全体内容をコピーして登録します。
    • プロジェクトの設定 - 連携 - Apple iOS (APNs) Configuration

      • Certificate: APNS認証キーの作成方法で作成した.p8ファイルをメモ帳やテキストエディタのようなプログラムで開き、全体内容をコピーして登録します。
      • Key ID: APNS認証キーの作成方法で作成した.p8ファイルの Key IDを登録します。
      • Team ID: Apple Developerサイト「メンバーシップの詳細情報」のチーム IDを入力します。
      • Bundle ID: アプリパッケージの Bundle Identifierを入力します。

    プッシュの設定方法 - モバイル

    1. Firebaseプロジェクトの設定

      • Firebaseコンソール(console.firebase.google.com)でプロジェクトを作成します。
      • 作成されたプロジェクトにアプリケーション(Androidまたは iOS)を追加します。
      • アプリケーションに必要な Firebase設定ファイル(google-services.jsonまたはGoogleService-Info.plist)をダウンロードし、GAMEPOTダッシュボードの設定に追加します。
    2. FCM SDKに追加

      • Androidの場合、(Module : app)と(Module : project)のそれぞれの build.gradle.ktファイルに定義を追加します。
    // (Module : app)の build.gradle.kts
    plugins {
    ...
        id("com.google.gms.google-services")
    }
    
    dependencies {
    ...
        implementation("com.google.firebase:firebase-messaging-ktx:23.2.1")
    }
    
     // (Module : project)の build.gradle.kts
    plugins {
        ...
        id("com.google.gms.google-services") version "4.3.15" apply false
    }
    
    • iOSの場合、CocoaPodsを使ってFirebase/Messaging podをインストールします。
    1. プッシュ通知用権限のリクエスト(iOS)

      • iOSアプリの場合、ユーザーからプッシュ通知を受け取る権限をリクエストする必要があります。UNUserNotificationCenterを使ってリクエストできます。
    2. デバイストークンの登録とメッセージの受信

      • アプリがインストールされて実行されると、FCM SDKはアプリインスタンスに対する固有のトークンを作成します。このトークンをサーバに登録すると特定のデバイスにメッセージを送信できます。
      • メッセージ受信のためにアプリケーションにリスナーを実装します。

    FCMを使用すると、アプリケーションへのユーザーエンゲージメントを高め、重要な情報を迅速に配信し、さまざまなメッセージ送信シナリオをサポートするカスタマイズされた通知システムを構築できます。FCMは、開発者がクラウドメッセージングを簡単に統合・管理できるように、さまざまなツールと APIを提供します。

    iOS用コードの追加

    AppDelegateに以下のコードを追加します。

    import NBase
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        // プッシュ使用パーミッションの許可をリクエスト
        registerForRemoteNotifications()
        return true
    }
    func registerForRemoteNotifications() {
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
            if granted {
                DispatchQueue.main.async {
                    UIApplication.shared.registerForRemoteNotifications()
                }
            } else {
                print("The push notification permission has been denied")
            }
        }
    }
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        let token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
        // トークンをサーバに送信して保存したり、使用したりします。
        NBase.setPushToken(token: token)
    }
    
    func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
        // プッシュ通知を登録できません。エラー: \(error.localizedDescription)
        NBase.setPushToken(token: "")
    }
    

    Objective-Cプロジェクトの場合、AppDelegateに以下のコードを追加します。

    #import "[ProjectName]-Swift.h"
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        center.delegate = self;
        
        [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge)
                             completionHandler:^(BOOL granted, NSError * _Nullable error) {
            if (granted) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    [[UIApplication sharedApplication] registerForRemoteNotifications];
                });
            } else {
                NSLog(@"Push permission denied");
            }
        }];
    
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
        NSString *token = [self stringWithDeviceToken:deviceToken];
        
        [NBaseBridge.shared setPushToken:token];
    }
    
    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
        NSLog(@"Failed to register for remote notifications: %@", error);
    }
    
    - (void)userNotificationCenter:(UNUserNotificationCenter *)center
           willPresentNotification:(UNNotification *)notification
             withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
                
        completionHandler(UNNotificationPresentationOptionBanner | 
                         UNNotificationPresentationOptionSound | 
                         UNNotificationPresentationOptionBadge);
    }
    
    - (NSString *)stringWithDeviceToken:(NSData *)deviceToken {
        NSUInteger length = deviceToken.length;
        if (length == 0) {
            return nil;
        }
        const unsigned char *buffer = deviceToken.bytes;
        NSMutableString *hexString = [NSMutableString stringWithCapacity:(length * 2)];
        for (int i = 0; i < length; ++i) {
            [hexString appendFormat:@"%02x", buffer[i]];
        }
        return [hexString copy];
    }
    

    Unityプロジェクトに設定ファイルを追加

    Firebase Console設定ワークフローからプラットフォーム別 Firebase設定ファイルを取得します。

    • iOSの場合、GoogleService-Info.plistのダウンロードをクリックします。
    • Androidの場合、google-services.jsonのダウンロードをクリックします。

    Unityプロジェクトのプロジェクト画面を開き、設定ファイルを Assetsフォルダに移動します。

    プッシュ状態の変更

    プッシュを受信するかどうか設定を変更するには、以下のコードを呼び出します。

    C#:

    NBaseSDK.NBase.setPushState(enable, night, ad, token, (pushState, error) => {
        if (error != null)
        {
            // failed.
            // Display the message using error.message.
        }
        else
        {
            // succeeded.
        }
    });
    

    Kotlin:

    val pushToken = NBase.getPushToken()
    val pushState = com.nbase.sdk.model.PushState(
        enable = enable,
        night = night,
        ad = ad,
        token = pushToken
    )
    NBase.setPushState(pushState) { status, e ->
        if (error != null) {
            // failed.
            // Display the message using error.message.
        } else {
            // succeeded.
        }
    };
    

    Java:

    String pushToken = _NBase.getPushToken();
    com.nbase.sdk.model.PushState pushState = new com.nbase.sdk.model.PushState(
            Boolean.parseBoolean(enable),
            Boolean.parseBoolean(night),
            Boolean.parseBoolean(ad),
            pushToken
    );
    NBase nBase = NBase.INSTANCE;
    nBase.setPushState(pushState, (status, e) -> {
        if (e != null) {
            // failed.
            // Display the message using e.getMessage.
        } else {
            // succeeded.
        }
        return null;
    });
    

    Swift:

    NBase.setPushState(enable: enable, ad: ad, night: night, token: NBase.getPushToken()) { result in
        switch result {
        case .success(let data):
            // succeeded.
        case .failure(let error):
            // failed.
        }
    }
    

    Objective-C:

    [NBaseBridge.shared setPushState:enable night:night ad:ad token:token :^(NSDictionary * _Nullable result, NSError * _Nullable error) {
        if (error) {
            // failed.
            // Display the message using error.localizedDescription.
        } else {
            // succeeded.
        }
    }];
    

    プッシュを受信するかどうか設定を確認するには、以下のコードを呼び出します。

    C#:

    NBaseSDK.NBase.getPushState((pushState, error) => {
        if (error != null)
        {
            // failed.
            // Display the message using error.message.
        }
        else
        {
            // succeeded.
        }
    });
    

    Kotlin:

    NBase.getPushState() { state, e ->
        if (error != null) {
            // failed.
            // Display the message using error.message.
        } else {
            // succeeded.
        }
    };
    

    Java:

    NBase nBase = NBase.INSTANCE;
    nBase.getPushState((state, e) -> {
        if (e != null) {
            // failed.
            // Display the message using e.getMessage.
        } else {
            // succeeded.
        }
        return null;
    });
    

    Swift:

    NBase.getPushState() { result in
        switch result {
        case .success(let data):
            // succeeded.
        case .failure(let error):
            // failed.
        }
    }
    

    Objective-C:

    [NBaseBridge.shared getPushState:^(NSDictionary * _Nullable result, NSError * _Nullable error) {
        if (error) {
            // failed.
            // Display the message using error.localizedDescription.
        } else {
            // succeeded.
        }
    }];
    

    プッシュのテスト方法(モバイル)

    プッシュテストは3つの方法で検証できます。

    • GAMEPOTダッシュボードで確認する方法
      ダッシュボード > メッセージ > プッシュ通知メニューからプッシュを送信できます。

    • (AOS) Firebaseコンソールでテストする方法
      Firebase Console - プロジェクを選択 - Messaging - キャンペーンで新しキャンペーンボタンをクリックするとメッセージ送信をテストできます。
      ko-gamepot-push02.png

      ko-gamepot-push03.png

      アプリから取得したトークンをコピーして貼り付けた後、+ボタンをクリックして、トークンを入力してテストボタンをクリックすると完了します。そのトークンで送信されたかどうか確認できます。

    • (iOS) CloudKit Consoleでテストする方法
      CloudKit Console -> Push Notificationsに移動し、Notificationsを新規作成します。
      CloudKit_Push Notifications.png

    Device Tokenと Payloadを入力するとそのトークンで送信できるかどうか確認できます。

    トラブルシューティング

    Q. java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process {パッケージ名}. Make sure to call FirebaseApp.initializeApp(Context) first.

    A. このエラーは、gradleファイルにプッシュ設定が欠落している場合です。下記事項をご確認ください。

    プロジェクト最上部の build.gradle.ktsをご確認ください。

    plugins {
       id("com.google.gms.google-services") version "4.4.1" apply false
    }
    

    app内の build.gradle.ktsをご確認ください。

    plugins {
        id("com.google.gms.google-services")
    }
    

    Q. org.gradle.api.GradleException: File google-services.json is missing. The Google Services Plugin cannot function without it.
    A. このエラーは google-services.jsonが見つからない場合に発生します。このファイルがモジュール:アプリ単位のルートフォルダに正しく配置されているかご確認ください。
    (例) ./project folder/app/google-services.json


    この記事は役に立ちましたか?

    What's Next
    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.