チャネルプラグイン設置ガイド

channel.ioを設置したiOSアプリにプッシュ通知機能を追加する篇~

みなさん、こんにちは!

今回はiOSチャネルアイオー(channel.io)プラグインのSDKを設置したアプリに、通知機能を追加する方法についてレクチャーしていきますね!🌸

------------------------------------------------------------------------------------------------------

プッシュ通知機能を設定するためには、まずApple Push Certificateであるp12ファイルを生成し、Channel Deskにアップロードしてください。(開発用とサービス用とで別々にアップロードすることができます)

## Apple Push Certificate

### プッシュ通知の活性化

Apple Push Notification Serviceをすでにアプリで使用している場合には、この作業を飛ばして進んでください。

まず、[Apple Developer Center]](http://developer.apple.com)にログインしましょう。 **Certificates, IDs & Profiles** →**Identifiers** →**App IDs** メニューに入って、プッシュ通知を送る

App IDを選択してください。下段にある **Edit** を押すと、下記のような画面が表示されます。

![step_01](http://i.imgur.com/BERQJpZ.jpg)

続けて、下記のような作業を行なっていきましょう。**Keychain Access** プラグインを作動させます → 左上の **Certificate Assistant** → **Request a Certificate From a Certificate** → **Saved on disk** オプションをチェック→ **Continue*ボタンをクリックします。ここまで終わらせると、certificateファイルが生成されます。このファイルを直前に作業していたページにアップロードします。このように登録されたcertificate(拡張子: .car)をもう一度ダウンロードし、ダブルクリックすると keychainにインポートすることができます。

### Channel サーバーに登録するため、certificate exportをする

**Keychain Access**を実行し、アプリに使用する iOS Push Notification certificateを見つけます。アプリのbundle ID の前が、”Apple (Development/Distribution) IOS Push Service:”というふうに表示されていれば、正しい証明書だと判断できます。

次に、 certificateと private keyを同時に選択した後、右クリックして**export 2 items**を選択してください。

![step_02](http://i.imgur.com/u6gAxFe.jpg)

**Save**を押すと、 .p12ファイルのパスワードを入力してくださいというポップアップが出ます。パスワードを入力するとp12ファイルが指定された経路にexport されます。

### Channel Desk를を使って、 p12ファイルをアップロードする

Channel Deskで、**設定** → **モバイルアプリプッシュを連携させる**に入ります。右上の**iOS 連動** ボタンを押すと、 p12ファイルをアップロードするポップアップが表示されます。

![step_04](http://i.imgur.com/FArwwr4.jpg)

Exportしたp12ファイルとパスワードをアップロードします。

![step_03](http://i.imgur.com/EEpAyF6.png)

## デバイストークンを登録する

プッシュ通知を使用するためにはデバイストークンをchannleのサーバーに登録する必要があります。次のような方法で行ってください。`application:didRegisterForRemoteNotificationWithDeviceToken` の中で、‘register:’関数を呼び出して登録してください。

Swift:

```swift

func application(_ application: UIApplication,

didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

ChannelPlugin.register(deviceToken)

}

```

Objective-C

```objc

- (void)application:(UIApplication *)application

didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

[ChannelPlugin registerWithDeviceToken:deviceToken];

}

```

## プッシュ通知を処理する

さらに、channelプラグインに入ってくるプッシュアラームを処理するためには、今までアプリでプッシュ通知を処理していたのを同じように、delegate 関数の中に `handlePushNotification:` という関数を呼び出してください。

Swift:

```swift

//iOS 10 以上

func userNotificationCenter(_ center: UNUserNotificationCenter,

didReceive response: UNNotificationResponse,

withCompletionHandler completionHandler: @escaping () -> Void) {

let userInfo = response.notification.request.content.userInfo

if ChannelPlugin.isChannelNotification(userInfo) {

ChannelPlugin.handlePushNotification(userInfo)

}

completionHandler()

}

//iOS 9 以下

func application(_ application: UIApplication,

didReceiveRemoteNotification userInfo: [AnyHashable : Any],

fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

if ChannelPlugin.isChannelNotification(userInfo) {

ChannelPlugin.handlePushNotification(userInfo)

}

completionHandler(.noData)

}

```

Objective-C:

```objc

//iOS 10 以上

- (void)userNotificationCenter:(UNUserNotificationCenter *)center

didReceiveNotificationResponse:(UNNotificationResponse *)response

withCompletionHandler:(void (^)())completionHandler {

NSDictionary *userInfo = response.notification.request.content.userInfo;

if ([ChannelPlugin isChannelNotification:userInfo]) {

[ChannelPlugin handlePushNotification:userInfo];

}

completionHandler();

}

//iOS 9 以下

- (void)application:(UIApplication *)application

didReceiveRemoteNotification:(NSDictionary *)userInfo

fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

{

//アプリが非活性化された状態なのか確認

if ([ChannelPlugin isChannelNotification:userInfo]) {

[ChannelPlugin handlePushNotification:userInfo];

}

completionHandler(UIBackgroundFetchResultNoData);

}

```

------------------------------------------------------------------------------------------------------

以上です!

ご不明な点がございましたら、問い合わせ窓口からもご質問をお待ちしています〜!😊

👉http://channel.io/ja

Show your support

Clapping shows how much you appreciated Channel’s story.