SlideShare une entreprise Scribd logo
1  sur  34
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Feb 10, 2017
Akifumi Fukaya
Development Dept. 1
IP Platform Div.
DeNA Co., Ltd.
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Feb 10, 2017
Akifumi Fukaya
Development Dept. 1
IP Platform Div.
DeNA Co., Ltd.
マンガボックス
iOS10プッシュ通知
導入事例
1
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
自己紹介
• 深谷 哲史(ふかや あきふみ)
• 2014年度 新卒入社
• IPプラットフォーム事業部開発一部 所属
• マンガボックス
• iOS/Androidエンジニア
2
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
背景
• 2016年9月にiOS10がリリース
• マンガボックスでは、新しい技術を積極的に導入しよう
と実装を検討
• iOS10の新機能
• User Notifications
• iMessage App
• Siri Kit
3
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
背景
• 2016年9月にiOS10がリリース
• マンガボックスでは、新しい技術を積極的に導入しよう
と実装を検討
• iOS10の新機能
• User Notifications
• iMessage App
• Siri Kit
4
マンガボックスと相性が良さそう!
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
iOS10の通知
Advanced Notifications - WWDC 2016より引用
https://developer.apple.com/videos/play/wwdc2016/708/
5
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
WWDC 2016 ビデオ
https://developer.apple.com/videos/play/wwdc2016/707/
https://developer.apple.com/videos/play/wwdc2016/708/
6
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
マンガボックスでの導入事例
7
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
マンガボックスでの導入事例
8
Episode
Notification
Content
Extension
Notification Service
Extension
Comics
Notification
Content
Extension
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Notification Service Extensionの導入
• 通知表示前にペイロードを受け取り、表示内容
を操作できる
• アタッチメント画像のダウンロードと表示
• 暗号化文字列の復号化
9
APNs
Payload
Notification Service
Extension
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Notification Service Extensionの導入
10
APNs
Payload
Notification Service
Extension
{
"aps": {
"alert": {},
"mutable-content": 1
},
"attachment_image_url": "https://example.com/photo.jpg"
}
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Notification Service Extensionの追加
11
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
NotificationService.swift
12
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping
(UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent
= (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
// Modify the notification content here...
bestAttemptContent.title = "(bestAttemptContent.title) [modified]"
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload
will be used.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
NotificationService.swift
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping
(UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent
= (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
// Modify the notification content here...
bestAttemptContent.title = "(bestAttemptContent.title) [modified]"
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload
will be used.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Notification Contentの導入
14
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Notification Contentの追加
15
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
NotificationViewController.swift
import UIKit
import UserNotifications
import UserNotificationsUI
class NotificationViewController: UIViewController, UNNotificationContentExtension {
@IBOutlet var label: UILabel?
override func viewDidLoad() {
super.viewDidLoad()
// Do any required interface initialization here.
}
func didReceive(_ notification: UNNotification) {
self.label?.text = notification.request.content.body
}
}
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
MainInterface.storyboard
17
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
ハマった点の紹介
• アタッチメント画像がクリッピングされてしまう
• NotificationService#didReceive(_:withContentHandler:) で時間の
かかる処理を実行すると、Extensionの正常終了されてしまう
• mutable-content:1を含むペイロードのプッシュ通知が届かない
端末が出現
• Content Extensionの中身が真っ白
18
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
ハマった点の紹介
• アタッチメント画像がクリッピングされてしまう
• NotificationService#didReceive(_:withContentHandler:) で時間の
かかる処理を実行すると、Extensionの正常終了されてしまう
• mutable-content:1を含むペイロードのプッシュ通知が届かない
端末が出現
• Content Extensionの中身が真っ白
19
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
アタッチメント画像がクリッピングされてしまう
20
APNs
Payload
Notification Service
Extension
送信元画像 表示画像
クリッピングされてしまう
※ iOS 10.0で検証
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
アタッチメント画像がクリッピングされてしまう
let attachment = try UNNotificationAttachment(identifier: "image",
url: path,
options: nil)
bestAttemptContent.attachments = [attachment]
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
アタッチメント画像がクリッピングされてしまう
22
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
アタッチメント画像がクリッピングされてしまう
23
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
アタッチメント画像がクリッピングされてしまう
let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
let dicRep = rect.dictionaryRepresentation
let options =
[UNNotificationAttachmentOptionsThumbnailClippingRectKey:dicRep]
let attachment = try UNNotificationAttachment(identifier: "image",
url: path,
options: options)
bestAttemptContent.attachments = [attachment]
拡大できるが縮小はできない
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
アタッチメント画像がクリッピングされてしまう
25
iOS 10.0 iOS 10.2
iOS 10.2で直ってました!
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
ハマった点の紹介
• アタッチメント画像がクリッピングされてしまう
• NotificationService#didReceive(_:withContentHandler:) で時
間のかかる処理を実行すると、Extensionの正常終了されてし
まう
• mutable-content:1を含むペイロードのプッシュ通知が届かない
端末が出現
• Content Extensionの中身が真っ白
26
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
ハマった点の紹介
• アタッチメント画像がクリッピングされてしまう
• NotificationService#didReceive(_:withContentHandler:) で時間の
かかる処理を実行すると、Extensionの正常終了されてしまう
• mutable-content:1を含むペイロードのプッシュ通知が届かない
端末が出現
• Content Extensionの中身が真っ白
27
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
プッシュ通知が届かない端末が出現
28
マンガボックス
iOS10対応版 リリース
v2.9.1 v2.10.0
iOS 9 iOS 10
通知が届かないケース
9/12 9/14
iOS 10リリース
プッシュ通知が届かない!
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
プッシュ通知が届かない端末が出現
29
v2.9.1 v2.10.0
iOS 9 iOS 10
9/12 9/14
通知が届くケース
iOS 10リリースマンガボックス
iOS10対応版 リリース
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
プッシュ通知が届かない端末が出現
30
v2.9.1 v2.10.0
iOS 9 iOS 10
通知が届かないケース
9/12 9/14 プッシュ通知が届かない!
iOS 9では通知エクステンションが
含まれていないのでは
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
プッシュ通知が届かない端末が出現
• 現象
• 届かないケース
• iOS 9で通知エクステンションを含むアプリをインストールし、iOS 10にアップ
デート後、プッシュ通知にmutable-content: 1が含まれる場合
• 届くケース
• iOS 10にOSをアップデート後、エクステンションを含むアプリをインストール
or アップデート
• mutable-content: 1をペイロードから削除
• 考えられる要因
• iOS 9でインストールされるアプリには、通知エクステンションが含ま
れていないのでは
31
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
ハマった点の紹介
• アタッチメント画像がクリッピングされてしまう
• NotificationService#didReceive(_:withContentHandler:) で時間の
かかる処理を実行すると、Extensionの正常終了されてしまう
• mutable-content:1を含むペイロードのプッシュ通知が届かない
端末が出現
• Content Extensionの中身が真っ白
32
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
プッシュ通知試してください!
33
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
ありがとうございました
34

Contenu connexe

Tendances

DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組みDeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組みToshiharu Sugiyama
 
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -Tomoya Kabe
 
DeNAの動画配信サービスを支えるインフラの内部 #denatechcon
DeNAの動画配信サービスを支えるインフラの内部  #denatechconDeNAの動画配信サービスを支えるインフラの内部  #denatechcon
DeNAの動画配信サービスを支えるインフラの内部 #denatechconDeNA
 
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechconYosaku Toyama
 
B2B2Cなヘルスケアサービスの作り方
B2B2Cなヘルスケアサービスの作り方B2B2Cなヘルスケアサービスの作り方
B2B2Cなヘルスケアサービスの作り方Tomohiro MITSUMUNE
 
20180123 rancher meetupyokohama_minehiko_nohara
20180123 rancher meetupyokohama_minehiko_nohara20180123 rancher meetupyokohama_minehiko_nohara
20180123 rancher meetupyokohama_minehiko_noharaMinehiko Nohara
 
セキュリティ業務の内製とチームメンバー育成
セキュリティ業務の内製とチームメンバー育成セキュリティ業務の内製とチームメンバー育成
セキュリティ業務の内製とチームメンバー育成Toshiharu Sugiyama
 
DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)denatech2016
 
DebugHeadを使ったiOSアプリ開発手法 #denatechcon
DebugHeadを使ったiOSアプリ開発手法 #denatechconDebugHeadを使ったiOSアプリ開発手法 #denatechcon
DebugHeadを使ったiOSアプリ開発手法 #denatechconDeNA
 
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてDeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてMakoto Haruyama
 
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)dena_study
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのことNTT DATA OSS Professional Services
 
AnsibleおよびDockerで始めるInfrastructure as a Code
AnsibleおよびDockerで始めるInfrastructure as a CodeAnsibleおよびDockerで始めるInfrastructure as a Code
AnsibleおよびDockerで始めるInfrastructure as a CodeSatoru Yoshida
 
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learnedエンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons LearnedDaiki Kawanuma
 
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方dena_study
 
チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発Satoshi Takano
 
これからの Microservices
これからの Microservicesこれからの Microservices
これからの MicroservicesToru Yamaguchi
 
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜Kentaro Matsumae
 
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)NTT DATA OSS Professional Services
 
DeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestDeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestMasaki Nakagawa
 

Tendances (20)

DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組みDeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
 
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -
 
DeNAの動画配信サービスを支えるインフラの内部 #denatechcon
DeNAの動画配信サービスを支えるインフラの内部  #denatechconDeNAの動画配信サービスを支えるインフラの内部  #denatechcon
DeNAの動画配信サービスを支えるインフラの内部 #denatechcon
 
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
 
B2B2Cなヘルスケアサービスの作り方
B2B2Cなヘルスケアサービスの作り方B2B2Cなヘルスケアサービスの作り方
B2B2Cなヘルスケアサービスの作り方
 
20180123 rancher meetupyokohama_minehiko_nohara
20180123 rancher meetupyokohama_minehiko_nohara20180123 rancher meetupyokohama_minehiko_nohara
20180123 rancher meetupyokohama_minehiko_nohara
 
セキュリティ業務の内製とチームメンバー育成
セキュリティ業務の内製とチームメンバー育成セキュリティ業務の内製とチームメンバー育成
セキュリティ業務の内製とチームメンバー育成
 
DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)
 
DebugHeadを使ったiOSアプリ開発手法 #denatechcon
DebugHeadを使ったiOSアプリ開発手法 #denatechconDebugHeadを使ったiOSアプリ開発手法 #denatechcon
DebugHeadを使ったiOSアプリ開発手法 #denatechcon
 
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてDeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
 
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと
 
AnsibleおよびDockerで始めるInfrastructure as a Code
AnsibleおよびDockerで始めるInfrastructure as a CodeAnsibleおよびDockerで始めるInfrastructure as a Code
AnsibleおよびDockerで始めるInfrastructure as a Code
 
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learnedエンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
 
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方
 
チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発
 
これからの Microservices
これからの Microservicesこれからの Microservices
これからの Microservices
 
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
 
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
 
DeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestDeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in Test
 

En vedette

自動運転に向けた取り組みと安全管理
自動運転に向けた取り組みと安全管理自動運転に向けた取り組みと安全管理
自動運転に向けた取り組みと安全管理Kuwabara Kunihito
 
リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司
リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司
リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司紘司 村田
 
その後のDeNAのネイティブアプリ開発 #denatechcon
その後のDeNAのネイティブアプリ開発 #denatechconその後のDeNAのネイティブアプリ開発 #denatechcon
その後のDeNAのネイティブアプリ開発 #denatechconDeNA
 
ログ分析で支えるゲームパラメータ設計 #denatechcon
ログ分析で支えるゲームパラメータ設計 #denatechconログ分析で支えるゲームパラメータ設計 #denatechcon
ログ分析で支えるゲームパラメータ設計 #denatechconDeNA
 
DeNAのAIとは #denatechcon
DeNAのAIとは #denatechconDeNAのAIとは #denatechcon
DeNAのAIとは #denatechconDeNA
 
HTTP/2の課題と将来
HTTP/2の課題と将来HTTP/2の課題と将来
HTTP/2の課題と将来Kazuho Oku
 
DeNAのプログラミング教育の取り組み #denatechcon
DeNAのプログラミング教育の取り組み #denatechconDeNAのプログラミング教育の取り組み #denatechcon
DeNAのプログラミング教育の取り組み #denatechconDeNA
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話Kazuho Oku
 
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechconDeNA
 
DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNAのゲームを支えるプラットフォーム Sakasho #denatechconDeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNAのゲームを支えるプラットフォーム Sakasho #denatechconDeNA
 
Reorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondReorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondKazuho Oku
 
深層学習による機械とのコミュニケーション
深層学習による機械とのコミュニケーション深層学習による機械とのコミュニケーション
深層学習による機械とのコミュニケーションYuya Unno
 
実世界の人工知能@DeNA TechCon 2017
実世界の人工知能@DeNA TechCon 2017 実世界の人工知能@DeNA TechCon 2017
実世界の人工知能@DeNA TechCon 2017 Preferred Networks
 
Anyca(エニカ)のC2Cビジネスを支えるシステムと運用 #denatechcon
Anyca(エニカ)のC2Cビジネスを支えるシステムと運用 #denatechconAnyca(エニカ)のC2Cビジネスを支えるシステムと運用 #denatechcon
Anyca(エニカ)のC2Cビジネスを支えるシステムと運用 #denatechconDeNA
 
SafetyNetを使ってゲームを守る #denatechcon
SafetyNetを使ってゲームを守る #denatechconSafetyNetを使ってゲームを守る #denatechcon
SafetyNetを使ってゲームを守る #denatechconDeNA
 
マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話Makoto Haruyama
 
はじめての datadog
はじめての datadogはじめての datadog
はじめての datadogNaoya Nakazawa
 
ボケてが300万DL到達までに行ったグロースハックを少し紹介
ボケてが300万DL到達までに行ったグロースハックを少し紹介ボケてが300万DL到達までに行ったグロースハックを少し紹介
ボケてが300万DL到達までに行ったグロースハックを少し紹介Osamu Ise
 
【初心者向け】Go言語勉強会資料
 【初心者向け】Go言語勉強会資料 【初心者向け】Go言語勉強会資料
【初心者向け】Go言語勉強会資料Yuji Otani
 

En vedette (20)

自動運転に向けた取り組みと安全管理
自動運転に向けた取り組みと安全管理自動運転に向けた取り組みと安全管理
自動運転に向けた取り組みと安全管理
 
リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司
リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司
リーンスタートアップにおける、実装やライブ配信基盤の共通化 村田紘司
 
その後のDeNAのネイティブアプリ開発 #denatechcon
その後のDeNAのネイティブアプリ開発 #denatechconその後のDeNAのネイティブアプリ開発 #denatechcon
その後のDeNAのネイティブアプリ開発 #denatechcon
 
ログ分析で支えるゲームパラメータ設計 #denatechcon
ログ分析で支えるゲームパラメータ設計 #denatechconログ分析で支えるゲームパラメータ設計 #denatechcon
ログ分析で支えるゲームパラメータ設計 #denatechcon
 
DeNAのAIとは #denatechcon
DeNAのAIとは #denatechconDeNAのAIとは #denatechcon
DeNAのAIとは #denatechcon
 
HTTP/2の課題と将来
HTTP/2の課題と将来HTTP/2の課題と将来
HTTP/2の課題と将来
 
DeNAのプログラミング教育の取り組み #denatechcon
DeNAのプログラミング教育の取り組み #denatechconDeNAのプログラミング教育の取り組み #denatechcon
DeNAのプログラミング教育の取り組み #denatechcon
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
 
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon
強化学習を利用した自律型GameAIの取り組み ~高速自動プレイによるステージ設計支援~ #denatechcon
 
DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNAのゲームを支えるプラットフォーム Sakasho #denatechconDeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
 
Reorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondReorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and Beyond
 
深層学習による機械とのコミュニケーション
深層学習による機械とのコミュニケーション深層学習による機械とのコミュニケーション
深層学習による機械とのコミュニケーション
 
実世界の人工知能@DeNA TechCon 2017
実世界の人工知能@DeNA TechCon 2017 実世界の人工知能@DeNA TechCon 2017
実世界の人工知能@DeNA TechCon 2017
 
Anyca(エニカ)のC2Cビジネスを支えるシステムと運用 #denatechcon
Anyca(エニカ)のC2Cビジネスを支えるシステムと運用 #denatechconAnyca(エニカ)のC2Cビジネスを支えるシステムと運用 #denatechcon
Anyca(エニカ)のC2Cビジネスを支えるシステムと運用 #denatechcon
 
DATADOG TIPS #1
DATADOG TIPS #1DATADOG TIPS #1
DATADOG TIPS #1
 
SafetyNetを使ってゲームを守る #denatechcon
SafetyNetを使ってゲームを守る #denatechconSafetyNetを使ってゲームを守る #denatechcon
SafetyNetを使ってゲームを守る #denatechcon
 
マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話
 
はじめての datadog
はじめての datadogはじめての datadog
はじめての datadog
 
ボケてが300万DL到達までに行ったグロースハックを少し紹介
ボケてが300万DL到達までに行ったグロースハックを少し紹介ボケてが300万DL到達までに行ったグロースハックを少し紹介
ボケてが300万DL到達までに行ったグロースハックを少し紹介
 
【初心者向け】Go言語勉強会資料
 【初心者向け】Go言語勉強会資料 【初心者向け】Go言語勉強会資料
【初心者向け】Go言語勉強会資料
 

Similaire à マンガボックスのiOS10プッシュ通知導入事例

[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...Insight Technology, Inc.
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium MobileNaoya Ito
 
Reactor によるデータインジェスチョン
Reactor によるデータインジェスチョンReactor によるデータインジェスチョン
Reactor によるデータインジェスチョンAkihiro Kitada
 
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
2015 0807 ConoHa I am the bone of the OpenStack API CLI toolNaoto Gohko
 
Deno を aws fargate で動かす
Deno を aws fargate で動かすDeno を aws fargate で動かす
Deno を aws fargate で動かす虎の穴 開発室
 
plusbenlly meetiup how-to-use
plusbenlly meetiup how-to-useplusbenlly meetiup how-to-use
plusbenlly meetiup how-to-useKohji Fujishima
 
20180313 Amazon Container Services アップデート
20180313 Amazon Container Services アップデート20180313 Amazon Container Services アップデート
20180313 Amazon Container Services アップデートAmazon Web Services Japan
 
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...Insight Technology, Inc.
 
【18-C-4】Google App Engine - 無限の彼方へ
【18-C-4】Google App Engine - 無限の彼方へ【18-C-4】Google App Engine - 無限の彼方へ
【18-C-4】Google App Engine - 無限の彼方へDevelopers Summit
 
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0Ian Lewis
 
半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)Toru Makabe
 
20180613 AWS Black Belt Online Seminar AWS Cloud9 入門
20180613 AWS Black Belt Online Seminar AWS Cloud9 入門20180613 AWS Black Belt Online Seminar AWS Cloud9 入門
20180613 AWS Black Belt Online Seminar AWS Cloud9 入門Amazon Web Services Japan
 
[Cloud OnAir] 【Anthos 演習】 解説を聞きながら Anthos を体験しよう 2020年11月5日 放送
[Cloud OnAir] 【Anthos 演習】 解説を聞きながら Anthos を体験しよう 2020年11月5日 放送[Cloud OnAir] 【Anthos 演習】 解説を聞きながら Anthos を体験しよう 2020年11月5日 放送
[Cloud OnAir] 【Anthos 演習】 解説を聞きながら Anthos を体験しよう 2020年11月5日 放送Google Cloud Platform - Japan
 
Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話Katsunori Kanda
 
Deno の node 互換モードと ソケット
Deno の node 互換モードと ソケットDeno の node 互換モードと ソケット
Deno の node 互換モードと ソケット虎の穴 開発室
 
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...Shotaro Suzuki
 
fastlane x iOSアプリのCI
fastlane x iOSアプリのCIfastlane x iOSアプリのCI
fastlane x iOSアプリのCIToshiyuki Hirata
 

Similaire à マンガボックスのiOS10プッシュ通知導入事例 (20)

[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium Mobile
 
Reactor によるデータインジェスチョン
Reactor によるデータインジェスチョンReactor によるデータインジェスチョン
Reactor によるデータインジェスチョン
 
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
 
Deno を aws fargate で動かす
Deno を aws fargate で動かすDeno を aws fargate で動かす
Deno を aws fargate で動かす
 
Aerospike deep dive LDTs
Aerospike deep dive LDTsAerospike deep dive LDTs
Aerospike deep dive LDTs
 
plusbenlly meetiup how-to-use
plusbenlly meetiup how-to-useplusbenlly meetiup how-to-use
plusbenlly meetiup how-to-use
 
20180313 Amazon Container Services アップデート
20180313 Amazon Container Services アップデート20180313 Amazon Container Services アップデート
20180313 Amazon Container Services アップデート
 
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
 
【18-C-4】Google App Engine - 無限の彼方へ
【18-C-4】Google App Engine - 無限の彼方へ【18-C-4】Google App Engine - 無限の彼方へ
【18-C-4】Google App Engine - 無限の彼方へ
 
BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0BPStudy #40 - Google Appengine 1.4.0
BPStudy #40 - Google Appengine 1.4.0
 
半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)
 
20180613 AWS Black Belt Online Seminar AWS Cloud9 入門
20180613 AWS Black Belt Online Seminar AWS Cloud9 入門20180613 AWS Black Belt Online Seminar AWS Cloud9 入門
20180613 AWS Black Belt Online Seminar AWS Cloud9 入門
 
[Cloud OnAir] 【Anthos 演習】 解説を聞きながら Anthos を体験しよう 2020年11月5日 放送
[Cloud OnAir] 【Anthos 演習】 解説を聞きながら Anthos を体験しよう 2020年11月5日 放送[Cloud OnAir] 【Anthos 演習】 解説を聞きながら Anthos を体験しよう 2020年11月5日 放送
[Cloud OnAir] 【Anthos 演習】 解説を聞きながら Anthos を体験しよう 2020年11月5日 放送
 
Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話
 
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_cccSpring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
 
Deno の node 互換モードと ソケット
Deno の node 互換モードと ソケットDeno の node 互換モードと ソケット
Deno の node 互換モードと ソケット
 
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
 
fastlane x iOSアプリのCI
fastlane x iOSアプリのCIfastlane x iOSアプリのCI
fastlane x iOSアプリのCI
 
20181228 ncf to_azure_batch
20181228 ncf to_azure_batch20181228 ncf to_azure_batch
20181228 ncf to_azure_batch
 

Dernier

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 

Dernier (9)

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

マンガボックスのiOS10プッシュ通知導入事例

  • 1. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Feb 10, 2017 Akifumi Fukaya Development Dept. 1 IP Platform Div. DeNA Co., Ltd. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Feb 10, 2017 Akifumi Fukaya Development Dept. 1 IP Platform Div. DeNA Co., Ltd. マンガボックス iOS10プッシュ通知 導入事例 1
  • 2. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 自己紹介 • 深谷 哲史(ふかや あきふみ) • 2014年度 新卒入社 • IPプラットフォーム事業部開発一部 所属 • マンガボックス • iOS/Androidエンジニア 2
  • 3. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 背景 • 2016年9月にiOS10がリリース • マンガボックスでは、新しい技術を積極的に導入しよう と実装を検討 • iOS10の新機能 • User Notifications • iMessage App • Siri Kit 3
  • 4. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 背景 • 2016年9月にiOS10がリリース • マンガボックスでは、新しい技術を積極的に導入しよう と実装を検討 • iOS10の新機能 • User Notifications • iMessage App • Siri Kit 4 マンガボックスと相性が良さそう!
  • 5. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. iOS10の通知 Advanced Notifications - WWDC 2016より引用 https://developer.apple.com/videos/play/wwdc2016/708/ 5
  • 6. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. WWDC 2016 ビデオ https://developer.apple.com/videos/play/wwdc2016/707/ https://developer.apple.com/videos/play/wwdc2016/708/ 6
  • 7. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. マンガボックスでの導入事例 7
  • 8. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. マンガボックスでの導入事例 8 Episode Notification Content Extension Notification Service Extension Comics Notification Content Extension
  • 9. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Notification Service Extensionの導入 • 通知表示前にペイロードを受け取り、表示内容 を操作できる • アタッチメント画像のダウンロードと表示 • 暗号化文字列の復号化 9 APNs Payload Notification Service Extension
  • 10. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Notification Service Extensionの導入 10 APNs Payload Notification Service Extension { "aps": { "alert": {}, "mutable-content": 1 }, "attachment_image_url": "https://example.com/photo.jpg" }
  • 11. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Notification Service Extensionの追加 11
  • 12. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. NotificationService.swift 12 class NotificationService: UNNotificationServiceExtension { var contentHandler: ((UNNotificationContent) -> Void)? var bestAttemptContent: UNMutableNotificationContent? override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { self.contentHandler = contentHandler bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) if let bestAttemptContent = bestAttemptContent { // Modify the notification content here... bestAttemptContent.title = "(bestAttemptContent.title) [modified]" contentHandler(bestAttemptContent) } } override func serviceExtensionTimeWillExpire() { // Called just before the extension will be terminated by the system. // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { contentHandler(bestAttemptContent) } } }
  • 13. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. NotificationService.swift class NotificationService: UNNotificationServiceExtension { var contentHandler: ((UNNotificationContent) -> Void)? var bestAttemptContent: UNMutableNotificationContent? override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { self.contentHandler = contentHandler bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) if let bestAttemptContent = bestAttemptContent { // Modify the notification content here... bestAttemptContent.title = "(bestAttemptContent.title) [modified]" contentHandler(bestAttemptContent) } } override func serviceExtensionTimeWillExpire() { // Called just before the extension will be terminated by the system. // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { contentHandler(bestAttemptContent) } } }
  • 14. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Notification Contentの導入 14
  • 15. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Notification Contentの追加 15
  • 16. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. NotificationViewController.swift import UIKit import UserNotifications import UserNotificationsUI class NotificationViewController: UIViewController, UNNotificationContentExtension { @IBOutlet var label: UILabel? override func viewDidLoad() { super.viewDidLoad() // Do any required interface initialization here. } func didReceive(_ notification: UNNotification) { self.label?.text = notification.request.content.body } }
  • 17. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. MainInterface.storyboard 17
  • 18. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ハマった点の紹介 • アタッチメント画像がクリッピングされてしまう • NotificationService#didReceive(_:withContentHandler:) で時間の かかる処理を実行すると、Extensionの正常終了されてしまう • mutable-content:1を含むペイロードのプッシュ通知が届かない 端末が出現 • Content Extensionの中身が真っ白 18
  • 19. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ハマった点の紹介 • アタッチメント画像がクリッピングされてしまう • NotificationService#didReceive(_:withContentHandler:) で時間の かかる処理を実行すると、Extensionの正常終了されてしまう • mutable-content:1を含むペイロードのプッシュ通知が届かない 端末が出現 • Content Extensionの中身が真っ白 19
  • 20. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. アタッチメント画像がクリッピングされてしまう 20 APNs Payload Notification Service Extension 送信元画像 表示画像 クリッピングされてしまう ※ iOS 10.0で検証
  • 21. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. アタッチメント画像がクリッピングされてしまう let attachment = try UNNotificationAttachment(identifier: "image", url: path, options: nil) bestAttemptContent.attachments = [attachment]
  • 22. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. アタッチメント画像がクリッピングされてしまう 22
  • 23. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. アタッチメント画像がクリッピングされてしまう 23
  • 24. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. アタッチメント画像がクリッピングされてしまう let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0) let dicRep = rect.dictionaryRepresentation let options = [UNNotificationAttachmentOptionsThumbnailClippingRectKey:dicRep] let attachment = try UNNotificationAttachment(identifier: "image", url: path, options: options) bestAttemptContent.attachments = [attachment] 拡大できるが縮小はできない
  • 25. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. アタッチメント画像がクリッピングされてしまう 25 iOS 10.0 iOS 10.2 iOS 10.2で直ってました!
  • 26. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ハマった点の紹介 • アタッチメント画像がクリッピングされてしまう • NotificationService#didReceive(_:withContentHandler:) で時 間のかかる処理を実行すると、Extensionの正常終了されてし まう • mutable-content:1を含むペイロードのプッシュ通知が届かない 端末が出現 • Content Extensionの中身が真っ白 26
  • 27. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ハマった点の紹介 • アタッチメント画像がクリッピングされてしまう • NotificationService#didReceive(_:withContentHandler:) で時間の かかる処理を実行すると、Extensionの正常終了されてしまう • mutable-content:1を含むペイロードのプッシュ通知が届かない 端末が出現 • Content Extensionの中身が真っ白 27
  • 28. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. プッシュ通知が届かない端末が出現 28 マンガボックス iOS10対応版 リリース v2.9.1 v2.10.0 iOS 9 iOS 10 通知が届かないケース 9/12 9/14 iOS 10リリース プッシュ通知が届かない!
  • 29. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. プッシュ通知が届かない端末が出現 29 v2.9.1 v2.10.0 iOS 9 iOS 10 9/12 9/14 通知が届くケース iOS 10リリースマンガボックス iOS10対応版 リリース
  • 30. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. プッシュ通知が届かない端末が出現 30 v2.9.1 v2.10.0 iOS 9 iOS 10 通知が届かないケース 9/12 9/14 プッシュ通知が届かない! iOS 9では通知エクステンションが 含まれていないのでは
  • 31. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. プッシュ通知が届かない端末が出現 • 現象 • 届かないケース • iOS 9で通知エクステンションを含むアプリをインストールし、iOS 10にアップ デート後、プッシュ通知にmutable-content: 1が含まれる場合 • 届くケース • iOS 10にOSをアップデート後、エクステンションを含むアプリをインストール or アップデート • mutable-content: 1をペイロードから削除 • 考えられる要因 • iOS 9でインストールされるアプリには、通知エクステンションが含ま れていないのでは 31
  • 32. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ハマった点の紹介 • アタッチメント画像がクリッピングされてしまう • NotificationService#didReceive(_:withContentHandler:) で時間の かかる処理を実行すると、Extensionの正常終了されてしまう • mutable-content:1を含むペイロードのプッシュ通知が届かない 端末が出現 • Content Extensionの中身が真っ白 32
  • 33. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. プッシュ通知試してください! 33
  • 34. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ありがとうございました 34

Notes de l'éditeur

  1. iOS10がリリースされた マンガボックスチームもボトムアップで、新しい機能を実装しようとなった。 iOS10から入った、リッチな表現ができるプッシュ通知が、マンガボックスと一番相性が良いのではないかと思い、実装をすることにしました。
  2. iOS10がリリースされた マンガボックスチームもボトムアップで、新しい機能を実装しようとなった。 iOS10から入った、リッチな表現ができるプッシュ通知が、マンガボックスと一番相性が良いのではないかと思い、実装をすることにしました。
  3. 詳しくはWWDC2016のこの2つの試料を参照していただければと思います。
  4. マンガボックスでの導入事例ですが、 プッシュ通知をスライドの画像のそうに表示するようにしました。 3つのパターンの導入を行いました。 左側の画像は、通常通りのアタッチメント画像を付けるもの。 真ん中の画像は、その日の連載作品の1ページ目を表示するもの。 右側の画像は、その日の無料コミックスを表示するようになっています。
  5. 構成ですが、アプリ本体に3つのエクステンションが付属する形です。 Notification Service Extensionでアタッチメント画像を付与。 連載作品通知用と無料コミックス通知用で2つのNotification Content Extensionを作成しました。 簡単に、Notification Service ExtensionとNotification Content Extensionの説明をしようと思います。
  6. ペイロードを表示前に受け取り、表示をハンドリングできる アタッチメント画像の取得と表示 暗号化文字列の復号化
  7. payloadに mutable-content: 1 を入れることで、通知を表示する前にハンドリングすることができます。
  8. mutable-content: 1を含むペイロードを端末が受信すると、通知を表示する前にこのクラスのdidReceive()メソッドが呼ばれます。 didReceive()メソッド内で処理を行うことで、通知を表示する前に処理を行うことができます。
  9. この部分が主な処理を行う部分です。 ここの部分の実装を変えることで、プッシュ通知に表示する内容を変えることができます。
  10. Notification Contentエクステンションは、自由なUIでプッシュ通知の情報を表示することができます。 マンガボックスでは、2種類のエクステンションを追加しました。 左側は、その日の連載マンガの1ページ目を表示するエクステンション。 右側は、その日の無料コミックスをお知らせするエクステンション。 としました。
  11. 普通のViewControllerとStoryboard同様に、ここをカスタマイズすることによって、通知を開いた際の画面をカスタマイズできます
  12. 普通のViewControllerとStoryboard同様に、ここをカスタマイズすることによって、通知を開いた際の画面をカスタマイズできます
  13. ここから今回の発表のメインになるのですが、導入の際にハマった点を共有したいと思います。 今回4つハマった点を共有します。 一つずつ説明しようと思います。 当時iOS10.0を元に実装したので、iOS10.0のときの知見を共有します。 アタッチメント画像の中心がクリッピングされてしまう NotificationService#didReceive() で時間のかかる処理を実行すると、Extensionが正常終了されてしまう NotificationContentでジェスチャーのハンドリングができない プッシュ通知が届かない端末が出現
  14. ここから今回の発表のメインになるのですが、導入の際にハマった点を共有したいと思います。 今回4つハマった点を共有します。 一つずつ説明しようと思います。
  15. アタッチメント画像がクリッピングされてしまう デフォルトの状態で、UNNotificationAttachmentオブジェクトを作成するとクリッピングされてしまう。 UNNotificationAttachmentOptionsThumbnailClippingRectKey でクリッピングの範囲は指定できるが、画像全体を表示することができない。
  16. 画像データからUNNotificationAttachmentのインスタンスを作成し、attachmentsに追加することで通知に画像を追加することができます。 コードで言うと赤枠の中です。 しかし、この実装をするとアタッチメント画像が自動でクリッピングされてしまいます。 UNNotificationAttachmentのイニシャライザの引数のoptionsが気になったので、ドキュメントを見てみました。
  17. optionsにAttachment Attributesのリンクがあるので、さらに深掘ります。
  18. いくつかオプションの種類があります。その中に、 UNNotificationAttachmentOptionsThumbnailClippingRectKey というオプションがあります。 0.0 ~ 1.0までの値を持つCGRectをDictionary型に正規化した値を渡すというものです。
  19. パラメータを変えて試したものの画像全体を表示することはできなかった。 (iOS10 Betaの頃に、Appleのバグレポートを送ったのですが、未だにOpenのままなので) iOS 10.2で修正された
  20. こちらですが、先程のアタッチメント画像がクリッピングされてしまう問題を違う方法で解決できないかと考えました。 実際にはCoreGraphicsを使用して、画像データを縮小してからUNNotificationAttachmentに渡すという方法です。 結果ですが、元画像のサイズに小さければうまく表示されますが、元画像が大きい画像だと実行二時間がかかり、プロセスが正常終了されてしまいます。
  21. こちらですが、先程のアタッチメント画像がクリッピングされてしまう問題を違う方法で解決できないかと考えました。 実際にはCoreGraphicsを使用して、画像データを縮小してからUNNotificationAttachmentに渡すという方法です。 結果ですが、元画像のサイズに小さければうまく表示されますが、元画像が大きい画像だと実行二時間がかかり、プロセスが正常終了されてしまいます。
  22. マンガボックスは、GM版で申請を行い、iOS10対応アプリをiOS10が出る前にリリースしました。 9/12にアプリをリリースし、9/14にiOS10がリリースされました。 Payloadに、mutable-content: 1 を含む。NotificationServiceに対応したプッシュ通知の場合。 スライドのようなケースでプッシュ通知が届かない減少が発生しました。 なので、時系列はスライドのようになっています。 プッシュ通知が届かない端末が出現
  23. プッシュ通知が届かない端末が出現 Payloadに、mutable-content: 1 を含む。
  24. マンガボックスは、GM版で申請を行い、iOS10対応アプリをiOS10が出る前にリリースしました。 9/12にアプリをリリースし、9/14にiOS10がリリースされました。 Payloadに、mutable-content: 1 を含む。NotificationServiceに対応したプッシュ通知の場合。 スライドのようなケースでプッシュ通知が届かない減少が発生しました。 なので、時系列はスライドのようになっています。 プッシュ通知が届かない端末が出現
  25. マンガボックスにiOS10プッシュ通知を導入した際に、遭遇した問題点を共有させていただきました。 開発者のみなさまのためになれば良いなと思います。 いろいろな問題に直面しながら、iOS10プッシュ対応を行いました。 (新しい機能の実装は、時間が短い中で様々な問題点に遭遇しながら実装することにになりますが、新しい体験をユーザーに与えることができると思います。ぜひ、前のめりに調整していきましょう!)
  26. 是非マンガボックスをインストールして、試してみてもらえればと思います!