SlideShare a Scribd company logo
1 of 47
Download to read offline
iMessage Apps
от стикеров до банковских
приложений за 30 минут
Вадим Дробинин
drobinin.com
Вадим Дробинин, vadim@drobinin.com
В двух словах
• Как всё начиналось
• iMessage Apps
• А правда ли инновация?
• В поисках смысла
• Ближе к коду
• Безопасность
• Монетизация и прочий профит
2
– Lauren Goode, The Verge
“All of the software I use now is available on
Android: all of my top email, calendar, music,
fitness, photography, task-based, work
collaboration, and social networking apps are
there.
But one app is not, and that’s iMessage.”
iMessage: экскурс в
историю
Вадим Дробинин, vadim@drobinin.com5
• 2007-2011:
• Только на iPhone
• Текстовые сообщения,
позже MMS,
индикаторы ошибок,
поиск и удаление
нескольких сообщений
одновременно
Messages.app
Вадим Дробинин, vadim@drobinin.com6
Скотт Форстолл, WWDC 2011
iMessage Apps
Вадим Дробинин, vadim@drobinin.com10
• AirBnB
• JibJab
• Square Cash
• Scanbot
• Стикеры (сотни их!)
iMessage Apps
Вадим Дробинин, vadim@drobinin.com
Обратная поддержка
• iPhone и iPad с iOS 10
• Mac с macOS Sierra
• Apple Watch с watchOS 3
11
iOS 10 iOS 9
А правда ли инновация?
Вадим Дробинин, vadim@drobinin.com
А правда ли инновация?
• IRC
• ICQ
• Telegram
• Facebook
• ???
13
Вадим Дробинин, vadim@drobinin.com14
Вадим Дробинин, vadim@drobinin.com
WeChat
• 700 млн. активных пользователей ежемесячно
• С 2013 года: открытая платформа для ботов
• Очень популярна среди компаний
15
Вадим Дробинин, vadim@drobinin.com16
WeChat
Вадим Дробинин, vadim@drobinin.com17
Uber
Вадим Дробинин, vadim@drobinin.com18
Baidu
Вадим Дробинин, vadim@drobinin.com19
IKEA
В поисках смысла
Вадим Дробинин, vadim@drobinin.com21
Дэн Грувер, «Bots won’t replace apps. Better
apps will replace apps.»
Ближе к коду
Вадим Дробинин, vadim@drobinin.com
//
// MessagesViewController.swift
// MessagesExtension
//
// Created by Vadim Drobinin on 27/10/16.
// Copyright © 2016 Vadim Drobinin. All rights reserved.
//
import UIKit
import Messages
class MessagesViewController: MSMessagesAppViewController {
@IBOutlet weak var stepper: UIStepper!
@IBAction func didPress(button sender: AnyObject) {
if let image = createImageForMessage(), let conversation = activeConversation {
let layout = MSMessageTemplateLayout()
layout.image = image
layout.caption = "Stepper Value"
let message = MSMessage()
message.layout = layout
message.url = URL(string: "emptyURL")
conversation.insert(message, completionHandler: { (error: NSError?) in
print(error)
})
}
}
func createImageForMessage() -> UIImage? {
let background = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
background.backgroundColor = UIColor.white()
let label = UILabel(frame: CGRect(x: 75, y: 75, width: 150, height: 150))
label.font = UIFont.systemFont(ofSize: 56.0)
label.backgroundColor = UIColor.red()
label.textColor = UIColor.white()
label.text = "(Int(stepper.value))"
label.textAlignment = .center
label.layer.cornerRadius = label.frame.size.width/2.0
label.clipsToBounds = true
background.addSubview(label)
background.frame.origin = CGPoint(x: view.frame.size.width, y: view.frame.size.height)
view.addSubview(background)
UIGraphicsBeginImageContextWithOptions(background.frame.size, false, UIScreen.main().scale)
background.drawHierarchy(in: background.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
background.removeFromSuperview()
return image
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
Ice Cream Builder
Source
Вадим Дробинин, vadim@drobinin.com24
Xcode 8
Вадим Дробинин, vadim@drobinin.com25
Compact vs. Expanded
• Messages Extension
Lifecycle:
• presentationStyle
• requestPresentationStyle
• willTransition
• didTransition * Здесь и далее: иллюстрации Bartłomiej Kozal
Вадим Дробинин, vadim@drobinin.com26
Active or Inactive?
Вадим Дробинин, vadim@drobinin.com27
Active or Inactive?
Вадим Дробинин, vadim@drobinin.com28
Constraints
Вадим Дробинин, vadim@drobinin.com29
Структура
class CompactViewController: UIViewController {
// ...
}
class ExpandedViewController: UIViewController {
// ...
}
class MessagesViewController: MSMessagesAppViewController {
// ...
}
Вадим Дробинин, vadim@drobinin.com30
Структура
class MessagesViewController: MSMessagesAppViewController {
override func willBecomeActive(with conversation: MSConversation) {
super.willBecomeActive(with: conversation)
presentVC(for: conversation, with: presentationStyle)
}
override func willTransition(to presentationStyle:
MSMessagesAppPresentationStyle) {
guard let conversation = activeConversation else {
fatalError("Expected the active conversation")
}
presentVC(for: conversation, with: presentationStyle)
}
}
Вадим Дробинин, vadim@drobinin.com31
Структура
class MessagesViewController: MSMessagesAppViewController {
override func willBecomeActive(with conversation: MSConversation) {
// ...
}
override func willTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
// ...
}
private func presentVC(for conversation: MSConversation, with presentationStyle:
MSMessagesAppPresentationStyle) {
let controller: UIViewController
if presentationStyle == .compact {
controller = instantiateCompactVC()
} else {
controller = instantiateExpandedVC()
}
addChildViewController(controller)
// ...constraints and view setup...
view.addSubview(controller.view)
controller.didMove(toParentViewController: self)
}
}
Вадим Дробинин, vadim@drobinin.com32
Структура
class MessagesViewController: MSMessagesAppViewController {
override func willBecomeActive(with conversation: MSConversation) {
// ...
}
override func willTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
// ...
}
private func presentVC(for conversation: MSConversation, with presentationStyle:
MSMessagesAppPresentationStyle) {
// ...
}
private func instantiateCompactVC() -> UIViewController {
guard let compactVC = storyboard?.instantiateViewController(withIdentifier: "CompactVC")
as? CompactViewController else {
fatalError("Can't instantiate CompactViewController")
}
return compactVC
}
private func instantiateExpandedVC() -> UIViewController {
guard let expandedVC = storyboard?.instantiateViewController(withIdentifier:
"ExpandedVC") as? ExpandedViewController else {
fatalError("Can't instantiate ExpandedViewController")
}
return expandedVC
}
}
Вадим Дробинин, vadim@drobinin.com33
Сообщение
Вадим Дробинин, vadim@drobinin.com34
Сообщение
private func composeMessage() {
let layout = MSMessageTemplateLayout()
layout.image = UIImage(named: “cocoaheads-logo.png“)
layout.imageTitle = “Vadim Drobinin Demo"
layout.caption = “Hello, CocoaHeads!"
let message = MSMessage()
message.shouldExpire = true
message.layout = layout
}
Вадим Дробинин, vadim@drobinin.com35
WWDC 2016
WWDC Session, Part 1
(Introduction and
Stickers)
WWDC Session, Part 2
(Interactive iMessage
Apps)
Безопасность
Вадим Дробинин, vadim@drobinin.com
Безопасность
• У бота нет доступа к сообщениям (→ нельзя
ответить на текстовую команду)
• Нельзя инициировать диалог
• Зависимость от Apple ID
• Контакты в iMessage хранятся на серверах
Apple 30 дней *
37
* И многие этим очень недовольны :)
Монетизация и
прочий профит
– Lauren Goode, The Verge
For a company that has failed at
social networks, Apple has
inadvertently built one with iMessage’s
blue bubbles.
Вадим Дробинин, vadim@drobinin.com
Немного статистики
40
Cтикеры в среднем в три раза
увеличивают количество загрузок
основного приложения
* Разумеется, всё не так просто.
*
Вадим Дробинин, vadim@drobinin.com42
Вадим Дробинин, vadim@drobinin.com
Монетизация
• Отдельный App Store
• Огромный сегмент рынка
• «Экономика чата» (Forbes)
• In-App Purchases
43
Вадим Дробинин, vadim@drobinin.com
Монетизация
• Отдельный App Store
• Огромный сегмент рынка
• «Экономика чата» (Forbes)
• In-App Purchases
44
Отправьте «Привет» на
vadim@drobinin.com
прямо сейчас.
Вадим Дробинин, vadim@drobinin.com
Что дальше?
• Jim Martin, “What are bots?”

https://vk.cc/5LAUyz
• Dan Grover, “Bots won’t replace apps”

https://vk.cc/5LAUoz
• Apple, Messages API Documentation

https://vk.cc/5LAV0n
• Vadim Drobinin, “UI/UX глазами разработчика”

https://vk.cc/5LAWcG
• Bartłomiej Kozal, “Building an interactive iMessage application”

https://vk.cc/5LAUH1
• John Voorhes, “Exploring the iMessage App Store One Month Later”

https://vk.cc/5LAU9Z
46
Спасибо за внимание!
Вадим Дробинин
twitter.com/valzevul

More Related Content

Viewers also liked

Real estate investments to Italy (Chinese)
Real estate investments to Italy (Chinese)Real estate investments to Italy (Chinese)
Real estate investments to Italy (Chinese)Marco Mazzeschi
 
Monash University Prototyping Resources
Monash University Prototyping ResourcesMonash University Prototyping Resources
Monash University Prototyping ResourcesLaura Faulconer
 
掌握開啓連鎖加盟關鍵
掌握開啓連鎖加盟關鍵掌握開啓連鎖加盟關鍵
掌握開啓連鎖加盟關鍵鼎新電腦
 
Get to Know Your Holiday Customers
Get to Know Your Holiday CustomersGet to Know Your Holiday Customers
Get to Know Your Holiday CustomersKeith Rouse, OMCP
 
Заботимся правильно (ResearchKit, CareKit, HealthKit) — Вадим Дробинин (Vadim...
Заботимся правильно (ResearchKit, CareKit, HealthKit) — Вадим Дробинин (Vadim...Заботимся правильно (ResearchKit, CareKit, HealthKit) — Вадим Дробинин (Vadim...
Заботимся правильно (ResearchKit, CareKit, HealthKit) — Вадим Дробинин (Vadim...Vadim Drobinin
 
淘寶實戰班2016第3期v1
淘寶實戰班2016第3期v1淘寶實戰班2016第3期v1
淘寶實戰班2016第3期v1Chen Terry
 
Waste Heat Recovery  System in Cement Plant
Waste Heat Recovery  System in Cement PlantWaste Heat Recovery  System in Cement Plant
Waste Heat Recovery  System in Cement PlantAbdul Haseeb
 
Защищаем себя и пользователей — Вадим Дробинин (iOS Security Guide by Vadim D...
Защищаем себя и пользователей — Вадим Дробинин (iOS Security Guide by Vadim D...Защищаем себя и пользователей — Вадим Дробинин (iOS Security Guide by Vadim D...
Защищаем себя и пользователей — Вадим Дробинин (iOS Security Guide by Vadim D...Vadim Drobinin
 

Viewers also liked (10)

Real estate investments to Italy (Chinese)
Real estate investments to Italy (Chinese)Real estate investments to Italy (Chinese)
Real estate investments to Italy (Chinese)
 
MTech _certificate
MTech _certificateMTech _certificate
MTech _certificate
 
Juego 1
Juego 1Juego 1
Juego 1
 
Monash University Prototyping Resources
Monash University Prototyping ResourcesMonash University Prototyping Resources
Monash University Prototyping Resources
 
掌握開啓連鎖加盟關鍵
掌握開啓連鎖加盟關鍵掌握開啓連鎖加盟關鍵
掌握開啓連鎖加盟關鍵
 
Get to Know Your Holiday Customers
Get to Know Your Holiday CustomersGet to Know Your Holiday Customers
Get to Know Your Holiday Customers
 
Заботимся правильно (ResearchKit, CareKit, HealthKit) — Вадим Дробинин (Vadim...
Заботимся правильно (ResearchKit, CareKit, HealthKit) — Вадим Дробинин (Vadim...Заботимся правильно (ResearchKit, CareKit, HealthKit) — Вадим Дробинин (Vadim...
Заботимся правильно (ResearchKit, CareKit, HealthKit) — Вадим Дробинин (Vadim...
 
淘寶實戰班2016第3期v1
淘寶實戰班2016第3期v1淘寶實戰班2016第3期v1
淘寶實戰班2016第3期v1
 
Waste Heat Recovery  System in Cement Plant
Waste Heat Recovery  System in Cement PlantWaste Heat Recovery  System in Cement Plant
Waste Heat Recovery  System in Cement Plant
 
Защищаем себя и пользователей — Вадим Дробинин (iOS Security Guide by Vadim D...
Защищаем себя и пользователей — Вадим Дробинин (iOS Security Guide by Vadim D...Защищаем себя и пользователей — Вадим Дробинин (iOS Security Guide by Vadim D...
Защищаем себя и пользователей — Вадим Дробинин (iOS Security Guide by Vadim D...
 

Similar to Вадим Дробинин (Vadim Drobinin) — iMessage Apps: от стикеров до банковских приложений за 30 минут

DevCon 2016 - Xamarin
DevCon 2016 - XamarinDevCon 2016 - Xamarin
DevCon 2016 - XamarinAnton Shunkov
 
Расчетная работа
Расчетная работаРасчетная работа
Расчетная работаMestniy
 
Всеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексВсеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексElena Voynova
 
Адаптивный веб-дизайн на практике (Антон Епрев)
Адаптивный веб-дизайн на практике (Антон Епрев)Адаптивный веб-дизайн на практике (Антон Епрев)
Адаптивный веб-дизайн на практике (Антон Епрев)Ontico
 
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest
 
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"Yandex
 
"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft
"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft
"Windows Azure для мобильных платформ". Владимир Юнев, MicrosoftYandex
 
Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus Denis Tsvettsih
 
Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...
Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...
Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...Binwell
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidDataArt
 
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...it-people
 
Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Dmytro Mindra
 
aOS Moscow - R5 - Extend Microsoft graph to fit your business
aOS Moscow - R5 - Extend Microsoft graph to fit your businessaOS Moscow - R5 - Extend Microsoft graph to fit your business
aOS Moscow - R5 - Extend Microsoft graph to fit your businessaOS Community
 
MVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоватьсяMVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоватьсяYuri Shmakov
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 
Appium для народа
Appium для народаAppium для народа
Appium для народаSQALab
 
Microsoft Graph. Готовая Big Data для Ваших решений
Microsoft Graph. Готовая Big Data для Ваших решенийMicrosoft Graph. Готовая Big Data для Ваших решений
Microsoft Graph. Готовая Big Data для Ваших решенийVitaly Zhukov
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Проектирование архитектуры приложений
Проектирование архитектуры приложенийПроектирование архитектуры приложений
Проектирование архитектуры приложенийAndrew Mayorov
 

Similar to Вадим Дробинин (Vadim Drobinin) — iMessage Apps: от стикеров до банковских приложений за 30 минут (20)

DevCon 2016 - Xamarin
DevCon 2016 - XamarinDevCon 2016 - Xamarin
DevCon 2016 - Xamarin
 
Расчетная работа
Расчетная работаРасчетная работа
Расчетная работа
 
Всеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексВсеволод Шмыров, Яндекс
Всеволод Шмыров, Яндекс
 
Адаптивный веб-дизайн на практике (Антон Епрев)
Адаптивный веб-дизайн на практике (Антон Епрев)Адаптивный веб-дизайн на практике (Антон Епрев)
Адаптивный веб-дизайн на практике (Антон Епрев)
 
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
 
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
 
"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft
"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft
"Windows Azure для мобильных платформ". Владимир Юнев, Microsoft
 
Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus
 
Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...
Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...
Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
 
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
 
Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012
 
aOS Moscow - R5 - Extend Microsoft graph to fit your business
aOS Moscow - R5 - Extend Microsoft graph to fit your businessaOS Moscow - R5 - Extend Microsoft graph to fit your business
aOS Moscow - R5 - Extend Microsoft graph to fit your business
 
MVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоватьсяMVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоваться
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
Appium для народа
Appium для народаAppium для народа
Appium для народа
 
Microsoft Graph. Готовая Big Data для Ваших решений
Microsoft Graph. Готовая Big Data для Ваших решенийMicrosoft Graph. Готовая Big Data для Ваших решений
Microsoft Graph. Готовая Big Data для Ваших решений
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Проектирование архитектуры приложений
Проектирование архитектуры приложенийПроектирование архитектуры приложений
Проектирование архитектуры приложений
 

Вадим Дробинин (Vadim Drobinin) — iMessage Apps: от стикеров до банковских приложений за 30 минут