21
Ingressos no pulso Rodrigo Borges Desenvolvedor mobile @ Ingresse Levando festas e ingressos para o Apple Watch

Ingressos no pulso - Levando festas e ingressos para o Apple Watch

Embed Size (px)

Citation preview

Ingressos  no  pulso

Rodrigo  Borges  Desenvolvedor  mobile  @  Ingresse

Levando  festas  e  ingressos  para  o  Apple  Watch

•Startup  de  tecnologia  aplicada  a  eventos  fundada  em  Manaus/AM  

•Facilitar  a  compra  e  venda  de  ingressos  online  

•Software  móvel  completo  de  vendas  e  monitoramento  de  entrada  

•25  milhões  de  reais  processados  em  vendas  em  2014  

•400  eventos  cadastrados  em  um  mês  (novembro  de  2014)

Ingresse

• Manauara  

• Formado  em  Ciência  da  Computação  (UFAM)  

• Mestrado  em  Computação  Ubíqua  (UFMG)  

• Desenvolvedor  mobile  na  Ingresse  (Android  &  iOS)  

Rodrigo  Borges  Soares  @rdgborges  [email protected]  hUps://br.linkedin.com/in/rdgborges  

Ingresse  no  Apple  Watch

• Visualização  de  QR-­‐Codes  dos  ingressos  do  usuário  

• Visualização  de  informações  dos  próximos  eventos  na  cidade  

• Notificações  para  rápido  acesso  aos  ingressos  e  eventos

App  Ingresse  e  Apple  Watch

• A  app  Ingresse  utiliza  quase  todos  os  recursos  que  o  Apple  Watch  tem  a  oferecer,  como  Handoff,  notificações,  Glance,  App  Groups,  etc.

Desenvolvendo  para  o  Apple  Watch

• Um  app  para  Apple  Watch  é  uma  Extension  de  uma  app  para  iPhone  

• App  Extensions  é  um  recurso  lançado  no  iOS  8    

• Widgets  na  central  de  notificações,  teclados  customizados,  compartilhamento  em  redes  sociais  e…  relógios!

Navegação  entre  telas

• Page  based:  Telas  não  possuem  necessariamente  relação  entre  si  

• Hierarchical:  Relação  hierárquica  entre  telas  do  aplicativo

Navegação  hierárquica

[self pushControllerWithName:@"eventDetails" context:eventId];

- (void) awakeWithContext:(id)context { NSManagedObjectID *objectID = (NSManagedObjectID*) context;

NSManagedObject *eventObject = [managedObjectContext objectWithID:objectID];

// ...

}

• Chama  a  próxima  tela  do  aplicativo

• Na  nova  tela

Navegação  hierárquica

• awakeWithContext:  Carregar  os  dados  necessários  e  construir  sua  interface    

•willActivate:  Atualizar  interface  quando  ela  for  mostrada  novamente  para  o  usuário  (Por  exemplo,  quando  tela  ativar)

App  Groups:  Compartilhamento  de  dados

• Como  acessar  os  dados  do  app  principal  no  Apple  Watch?  

• Com  App  Groups,  os  dados  são  salvos  em  um  contêiner  que  pode  ser  acessado  tanto  do  app  para  iPhone  quanto  do  Apple  Watch  

• Vale  para  NSUserDefaults  e  também  para  CoreData!

App  Groups:  Compartilhamento  de  dados

• NSUserDefaults

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.ingresse"];

NSURL *appGroupsURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.ingresse"];

NSURL *storeURL = [appGroupsURL URLByAppendingPathComponent:@"ingresse.sqlite"];

[persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]

• CoreData

Notificações

• A  lógica  para  mostrar  notificações  é  baseada  no  contexto  do  usuário  

• Notificações  Estáticas  e  Dinâmicas  

• Limiar  de  tempo  para  carregar  notificações  dinâmicas

Notificações

- (void) didReceiveLocalNotification:(UILocalNotification*) localNotification withCompletion:(void (^)(WKUserNotificationInterfaceType)) completionHandler { NSString *eventId = [localNotification.userInfo objectForKey:@"eventId"]; }

- (void) didReceiveRemoteNotification:(NSDictionary*) remoteNotification withCompletion:(void (^)(WKUserNotificationInterfaceType)) completionHandler { NSString *eventId = [remoteNotification objectForKey:@"eventId"]; }

• Na  NotificationController:

Glance

• Glances  são  telas  que  mostram  conteúdo  relevante  das  apps  instaladas  no  Watch  

• O  conteúdo  deve  ser  rápido  e  fácil  de  ler  

• Ao  clicar  na  Glance,  usuário  é  levado  para  a  primeira  tela  do  aplicativo

Handoff

• Continuidade:  permite  que  ações  mais  complexas  sejam  continuadas  no  iPhone  

• Sem  necessidade  de  botão  “Abrir  no  iPhone”  

• Desenvolvedor  deve  declarar  o  contexto  de  navegação  para  a  app  principal

Handoff

• Na  InterfaceController:

Handoff

- (void) willActivate { [self updateUserActivity:@"com.ingresse.event.details" userInfo:@{@"eventId": eventId} webpageURL:nil]; }

• Declarar  um  array  com  nome  “NSUserActivityTypes"  no  .plist  da  app  principal  

• Adicionar  os  identificadores  das  atividades  no  array  (Exemplo:  “com.ingresse.event.details”)

• Na  AppDelegate  do  app  principal:

Handoff

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler { NSDictionary *userInfo = userActivity.userInfo; NSString *activityType = userActivity.activityType;

NSString *eventId = [userInfo objectForKey:@"eventId"]; if ([activityType isEqualToString:@"com.ingresse.event.details"]) {

} return YES; }

Apple  Watch  drops

• É  uma  boa  prática  informar  ao  usuário  para  abrir  o  iPhone  para  ver  mais  informações  (Handoff).  Nada  de  botão  “Abrir  no  iPhone”!  

• Tanto  Glances  quanto  notificações  podem  ser  testadas  utilizando  o  simulador  do  Xcode  

• Os  números  de  Version  e  Build  devem  ser  os  mesmos  na  app  principal  e  na  app  para  o  Apple  Watch  

• Não  esqueça  de  migrar  seus  dados  para  o  armazenamento  compartilhado  ao  utilizar  App  Groups  

Referências

• WatchKit  (Apple  Developer).  Seção  sobre  o  Apple  Watch  do  site  de  desenvolvedores  da  Apple.                                                    https://developer.apple.com/watchkit/  

• Ingressos  no  pulso  (Medium).  https://medium.com/@rdgborges/ingressos-­‐no-­‐pulso-­‐5b0b43162709  

• Watch  Aware:  Base  de  dados  de  apps  para  Apple  Watch  publicadas  na  App  Store  (e  onde  eu  fiz  a  imagem  legal  do  primeiro  slide  ☺).  http://watchaware.com/  

That’s  all  folks!

Rodrigo  Borges  Desenvolvedor  mobile  @rdgborges  [email protected]  hUps://br.linkedin.com/in/rdgborges  

Rodrigo  Maués  Designer  de  UX  e  desenvolvedor  mobile  @rdgmaues  [email protected]  hUps://br.linkedin.com/in/rdgmaues

Marcelo  Bissuh  Gerente  de  projetos  @bissuh  [email protected]  hUps://br.linkedin.com/in/bissuh