通知(iOS)
プッシュ通知とアプリ内通知を構成します。
SDKに含まれているすべてのパブリックAPIは、HelpshiftSdk.install() APIを介してSDKを初期化した後に呼び出す必要があります
プッシュ通知をセットアップする簡単な方法は、HsUnityAppController.mmファイルに含まれている関連コードのコメントアウトを解除することです。クラスHsUnityAppControllerはAppDelegateListenerを実装し、プッシュ通知を開始するために必要な関連するデリゲートメソッドを提供します。
Helpshiftを介したプッシュ通知を構成する
ユーザーから提出された問題に返信したタイミングで、ユーザーに通知を送信することができます。iOSで期待されるプッシュ通知の動作に加えて、通知をカスタマイズし、通知の受信時にアプリアイコンに数字が記載されたバッジを表示したり、音声アラートを再生したりすることができます。
アプリでまだプッシュ機能を使用していない場合には、アプリのプッシュ機能を有効にする必要があります。アプリケーションでプッシュ通知を有効にするには、AppDelegateのapplication:didFinishLaunchingWithOptions:メソッドにAPNs登録コードを追加する必要があります。
- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge UNAuthorizationOptionSound | UNAuthorizationOptionAlert)
completionHandler:^(BOOL granted, NSError *_Nullable error) {
...
}];
[UIApplication sharedApplication registerForRemoteNotifications];
...
}
Helpshiftの管理者インターフェースでHelpshiftのプッシュ通知サービスを構成する
Helpshiftのシステムがユーザーにプッシュ通知を送信できるようにするには、アプリにプラットフォームとしてiOSを追加する必要があります(まだ追加していない場合)。そして、プッシュ通知オプションをクリックします。

iOSのすべてのモバイルアプリおよびゲームにプッシュ通知を送信するには、Apple Push Notification Server(APNs)との認証接続を確立する必要があります。認証には、次の2つの方法があります。
- 新しいトークンベースの方法(.p8)
- 古い証明書ベースの方法(.p12)
トークンベースの方法(.p8)
トークンベースの方法では、APNsとの通信にステートレスな方法を提供しているため、より高速です。証明書やプロバイダーのサーバーに関連するその他の情報をAPNsがルックアップする必要はありません。
トークンベースの.p8キーを使用する新しい方法に対応したことにより、1つのキーですべてのiOSアプリやゲームに通知を送信できるようになりました。こちらで説明されているように、.p8キーはAppleデベロッパアカウントを介して生成することができます。

.p8キーを使用してiOSのプッシュ通知を設定する手順は、以下の通りです。
「設定」に移動し、「アプリの設定」セクションに移動して構成を行うアプリを選択します。
「アプリの設定」ページで、アプリ内SDKの隣にある「構成」オプションをクリックします。
「アプリ内SDKの構成」ページで、「プッシュ通知」セクションに移動します。
「Apple Push Notification Service」のトグルが有効になっていない場合には、有効にします。トグルが初めて有効化された場合、アプリはデフォルトで.p8キーによる認証の種類を選択します。
.p8キーをアップロードして、必要な情報を入力します。
APNsのプッシュモード(開発/本番)を選択します。
「保存して公開」をクリックして変更を保存します。
証明書ベースの方法(.p12)
Appleのポータルサイトで、後でHelpshiftに提供するAPNs用の証明書を生成する必要があります。これによりHelpshiftはユーザーにプッシュ通知を送信できるようになります。Appleは、古いタイプの証明書からApple Push Notification service SSLへの移行を実施しました。Apple Push Notification認証キーを作成する方法もありますが、Helpshiftではまだサポートされていません。また、まだ有効期限が切れていない古いタイプの証明書を持っている可能性もあるかと思われますが、これもHelpshiftでサポートされています。
Appleは、Apple Push Notification service SSLに2つのバリエーションを用意しています。
- Apple Push Notification service SSL(サンドボックス)
- Apple Push Notification service SSL(サンドボックスおよび本番)
証明書を作成したら、ダウンロードします。証明書をダブルクリックして、キーチェーンアクセスアプリケーションにインポートします。キーチェーンアクセスアプリケーションで先ほど追加した証明書を右クリックし、「.p12形式でエクスポート」をクリックします。Helpshiftでは空のパスワードは受け付けておりませんので、証明書をエクスポートする際にパスワードを入力してください。(開発用の秘密鍵がキーチェーンアクセスに存在しない場合、.p12形式でエクスポートできないことにご注意ください。)
エクスポートの後は、ログインしてHelpshift管理者パネルでアプリ内の.p12ファイルをアップロードします。.p12形式へのエクスポートを行った際に使用したものと同じパスワードを入力してください。
APNs証明書を作成する際に使用したものと同じバンドル識別子をアプリで使用する必要があることにご注意ください。

バッジ送信の有無に加えて、通知を処理するためにアプリにバンドルするカスタム音声を用意している場合には、音声アラートを構成することができます。保存すれば設定完了です。
開発(サンドボックス)モードと本番モードの比較
Xcodeからアプリをビルドして実行すると、アプリは開発(サンドボックス)モードに設定されます。このモードでHelpshiftからのプッシュ通知をテストする場合、上記2つの証明書タイプのいずれかをアップロードする際に、「開発モード」を選択していることをご確認ください。
アプリを公開してApp Storeからダウンロードすると、アプリは本番モードになります。本番モードでHelpshiftからのプッシュ通知をテストするには、「Apple Push Notification service SSL(Sandbox & Production)」タイプの証明書をアップロードする際に「本番モード」を選択していることをご確認ください。サンドボックスモードの証明書は、本番環境では動作しません。
サンドボックスと本番アプリの両方に同じ証明書を使用することは、サポートされておりません。このような場合には、ダッシュボード上に2つのアプリを作成し、1つを「本番モード」に、そしてもう1つを「開発モード」に設定することをお勧めします。テスト中は、開発モードのアプリの認証情報を使用してください。公開の準備ができたら、認証情報を本番レベルのアプリのもので置き換えてください。
プッシュ証明書には、有効期限があります。Helpshiftはプッシュ証明書の有効期限が切れたとしてもリマインダーなどは送信しませんので、開発者自身で有効期限を定期的に確認し、プッシュ証明書を再アップロードするようにしてください。

Helpshift iOS SDKが通知を処理するように構成する
プッシュ機能が構成されていない場合、Helpshift SDKはエージェント/ボットにより送信されたすべてのメッセージに対してすぐに使用可能なアプリ内通知を表示します。
registerDeviceToken APIを呼び出すのは、必ずHelpshiftダッシュボードをプッシュ通知用に構成した後にしてください。Helpshiftダッシュボードを構成せずにregisterDeviceToken APIを呼び出すと、エンドユーザーに対してアプリ内通知が表示されなくなります。
Helpshift SDKをHelpshiftのプッシュ通知サービスと連携させるには、
registerDeviceToken: API呼び出しをアプリケーションのデリゲートメソッド
application:didRegisterForRemoteNotificationsWithDeviceToken:の内部で呼び出す必要があります。
アプリのデリゲートファイルでは、以下のようになります。
- (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[Helpshift registerDeviceToken:deviceToken];
}
配信された通知に応答するには、共有されているUNUserNotificationCenterオブジェクトのためのデリゲートを実装する必要があります。デリゲートオブジェクトは、通知センターがアプリに通知情報を配信するために使用するUNUserNotificationCenterDelegateプロトコルに準拠する必要があります。
- アプリがフォアグラウンドにあるときに通知が届くと、UNUserNotificationCenterDelegateの
willPresentNotification:が呼び出されます。 - アプリがバックグラウンドにあるか、または実行されていない場合には、システムは
userNotificationCenter:willPresentNotification:withCompletionHandler:メソッドを呼び出しません。そのような場合には、システムは通知そのものに含まれている情報に従ってユーザーにアラートを発します。 ユーザーが通知インターフェースからアクションを選択すると、システムはユーザーの選択をアプリに通知します。レスポンスを受け取るためには、デリゲートオブジェクトはuserNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:メソッドを実装する必要があります。
上記のすべての場合において、通知のオリジンが「Helpshift」であれば通知辞書の「origin」フィールドをチェックし、handleNotificationWithUserInfoDictionary:isAppLaunch: APIを呼び出す必要があります。Helpshift SDKは通知を受信した問題を確認し、それらの問題の会話画面を自動的に起動します。isAppLaunchブール型フラグは、ここではアクティブまたはバックグラウンドにあるアプリと、ユーザにより強制終了されたアプリを区別するために使用されます。後者の場合、このフラグはtrueに設定されているはずです。
使用方法のサンプル
userNotificationCenter:willPresentNotification:withCompletionHandler:デリゲートの場合:
- (void) userNotificationCenter:(UNUserNotificationCenter *)center
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
if([[notification.request.content.userInfo objectForKey:@"origin"] isEqualToString:@"helpshift"]) {
[Helpshift handleNotificationWithUserInfoDictionary:notification.request.content.userInfo
isAppLaunch:false];
completionHandler(UNNotificationPresentationOptionNone);
} else {
// Handle foreground notifications other than Helpshift ones.
}
}
userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:デリゲートの場合:
- (void) userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)(void))completionHandler {
if([response.notification.request.content.userInfo[@"origin"] isEqualToString:@"helpshift"]) {
[Helpshift handleNotificationWithUserInfoDictionary:response.notification.request.content.userInfo
isAppLaunch:YES];
} else {
// Handle push notifications other than Helpshift ones.
}
completionHandler();
}
バッジの数
アプリケーションアイコンでバッジのリセットを処理する必要がある場合は、applicationDidBecomeActive:デリゲートメソッドで以下のように処理します。
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}
すでに稼働中のアプリのプッシュ通知をテストするには、こちらを参照してください。
アプリ内通知
アプリ内通知は、Appleのプッシュ通知バナーに似ています。プッシュ通知とは異なり、ユーザーの使用中にアプリ内に表示されます。
これらの通知は、エージェントが顧客の問題に返信したタイミングで送信されます。顧客は、それらのバナーをクリックすることで直接会話画面に移動することができます。

アプリ内通知を構成する
Helpshiftのインストール呼び出しは、SDKの動作を構成するためのフラグをサポートしています。
現時点では、enableInAppNotificationという1つのフラグをサポートしています。
アプリ内通知の有効化/無効化
| フラグ | enableInAppNotification |
| 値 | true/false |
| デフォルト | true |
Helpshift SDKが提供するアプリ内通知サポートが不要な場合には、
このフラグをfalseに設定してください。この
フラグの規定値はtrueであり、この場合にはアプリ内通知が有効化されます。
アプリ内通知の詳細については、通知セクションをご参照ください。
例:
using Helpshift;
private HelpshiftSdk help;
this.help = HelpshiftSdk.GetInstance();
Dictionary<string, object> configMap = new Dictionary<string, object>();
configMap.Add(HelpshiftSdk.ENABLE_INAPP_NOTIFICATION, true);
help.Install(appId, domainName, configMap);
アプリ内通知の一時停止
アプリ内通知を有効にしている場合には、PauseDisplayOfInAppNotification() APIを使用して通知の一時停止や再開を行います。このメソッドにtrueが渡されると、アプリ内通知が発生しても表示は一時停止されます。falseを渡すと、アプリ内通知が表示されるようになります。
例:
using Helpshift;
// Install call
private HelpshiftSdk help;
this.help = HelpshiftSdk.GetInstance();
Dictionary<string, object> configMap = new Dictionary<string, object>();
configMap.Add(HelpshiftSdk.ENABLE_INAPP_NOTIFICATION, true);
help.Install(appId, domainName, configMap);
// To temporarily pause in-app notifications
help.PauseDisplayOfInAppNotification(true);
// To resume showing the in-app notifications
help.PauseDisplayOfInAppNotification(false);
ユーザーに返信が送信された際の通知数の表示
サーバーから未読メッセージの数を取得するには、Helpshift.RequestUnreadMessageCount(shouldFetchFromServer) APIを呼び出します。このAPIは、未読メッセージの数をデリゲート経由で返します。
shouldFetchFromServerの値に基づき、shouldFetchFromServerがfalseの場合にはローカルに保存されている数が返され、shouldFetchFromServerがtrueの場合にはサーバーからリモートで取得します。このカウント機能の使用例には、未読メッセージを示すバッジの数の更新が挙げられます。このメソッドを呼び出す前に、Helpshift.SetHelpshiftEventsListener(eventsListener) APIを呼び出してHelpshiftイベントのリスナーを設定する必要があることにご注意ください。
// Requesting unread count
private void RequestUnreadCount()
{
Helpshift.RequestUnreadMessageCount(true);
}
このAPIを呼び出すと、IHelpshiftEventsListenerを実装するイベントリスナーで未読の数を受け取ります。
以下は実装例です
public class HSEventsListener : IHelpshiftEventsListener
{
// ...
public void HandleHelpshiftEvent(string eventName, Dictionary<string, object> eventData)
{
if(eventName.Equals(HelpshiftEvent.RECEIVED_UNREAD_MESSAGE_COUNT))
{
Debug.Log("Unread count: " + eventData[HelpshiftEvent.DATA_MESSAGE_COUNT]);
Debug.Log("Is Unread count from cache: " + eventData[HelpshiftEvent.DATA_MESSAGE_COUNT_FROM_CACHE]);
// Do something with the unread count here, for example, update the badge count.
}
}
//...
}
- 通知の数は、SDKのキャッシュとHelpshiftのサーバーからこのAPIを介して取得されます(上記の例では
fromCacheの値で示されています)。しかしながら、Helpshiftサーバーから取得する場合の通知数についてはレートが制限されており、タイムアウトのリセット後またはユーザーがチャット画面を閉じた後(いずれかの早い方)にAPIに対する次の呼び出しが行われた場合にのみ値が返されます。タイムアウトのリセット時間は、アクティブな問題の場合は1分、そして非アクティブな問題の場合には5分に設定されています。