{"metadata":{"image":[],"title":"","description":""},"api":{"url":"","auth":"required","params":[],"results":{"codes":[]},"settings":""},"next":{"description":"","pages":[]},"title":"iOS","type":"basic","slug":"ios-sdk","excerpt":"Esta página descreve os passos necessários para integração IOS com a Dito.","body":"# Download do SDK\n\nFaça o download do [SDK para iOS](https://github.com/ditointernet/sdk_mobile_ios/raw/master/DitoSDK.zip) da Dito para fazer sua integração.\n\n# Criando o certificado SSL\n\nO primeiro passo é criar um App ID e o certificado SSL associado no site da [Apple Developer Member Center](https://developer.apple.com/membercenter/index.action). Este certificado irá permitir que o servidor envie *push notifications* para a aplicação identificado pelo *App ID*.\n\n## Pedido de Certificado\n\nPara começar, vamos precisar de um arquivo de solicitação para a assinatura do certificado. Isto será utilizado para autenticar a criação do certificado SSL.\n\n1. Inicie a aplicação \"Keychain Access\" no Mac.\n\n2. Selecione o item do menu “Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority…”.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/VQoHjlqEQBqQtaw8LvJc_1.jpg\",\n        \"1.jpg\",\n        \"879\",\n        \"579\",\n        \"#295992\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n3. Digite seu e-mail e nome.\n\n4. Selecione “Saved to disk” para realizar o download do arquivo .certSigningRequest. \n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/qnhCIEOKQkqjmP9EFwcJ_2.jpg\",\n        \"2.jpg\",\n        \"617\",\n        \"436\",\n        \"#b06163\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n## Criando um App ID\n\nToda aplicação iOS instalado no dispositivo do desenvolvedor necessita de um *App ID*. Como convenção, são representados por endereços invertidos (ex.: com.example.MyPushApp). \n\n1. Navegue no site do *Apple Developer Member Center* e selecione *Certificates*, *Identifiers* & *Profiles*.\n2. Selecione *Identifiers* na seção *iOS Apps*.\n3. Você verá a lista de seus *iOS App IDs*. Selecione o botão + para registrar um novo *App ID*.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/XKhaKHOISyWREr2kZiDB_3.jpg\",\n        \"3.jpg\",\n        \"976\",\n        \"493\",\n        \"#a55a71\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n4. Digite um nome para seu novo *App ID* e marque o checkbox para habilitar o serviço de Push Notifications, localizado abaixo de App Services.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/A6sX92J0TR6CTfAi463Q_4.jpg\",\n        \"4.jpg\",\n        \"674\",\n        \"168\",\n        \"#85aacf\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/vNsx8OntQ6SXiDhEEa4h_5.jpg\",\n        \"5.jpg\",\n        \"672\",\n        \"640\",\n        \"#449df5\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n5. Abaixo de *App ID Suffix* selecione *Explicit App ID*. Digite o Bundle ID de seu ap iOS. Esta string deve ser igual ao *Bundle Identifier* no arquivo *Info.plist* em seu app iOS.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/ita98uwzTOOKh3u29mZD_6.jpg\",\n        \"6.jpg\",\n        \"668\",\n        \"325\",\n        \"#3f9cf7\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n6. Selecione “Continue” e depois “Submit” para finalizar o registro.\n\n## Configurando o App ID para Push Notification\n\nAgora que você criou um *App ID*, é hora de configurar o *App ID* para *Push Notifications*.\n\n1. Selecione o novo App ID criado da lista de iOS App IDs, então selecione “Edit”.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/UHDUrLmSOWG2X7rR7CJv_7.jpg\",\n        \"7.jpg\",\n        \"723\",\n        \"787\",\n        \"#1d5b82\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n2. Desça até a seção de *Push Notifications*. Aqui você será capaz de criar tanto um Certificado SSL de desenvolvimento bem como uma de produção. Comece selecionando “Create Certificate” em “Development SSL Certificate”.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/1UHO3A0MSo6S3uGMiGSS_8.jpg\",\n        \"8.jpg\",\n        \"679\",\n        \"401\",\n        \"#409cf4\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n3. A próxima tela mostrará instruções para criar um *Certificate Signing Request (CSR)*. Isto é o mesmo arquivo .certSigningRequest criado anteriormente. Selecione “Continue”, então escolha “Choose File...” e coloque esse arquivo.\n4. Selecione “Generate”. Uma vez que o certificado estiver pronto, selecione “Done” e depois realize o download do certificado.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/zTiv2soHQ52NQe4NxYVf_9.jpg\",\n        \"9.jpg\",\n        \"677\",\n        \"479\",\n        \"#32b440\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n5. Clique duas vezes no certificado SSL baixado para instalá-lo em seu *Keychain*.\n6. No *Keychain Access*, dentro de “My Certificates”, procure o certificado que você adicionou.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/gtYiLsAtR3ayLKf8xz6A_10.jpg\",\n        \"10.jpg\",\n        \"879\",\n        \"339\",\n        \"#826b58\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n7. Clique com o botão direito, selecione \"Export Apple Development IOS Push Services:...\" e salve como arquivo .p12. Você será solicitado para digitar uma senha que será usada para proteger o certificado exportado. **Não digite uma senha de exportação quando solicitado!**\n\n# Criando um Provisioning Profile\n\nUm *Provisioning* Profile autentica seu dispositivo a rodar o app que você está desenvolvendo. Se você tiver criado um novo *App ID* ou alterado um existente você vai precisar gerar novamente o *Provisioning Profile* e instalá-lo. Se você tiver problemas ao usar um *profiling* existente, tente remover o App ID e configurá-lo novamente, Neste tutorial iremos criar um novo.\n\n1. Navegue no website *Apple Developer Member Center* e selecione *Certifies, Identifiers & Profiles*.\n\n2. Selecione *Provisioning Profiles* na seção *iOS Apps*.\n\n3. Selecione o botão + para criar um novo *Provisioning Profile*.\n\n4. Escolha “iOS App Development” como seu tipo de *Provisioning Profile* e clique em “Continue”.\n\n5. Escolha o *App IS* que foi criado no e clique em “Continue”.\n\n6. Selecione seu certificado de desenvolvedor iOS na próxima tela e clique em “Continue”.\n\n7. Você será solicitado para selecionar quais dispositivos srão incluídos no *Provisioning Profile*. Clique em “Continue” depois de selecionar quais dispositivos serão testados.\n\n8. Escolha um nome para esse *Provisioning Profile* e clique em “Generate”.\n\n9. Baixe o *Provisioning Profile* gerado clicando no botão “Download”.\n\n10. Instale o *profile* clicando duas vezes no arquivo baixado.\n\n# Desenvolvendo o código de Push Notification integrado com a Dito\n\nNa plataforma da Dito será necessário adicionar o certificado no formato .pem, para isso será necessário converter o arquivo .p12 para .pem:\n\n`````\n$ openssl pkcs12 -in cert.p12 -out apple_push_notification.pem -nodes -clcerts\n`````\n\nPara instalar o SDK para iOS da Dito em seu projeto, basta seguir os seguintes passos:\n\n* [Baixe o arquivo DitoSDK.framework](https://github.com/ditointernet/sdk_mobile_ios/raw/master/DitoSDK.framework.zip);\n\n* Copie para seu projeto;\n\nAdicionar as seguintes dependencias em seu projeto:\n\n* SystemConfiguration.framework\n\n* Security.framework\n\nEm *AppDelegate.m*:\n\n* Importe o seguinte header para seu projeto:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"#import <DitoSDK/DitoAPI.h>\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n* Insira a propriedade:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \":::at:::interface AppDelegate ()\\n\\[email protected] DitoCredentials *credentials;\\n\\[email protected]\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n* Initialize o SDK:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\\n\\n    // Inicializar as notificações\\n\\n    UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |\\n                                                    UIUserNotificationTypeBadge |\\n                                                    UIUserNotificationTypeSound);\\n\\n    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes\\n                                                                             categories:nil];\\n    [application registerUserNotificationSettings:settings];\\n    [application registerForRemoteNotifications];\\n\\n    // Inicializar o SDK Dito\\n\\n    [DitoAPI configure:@\\\"SUA_API_KEY\\\" secret:@\\\"SEU_SECRET_KEY\\\"];\\n\\n    self.credentials = [[DitoCredentials alloc] initWithID:@\\\"DITO_IOS_USER\\\" facebookID:nil reference:nil];\\n    NSDictionary *user = @{ @\\\"email\\\": @\\\"[email protected]\\\", @\\\"name\\\": @\\\"Dito IOS\\\" };\\n    \\n    [DitoAPI identify:self.credentials accessToken:nil data:user completion:nil];\\n   \\n    return YES;\\n}\\n\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\nObservação: Substitua as variáveis `SUA_API_KEY` e `SUA_SECRET` pelas suas chaves da Dito.\n\n* * Registre o token do IOS:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {\\n\\n    // Registrar o token do dispositivo com o webservice da Dito\\n    NSString * deviceTokenString = [[[[deviceToken description]\\n              stringByReplacingOccurrencesOfString: @\\\"<\\\" withString: @\\\"\\\"]\\n              stringByReplacingOccurrencesOfString: @\\\">\\\" withString: @\\\"\\\"]\\n              stringByReplacingOccurrencesOfString: @\\\" \\\" withString: @\\\"\\\"];\\n    \\n    [DitoAPI registerDevice:self.credentials deviceToken:deviceTokenString completion:^(id response, NSError *error) {\\n        NSLog(@\\\"registerDeviceCompletion - response: %@\\\", response);\\n        NSLog(@\\\"registerDeviceCompletion - error: %@\\\", error);\\n    }];\\n        \\n}\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n* Responda para o servidor ao abrir push notification:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {\\n\\n    NSNumber *notification = [userInfo objectForKey:@\\\"notification\\\"];\\n    NSString *link = [userInfo objectForKey:@\\\"link\\\"];\\n    NSString *notificationJSON = [NSString stringWithFormat:@\\\"{ \\\\\\\"notification\\\\\\\": \\\\\\\"%@\\\\\\\", \\\\\\\"link\\\\\\\": \\\\\\\"%@\\\\\\\" }\\\", notification, link];\\n\\n    [DitoAPI notificationRead:self.credentials message:notificationJSON completion:^(id response, NSError *error) {\\n        NSLog(@\\\"registerDeviceCompletion - response: %@\\\", response);\\n        NSLog(@\\\"registerDeviceCompletion - error: %@\\\", error);\\n    }];\\n}\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n* Verifique se ocorreu um erro na notificação:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"- (void)application:(UIApplication *)application\\ndidFailToRegisterForRemoteNotificationsWithError:(NSError *)error\\n{\\n    NSLog(@\\\"Error: %@\\\", error);\\n}\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n\n# Definições do SDK\n\n## Configuração\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"[DitoAPI configure:@\\\"SUA_API_KEY\\\" secret:@\\\"SEU_SECRET\\\"];\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n### Parâmetros de `configure`\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Parâmetro\",\n    \"h-1\": \"Obrigatório\",\n    \"h-2\": \"Tipo\",\n    \"0-0\": \"apiKey\",\n    \"h-3\": \"Default\",\n    \"h-4\": \"Descrição\",\n    \"1-0\": \"secret\",\n    \"0-1\": \"Sim\",\n    \"1-1\": \"Sim\",\n    \"0-2\": \"String\",\n    \"1-2\": \"String\",\n    \"0-3\": \"-\",\n    \"1-3\": \"-\",\n    \"0-4\": \"`API Key` da sua aplicação na Dito.\",\n    \"1-4\": \"`Secret` da sua aplicação na Dito.\"\n  },\n  \"cols\": 5,\n  \"rows\": 2\n}\n[/block]\n## Identificando seus usuários\n\nToda comunicação com a Dito através do SDK para iOS em que um usuário for necessário, será obrigatório o envio de um objeto do tipo `DitoCredentials` com o ID do usuário. \nEsse objeto é criado pelo método abaixo.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"DitoCredentials *credentials = [[DitoCredentials alloc] initWithID:@\\\"`userID`\\\" facebookID:@\\\"`facebookID`\\\" reference:@\\\"`reference`\\\"];\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n\n### Parâmetros de `DitoCredentials`\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Parâmetro\",\n    \"h-1\": \"Obrigatório\",\n    \"h-2\": \"Tipo\",\n    \"h-3\": \"Default\",\n    \"h-4\": \"Descrição\",\n    \"0-0\": \"userID\",\n    \"1-0\": \"facebookID\",\n    \"2-0\": \"reference\",\n    \"0-1\": \"Sim\",\n    \"1-1\": \"Sim\",\n    \"2-1\": \"Sim\",\n    \"0-2\": \"String\",\n    \"1-2\": \"String\",\n    \"2-2\": \"String\",\n    \"0-3\": \"-\",\n    \"1-3\": \"-\",\n    \"2-3\": \"-\",\n    \"0-4\": \"ID do usuário em seu **banco de dados**. Se essa informação não for necessária, você precisa passar esse parâmetro com o valor `null`.\",\n    \"1-4\": \"ID do usuário no **Facebook**. Você conseguirá esse ID no processo de login com o **Facebook**. Se essa informação não for necessária, você precisa passar esse parâmetro com o valor null.\",\n    \"2-4\": \"ID do usuário na **Dito**. Esse ID é retornado quando o usuário é enviado pela Dito. Se essa informação não for necessária, você precisa passar esse parâmetro com o valor `null`.\"\n  },\n  \"cols\": 5,\n  \"rows\": 3\n}\n[/block]\nSomente um dos parâmetros acima é obrigatório. Os outros valores deverão ser enviados com o valor `nil`.\n\n### Exemplo: Usuário da sua base\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"DitoCredentials *credentials = [[DitoCredentials alloc] initWithID:@\\\"ID_DO_USUARIO_NA_SUA_BASE\\\" facebookID:nil reference:nil];\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n### Exemplo: Usuário do Facebook\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"DitoCredentials *credentials = [[DitoCredentials alloc] initWithID:nil facebookID:@\\\"FACEBOOK_ID\\\" reference:nil];\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n## Cadastrando/Logando um usuário\n\nO envio de seus usuários para a Dito se dá pelo método DitoAPI identify.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"É recomendado uso do método `DitoAPI identify` sempre que o usuário abrir o aplicativo. Dessa forma garantimos que o usuário tenha evento de login todos os dias que ele usar o aplicativo.\"\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"[DitoAPI identify:`credentials` accessToken:`accessToken` data:`userData` completion: `completion`];\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n### Parâmetros de `identify`\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Parâmetro\",\n    \"h-1\": \"Obrigatório\",\n    \"h-2\": \"Tipo\",\n    \"h-3\": \"Defaul\",\n    \"h-4\": \"Descrição\",\n    \"0-0\": \"credentials\",\n    \"1-0\": \"accessToken\",\n    \"2-0\": \"userData\",\n    \"3-0\": \"completion\",\n    \"0-1\": \"Sim\",\n    \"1-1\": \"Não\",\n    \"2-1\": \"Não\",\n    \"3-1\": \"Não\",\n    \"0-2\": \"DitoCredentials\",\n    \"1-2\": \"String\",\n    \"2-2\": \"NSDictionary\",\n    \"3-2\": \"Function\",\n    \"0-3\": \"-\",\n    \"1-3\": \"-\",\n    \"3-3\": \"-\",\n    \"2-3\": \"-\",\n    \"0-4\": \"Objeto com a identificação do usuário.\",\n    \"1-4\": \"Access Token do usuário relacionado a uma das redes sociais suportadas pela Dito.\",\n    \"2-4\": \"Objeto com as informações do usuário, como: nome, email e dados personalizados. É recomendado o uso de um objeto JSON. Veja o exemplo abaixo.\",\n    \"3-4\": \"Função de callback chamada quando o método terminar de ser executado. Exemplo:\\n\\n```\\n^(id response, NSError *error) {\\n  // Tratar retorno aqui\\n}\\n```\"\n  },\n  \"cols\": 5,\n  \"rows\": 4\n}\n[/block]\n### Exemplo: DitoAPI identify\n\nObservação: Substitua as informações em `{{...}}` de acordo com seu usuário.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"DitoCredentials *credentials = [[DitoCredentials alloc] initWithID:@\\\"{{ID_DO_USUARIO_NA_SUA_BASE}}\\\" facebookID:nil reference:nil];\\n\\nNSDictionary *userData = @{\\n                            @\\\"nome_do_seu_dado_customizado\\\": @\\\"Valor do seu dado customizado\\\"\\n                            };\\n\\nNSData *userDataSerialized = [NSJSONSerialization dataWithJSONObject:userData options:0 error:nil];\\nNSString *userDataSerializedString = [[NSString alloc] initWithData:userDataSerialized encoding:NSUTF8StringEncoding];\\n\\nNSDictionary *user = @{\\n                      @\\\"email\\\": @\\\"EMAIL\\\",\\n                      @\\\"name\\\": @\\\"NOME\\\",\\n                      @\\\"birthday\\\": @\\\"DATA_NASCIMENTO\\\",\\n                      @\\\"location\\\": @\\\"CIDADE\\\",\\n                      @\\\"data\\\": userDataSerializedString\\n                      };\\n\\n[DitoAPI identify:credentials accessToken:nil data:user completion:nil];\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n## Acompanhamento de eventos\n\nO acompanhamento de eventos na Dito se dá pelo método `DitoAPI track`.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"[DitoAPI track:`credentials` event: `event` completion: `completion`];\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n### Parâmetros de `track`\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Parâmetro\",\n    \"h-1\": \"Obrigatório\",\n    \"h-2\": \"Tipo\",\n    \"h-3\": \"Default\",\n    \"h-4\": \"Descrição\",\n    \"0-0\": \"credentials\",\n    \"1-0\": \"event\",\n    \"2-0\": \"completion\",\n    \"0-1\": \"Sim\",\n    \"1-1\": \"Sim\",\n    \"2-1\": \"Não\",\n    \"0-2\": \"DitoCredentials\",\n    \"1-2\": \"NSDictionary\",\n    \"2-2\": \"Function\",\n    \"0-3\": \"-\",\n    \"1-3\": \"-\",\n    \"2-3\": \"-\",\n    \"0-4\": \"Objeto com a identificação do usuário.\",\n    \"1-4\": \"Objeto com as informações do evento. É recomendado o uso de um objeto JSON. Veja o exemplo abaixo.\",\n    \"2-4\": \"Função de callback chamada quando o método terminar de ser executado. Exemplo:\\n\\n```\\n^(id response, NSError *error) {\\n  // Tratar retorno aqui\\n}\\n```\"\n  },\n  \"cols\": 5,\n  \"rows\": 3\n}\n[/block]\n### Exemplo: DitoAPI track\n\nObservação: Substitua as informações em `{{...}}` de acordo com cada evento.\n\nATENÇÃO\n\nOs nomes dos eventos **DEVEM** ser enviados para a Dito em letras minúsculas, sem acentuação ou caracteres especiais. Caso o nome de suas ações seja composto por mais de uma palavra, estas devem ser separadas por hífen '-' conforme o exemplo abaixo:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"NSDictionary *event = @{\\n  @\\\"action\\\": @\\\"nome-do-evento\\\",\\n  @\\\"revenue\\\": @{{receita-gerada-pelo-evento}}, // Se o evento lhe rendeu alguma receita, você pode nos enviá-la pela propriedade \\\"revenue\\\". Ex: @99.9\\n  @\\\"data\\\": @{\\n    @\\\"nome_da_propriedade_do_evento\\\": @\\\"Valor da propriedade do evento\\\"\\n  }\\n};\\n\\n[DitoAPI track:credentials event: event completion:nil];\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n## Alias\n\nO método `DitoAPI alias` é usado para associar um usuário novo a um usuário existente.\n\nPor exemplo, você pode associar um usuário do `Facebook` a um usuário que já está cadastrado na Dito previamente.\n\nUtilize o código abaixo para associar um usuário:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"DitoAccount *account = [[DitoAccount alloc] initWithID:@\\\"FACEBOOK_ID\\\" accessToken:@\\\"ACCESS_TOKEN\\\" type:FACEBOOK];\\nNSArray *accounts = @[account];\\n\\n[DitoAPI alias:credentials accounts:accounts completion:nil];\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n## Unalias\n\nO método `DitoAPI unalias` tem a mesma estrutura do `DitoAPI alias`, com uma diferença: esse método desassocia um usuário, ou seja, ele desfaz o que o método `DitoAPI alias` faz.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"DitoAccount *account = [[DitoAccount alloc] initWithID:@\\\"FACEBOOK_ID\\\" type:FACEBOOK];\\nNSArray *accounts = @[account];\\n\\n[DitoAPI unalias:credentials accounts:accounts completion:nil];\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n## Notificações push\n\nPara que você consiga enviar notificações push com seu aplicativo usando a Dito, você precisa nos enviar o token de permissão do usuário.\n\nEsse token é o que permite ou não o envio de notificação para cada usuário da sua base. Sem o envio desse token usuário não receberá notificação push.\n\nAcesse a [explicação da Apple](https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html) e entenda como obter o token de permissão do usuário para que você possa enviar para a Dito.\n\n### Enviando o token do usuário\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"[DitoAPI registerDevice:credentials deviceToken:@\\\"TOKEN_DE_PERMISSAO_DO_USUARIO\\\" completion:nil];\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n### Removendo um token do usuário\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"[DitoAPI unregisterDevice:credentials deviceToken:@\\\"TOKEN_DE_PERMISSAO_DO_USUARIO\\\" completion:nil];\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]\n### Formato da notificação\n\nA Dito enviará as notificações push para seu aplicativo no seguinte formato:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"aps\\\": {\\n    \\\"alert\\\": \\\"MESSAGE\\\",\\n    \\\"sound\\\": \\\"default\\\",\\n    \\\"priority\\\": 10,\\n    \\\"content_available\\\": 1,\\n    \\\"badge: 0\\n  },\\n  \\\"notification\\\": \\\"ID_DA_NOTIFICACAO\\\",\\n  \\\"link\\\": \\\"DEEP_LINK_DA_NOTIFICACAO\\\"\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"A mensagem da notificação será enviada dentro do nó `alert`.\"\n}\n[/block]\n### Leitura da notificação\n\nQuando o usuário abrir uma notificação, o método `DitoSDK.notificationRead` deverá ser chamado passando o `JSON` enviado pela Dito como parâmetro.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {\\n NSNumber *notification = [userInfo objectForKey:@\\\"notification\\\"];\\n NSString *link = [userInfo objectForKey:@\\\"link\\\"];\\n NSString *notificationJSON = [NSString stringWithFormat:@\\\"{ \\\\\\\"notification\\\\\\\": \\\\\\\"%@\\\\\\\", \\\\\\\"link\\\\\\\": \\\\\\\"%@\\\\\\\" }\\\", notification, link];\\n\\n    [DitoAPI notificationRead:self.credentials message:notificationJSON completion:nil];\\n}\",\n      \"language\": \"objectivec\"\n    }\n  ]\n}\n[/block]","updates":[],"order":2,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"_id":"555cbc2a15a89b0d00c1af58","__v":37,"project":"5538fb24dc5dd00d00e1da91","githubsync":"","version":{"version":"1.0","version_clean":"1.0.0","codename":"","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["5538fb25dc5dd00d00e1da95","5538feec27f8540d0024f00e","5547cbd3d3427d0d00cd6e2d","554a574f0b54d30d007fe0f9","55afbdbef202b12100cd9eeb","5c016f198e69b802d4385e25","5c81470b175ad6002457d9fa","5c81472e74fd5a0063420bae","5c81476b2dd69100430ea5a4"],"_id":"5538fb25dc5dd00d00e1da94","createdAt":"2015-04-23T14:01:09.040Z","project":"5538fb24dc5dd00d00e1da91","__v":9,"releaseDate":"2015-04-23T14:01:09.040Z"},"category":{"sync":{"isSync":false,"url":""},"pages":["5538ff4227f8540d0024f00f","554264348aeff51700a20e44","5547c963d3427d0d00cd6e28","5547c9ea70b82f0d0027c312","5547c9fc70b82f0d0027c314","5547ca09d3427d0d00cd6e2a","555cbc2a15a89b0d00c1af58","5566fa95f579050d00c3d63e"],"title":"SDKs","slug":"sdks","order":1,"from_sync":false,"reference":false,"_id":"5538feec27f8540d0024f00e","createdAt":"2015-04-23T14:17:16.792Z","project":"5538fb24dc5dd00d00e1da91","__v":8,"version":"5538fb25dc5dd00d00e1da94"},"createdAt":"2015-05-20T16:54:02.280Z","user":"5538fa99545cd90d0011e593","parentDoc":null}

iOS

Esta página descreve os passos necessários para integração IOS com a Dito.

# Download do SDK Faça o download do [SDK para iOS](https://github.com/ditointernet/sdk_mobile_ios/raw/master/DitoSDK.zip) da Dito para fazer sua integração. # Criando o certificado SSL O primeiro passo é criar um App ID e o certificado SSL associado no site da [Apple Developer Member Center](https://developer.apple.com/membercenter/index.action). Este certificado irá permitir que o servidor envie *push notifications* para a aplicação identificado pelo *App ID*. ## Pedido de Certificado Para começar, vamos precisar de um arquivo de solicitação para a assinatura do certificado. Isto será utilizado para autenticar a criação do certificado SSL. 1. Inicie a aplicação "Keychain Access" no Mac. 2. Selecione o item do menu “Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority…”. [block:image] { "images": [ { "image": [ "https://files.readme.io/VQoHjlqEQBqQtaw8LvJc_1.jpg", "1.jpg", "879", "579", "#295992", "" ] } ] } [/block] 3. Digite seu e-mail e nome. 4. Selecione “Saved to disk” para realizar o download do arquivo .certSigningRequest. [block:image] { "images": [ { "image": [ "https://files.readme.io/qnhCIEOKQkqjmP9EFwcJ_2.jpg", "2.jpg", "617", "436", "#b06163", "" ] } ] } [/block] ## Criando um App ID Toda aplicação iOS instalado no dispositivo do desenvolvedor necessita de um *App ID*. Como convenção, são representados por endereços invertidos (ex.: com.example.MyPushApp). 1. Navegue no site do *Apple Developer Member Center* e selecione *Certificates*, *Identifiers* & *Profiles*. 2. Selecione *Identifiers* na seção *iOS Apps*. 3. Você verá a lista de seus *iOS App IDs*. Selecione o botão + para registrar um novo *App ID*. [block:image] { "images": [ { "image": [ "https://files.readme.io/XKhaKHOISyWREr2kZiDB_3.jpg", "3.jpg", "976", "493", "#a55a71", "" ] } ] } [/block] 4. Digite um nome para seu novo *App ID* e marque o checkbox para habilitar o serviço de Push Notifications, localizado abaixo de App Services. [block:image] { "images": [ { "image": [ "https://files.readme.io/A6sX92J0TR6CTfAi463Q_4.jpg", "4.jpg", "674", "168", "#85aacf", "" ] } ] } [/block] [block:image] { "images": [ { "image": [ "https://files.readme.io/vNsx8OntQ6SXiDhEEa4h_5.jpg", "5.jpg", "672", "640", "#449df5", "" ] } ] } [/block] 5. Abaixo de *App ID Suffix* selecione *Explicit App ID*. Digite o Bundle ID de seu ap iOS. Esta string deve ser igual ao *Bundle Identifier* no arquivo *Info.plist* em seu app iOS. [block:image] { "images": [ { "image": [ "https://files.readme.io/ita98uwzTOOKh3u29mZD_6.jpg", "6.jpg", "668", "325", "#3f9cf7", "" ] } ] } [/block] 6. Selecione “Continue” e depois “Submit” para finalizar o registro. ## Configurando o App ID para Push Notification Agora que você criou um *App ID*, é hora de configurar o *App ID* para *Push Notifications*. 1. Selecione o novo App ID criado da lista de iOS App IDs, então selecione “Edit”. [block:image] { "images": [ { "image": [ "https://files.readme.io/UHDUrLmSOWG2X7rR7CJv_7.jpg", "7.jpg", "723", "787", "#1d5b82", "" ] } ] } [/block] 2. Desça até a seção de *Push Notifications*. Aqui você será capaz de criar tanto um Certificado SSL de desenvolvimento bem como uma de produção. Comece selecionando “Create Certificate” em “Development SSL Certificate”. [block:image] { "images": [ { "image": [ "https://files.readme.io/1UHO3A0MSo6S3uGMiGSS_8.jpg", "8.jpg", "679", "401", "#409cf4", "" ] } ] } [/block] 3. A próxima tela mostrará instruções para criar um *Certificate Signing Request (CSR)*. Isto é o mesmo arquivo .certSigningRequest criado anteriormente. Selecione “Continue”, então escolha “Choose File...” e coloque esse arquivo. 4. Selecione “Generate”. Uma vez que o certificado estiver pronto, selecione “Done” e depois realize o download do certificado. [block:image] { "images": [ { "image": [ "https://files.readme.io/zTiv2soHQ52NQe4NxYVf_9.jpg", "9.jpg", "677", "479", "#32b440", "" ] } ] } [/block] 5. Clique duas vezes no certificado SSL baixado para instalá-lo em seu *Keychain*. 6. No *Keychain Access*, dentro de “My Certificates”, procure o certificado que você adicionou. [block:image] { "images": [ { "image": [ "https://files.readme.io/gtYiLsAtR3ayLKf8xz6A_10.jpg", "10.jpg", "879", "339", "#826b58", "" ] } ] } [/block] 7. Clique com o botão direito, selecione "Export Apple Development IOS Push Services:..." e salve como arquivo .p12. Você será solicitado para digitar uma senha que será usada para proteger o certificado exportado. **Não digite uma senha de exportação quando solicitado!** # Criando um Provisioning Profile Um *Provisioning* Profile autentica seu dispositivo a rodar o app que você está desenvolvendo. Se você tiver criado um novo *App ID* ou alterado um existente você vai precisar gerar novamente o *Provisioning Profile* e instalá-lo. Se você tiver problemas ao usar um *profiling* existente, tente remover o App ID e configurá-lo novamente, Neste tutorial iremos criar um novo. 1. Navegue no website *Apple Developer Member Center* e selecione *Certifies, Identifiers & Profiles*. 2. Selecione *Provisioning Profiles* na seção *iOS Apps*. 3. Selecione o botão + para criar um novo *Provisioning Profile*. 4. Escolha “iOS App Development” como seu tipo de *Provisioning Profile* e clique em “Continue”. 5. Escolha o *App IS* que foi criado no e clique em “Continue”. 6. Selecione seu certificado de desenvolvedor iOS na próxima tela e clique em “Continue”. 7. Você será solicitado para selecionar quais dispositivos srão incluídos no *Provisioning Profile*. Clique em “Continue” depois de selecionar quais dispositivos serão testados. 8. Escolha um nome para esse *Provisioning Profile* e clique em “Generate”. 9. Baixe o *Provisioning Profile* gerado clicando no botão “Download”. 10. Instale o *profile* clicando duas vezes no arquivo baixado. # Desenvolvendo o código de Push Notification integrado com a Dito Na plataforma da Dito será necessário adicionar o certificado no formato .pem, para isso será necessário converter o arquivo .p12 para .pem: ````` $ openssl pkcs12 -in cert.p12 -out apple_push_notification.pem -nodes -clcerts ````` Para instalar o SDK para iOS da Dito em seu projeto, basta seguir os seguintes passos: * [Baixe o arquivo DitoSDK.framework](https://github.com/ditointernet/sdk_mobile_ios/raw/master/DitoSDK.framework.zip); * Copie para seu projeto; Adicionar as seguintes dependencias em seu projeto: * SystemConfiguration.framework * Security.framework Em *AppDelegate.m*: * Importe o seguinte header para seu projeto: [block:code] { "codes": [ { "code": "#import <DitoSDK/DitoAPI.h>", "language": "objectivec" } ] } [/block] * Insira a propriedade: [block:code] { "codes": [ { "code": "@interface AppDelegate ()\n\[email protected] DitoCredentials *credentials;\n\[email protected]", "language": "objectivec" } ] } [/block] * Initialize o SDK: [block:code] { "codes": [ { "code": "- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n\n // Inicializar as notificações\n\n UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |\n UIUserNotificationTypeBadge |\n UIUserNotificationTypeSound);\n\n UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes\n categories:nil];\n [application registerUserNotificationSettings:settings];\n [application registerForRemoteNotifications];\n\n // Inicializar o SDK Dito\n\n [DitoAPI configure:@\"SUA_API_KEY\" secret:@\"SEU_SECRET_KEY\"];\n\n self.credentials = [[DitoCredentials alloc] initWithID:@\"DITO_IOS_USER\" facebookID:nil reference:nil];\n NSDictionary *user = @{ @\"email\": @\"[email protected]\", @\"name\": @\"Dito IOS\" };\n \n [DitoAPI identify:self.credentials accessToken:nil data:user completion:nil];\n \n return YES;\n}\n", "language": "objectivec" } ] } [/block] Observação: Substitua as variáveis `SUA_API_KEY` e `SUA_SECRET` pelas suas chaves da Dito. * * Registre o token do IOS: [block:code] { "codes": [ { "code": "- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {\n\n // Registrar o token do dispositivo com o webservice da Dito\n NSString * deviceTokenString = [[[[deviceToken description]\n stringByReplacingOccurrencesOfString: @\"<\" withString: @\"\"]\n stringByReplacingOccurrencesOfString: @\">\" withString: @\"\"]\n stringByReplacingOccurrencesOfString: @\" \" withString: @\"\"];\n \n [DitoAPI registerDevice:self.credentials deviceToken:deviceTokenString completion:^(id response, NSError *error) {\n NSLog(@\"registerDeviceCompletion - response: %@\", response);\n NSLog(@\"registerDeviceCompletion - error: %@\", error);\n }];\n \n}", "language": "objectivec" } ] } [/block] * Responda para o servidor ao abrir push notification: [block:code] { "codes": [ { "code": "- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {\n\n NSNumber *notification = [userInfo objectForKey:@\"notification\"];\n NSString *link = [userInfo objectForKey:@\"link\"];\n NSString *notificationJSON = [NSString stringWithFormat:@\"{ \\\"notification\\\": \\\"%@\\\", \\\"link\\\": \\\"%@\\\" }\", notification, link];\n\n [DitoAPI notificationRead:self.credentials message:notificationJSON completion:^(id response, NSError *error) {\n NSLog(@\"registerDeviceCompletion - response: %@\", response);\n NSLog(@\"registerDeviceCompletion - error: %@\", error);\n }];\n}", "language": "objectivec" } ] } [/block] * Verifique se ocorreu um erro na notificação: [block:code] { "codes": [ { "code": "- (void)application:(UIApplication *)application\ndidFailToRegisterForRemoteNotificationsWithError:(NSError *)error\n{\n NSLog(@\"Error: %@\", error);\n}", "language": "objectivec" } ] } [/block] # Definições do SDK ## Configuração [block:code] { "codes": [ { "code": "[DitoAPI configure:@\"SUA_API_KEY\" secret:@\"SEU_SECRET\"];", "language": "objectivec" } ] } [/block] ### Parâmetros de `configure` [block:parameters] { "data": { "h-0": "Parâmetro", "h-1": "Obrigatório", "h-2": "Tipo", "0-0": "apiKey", "h-3": "Default", "h-4": "Descrição", "1-0": "secret", "0-1": "Sim", "1-1": "Sim", "0-2": "String", "1-2": "String", "0-3": "-", "1-3": "-", "0-4": "`API Key` da sua aplicação na Dito.", "1-4": "`Secret` da sua aplicação na Dito." }, "cols": 5, "rows": 2 } [/block] ## Identificando seus usuários Toda comunicação com a Dito através do SDK para iOS em que um usuário for necessário, será obrigatório o envio de um objeto do tipo `DitoCredentials` com o ID do usuário. Esse objeto é criado pelo método abaixo. [block:code] { "codes": [ { "code": "DitoCredentials *credentials = [[DitoCredentials alloc] initWithID:@\"`userID`\" facebookID:@\"`facebookID`\" reference:@\"`reference`\"];", "language": "objectivec" } ] } [/block] ### Parâmetros de `DitoCredentials` [block:parameters] { "data": { "h-0": "Parâmetro", "h-1": "Obrigatório", "h-2": "Tipo", "h-3": "Default", "h-4": "Descrição", "0-0": "userID", "1-0": "facebookID", "2-0": "reference", "0-1": "Sim", "1-1": "Sim", "2-1": "Sim", "0-2": "String", "1-2": "String", "2-2": "String", "0-3": "-", "1-3": "-", "2-3": "-", "0-4": "ID do usuário em seu **banco de dados**. Se essa informação não for necessária, você precisa passar esse parâmetro com o valor `null`.", "1-4": "ID do usuário no **Facebook**. Você conseguirá esse ID no processo de login com o **Facebook**. Se essa informação não for necessária, você precisa passar esse parâmetro com o valor null.", "2-4": "ID do usuário na **Dito**. Esse ID é retornado quando o usuário é enviado pela Dito. Se essa informação não for necessária, você precisa passar esse parâmetro com o valor `null`." }, "cols": 5, "rows": 3 } [/block] Somente um dos parâmetros acima é obrigatório. Os outros valores deverão ser enviados com o valor `nil`. ### Exemplo: Usuário da sua base [block:code] { "codes": [ { "code": "DitoCredentials *credentials = [[DitoCredentials alloc] initWithID:@\"ID_DO_USUARIO_NA_SUA_BASE\" facebookID:nil reference:nil];", "language": "objectivec" } ] } [/block] ### Exemplo: Usuário do Facebook [block:code] { "codes": [ { "code": "DitoCredentials *credentials = [[DitoCredentials alloc] initWithID:nil facebookID:@\"FACEBOOK_ID\" reference:nil];", "language": "objectivec" } ] } [/block] ## Cadastrando/Logando um usuário O envio de seus usuários para a Dito se dá pelo método DitoAPI identify. [block:callout] { "type": "info", "body": "É recomendado uso do método `DitoAPI identify` sempre que o usuário abrir o aplicativo. Dessa forma garantimos que o usuário tenha evento de login todos os dias que ele usar o aplicativo." } [/block] [block:code] { "codes": [ { "code": "[DitoAPI identify:`credentials` accessToken:`accessToken` data:`userData` completion: `completion`];", "language": "objectivec" } ] } [/block] ### Parâmetros de `identify` [block:parameters] { "data": { "h-0": "Parâmetro", "h-1": "Obrigatório", "h-2": "Tipo", "h-3": "Defaul", "h-4": "Descrição", "0-0": "credentials", "1-0": "accessToken", "2-0": "userData", "3-0": "completion", "0-1": "Sim", "1-1": "Não", "2-1": "Não", "3-1": "Não", "0-2": "DitoCredentials", "1-2": "String", "2-2": "NSDictionary", "3-2": "Function", "0-3": "-", "1-3": "-", "3-3": "-", "2-3": "-", "0-4": "Objeto com a identificação do usuário.", "1-4": "Access Token do usuário relacionado a uma das redes sociais suportadas pela Dito.", "2-4": "Objeto com as informações do usuário, como: nome, email e dados personalizados. É recomendado o uso de um objeto JSON. Veja o exemplo abaixo.", "3-4": "Função de callback chamada quando o método terminar de ser executado. Exemplo:\n\n```\n^(id response, NSError *error) {\n // Tratar retorno aqui\n}\n```" }, "cols": 5, "rows": 4 } [/block] ### Exemplo: DitoAPI identify Observação: Substitua as informações em `{{...}}` de acordo com seu usuário. [block:code] { "codes": [ { "code": "DitoCredentials *credentials = [[DitoCredentials alloc] initWithID:@\"{{ID_DO_USUARIO_NA_SUA_BASE}}\" facebookID:nil reference:nil];\n\nNSDictionary *userData = @{\n @\"nome_do_seu_dado_customizado\": @\"Valor do seu dado customizado\"\n };\n\nNSData *userDataSerialized = [NSJSONSerialization dataWithJSONObject:userData options:0 error:nil];\nNSString *userDataSerializedString = [[NSString alloc] initWithData:userDataSerialized encoding:NSUTF8StringEncoding];\n\nNSDictionary *user = @{\n @\"email\": @\"EMAIL\",\n @\"name\": @\"NOME\",\n @\"birthday\": @\"DATA_NASCIMENTO\",\n @\"location\": @\"CIDADE\",\n @\"data\": userDataSerializedString\n };\n\n[DitoAPI identify:credentials accessToken:nil data:user completion:nil];", "language": "objectivec" } ] } [/block] ## Acompanhamento de eventos O acompanhamento de eventos na Dito se dá pelo método `DitoAPI track`. [block:code] { "codes": [ { "code": "[DitoAPI track:`credentials` event: `event` completion: `completion`];", "language": "objectivec" } ] } [/block] ### Parâmetros de `track` [block:parameters] { "data": { "h-0": "Parâmetro", "h-1": "Obrigatório", "h-2": "Tipo", "h-3": "Default", "h-4": "Descrição", "0-0": "credentials", "1-0": "event", "2-0": "completion", "0-1": "Sim", "1-1": "Sim", "2-1": "Não", "0-2": "DitoCredentials", "1-2": "NSDictionary", "2-2": "Function", "0-3": "-", "1-3": "-", "2-3": "-", "0-4": "Objeto com a identificação do usuário.", "1-4": "Objeto com as informações do evento. É recomendado o uso de um objeto JSON. Veja o exemplo abaixo.", "2-4": "Função de callback chamada quando o método terminar de ser executado. Exemplo:\n\n```\n^(id response, NSError *error) {\n // Tratar retorno aqui\n}\n```" }, "cols": 5, "rows": 3 } [/block] ### Exemplo: DitoAPI track Observação: Substitua as informações em `{{...}}` de acordo com cada evento. ATENÇÃO Os nomes dos eventos **DEVEM** ser enviados para a Dito em letras minúsculas, sem acentuação ou caracteres especiais. Caso o nome de suas ações seja composto por mais de uma palavra, estas devem ser separadas por hífen '-' conforme o exemplo abaixo: [block:code] { "codes": [ { "code": "NSDictionary *event = @{\n @\"action\": @\"nome-do-evento\",\n @\"revenue\": @{{receita-gerada-pelo-evento}}, // Se o evento lhe rendeu alguma receita, você pode nos enviá-la pela propriedade \"revenue\". Ex: @99.9\n @\"data\": @{\n @\"nome_da_propriedade_do_evento\": @\"Valor da propriedade do evento\"\n }\n};\n\n[DitoAPI track:credentials event: event completion:nil];", "language": "objectivec" } ] } [/block] ## Alias O método `DitoAPI alias` é usado para associar um usuário novo a um usuário existente. Por exemplo, você pode associar um usuário do `Facebook` a um usuário que já está cadastrado na Dito previamente. Utilize o código abaixo para associar um usuário: [block:code] { "codes": [ { "code": "DitoAccount *account = [[DitoAccount alloc] initWithID:@\"FACEBOOK_ID\" accessToken:@\"ACCESS_TOKEN\" type:FACEBOOK];\nNSArray *accounts = @[account];\n\n[DitoAPI alias:credentials accounts:accounts completion:nil];", "language": "objectivec" } ] } [/block] ## Unalias O método `DitoAPI unalias` tem a mesma estrutura do `DitoAPI alias`, com uma diferença: esse método desassocia um usuário, ou seja, ele desfaz o que o método `DitoAPI alias` faz. [block:code] { "codes": [ { "code": "DitoAccount *account = [[DitoAccount alloc] initWithID:@\"FACEBOOK_ID\" type:FACEBOOK];\nNSArray *accounts = @[account];\n\n[DitoAPI unalias:credentials accounts:accounts completion:nil];", "language": "objectivec" } ] } [/block] ## Notificações push Para que você consiga enviar notificações push com seu aplicativo usando a Dito, você precisa nos enviar o token de permissão do usuário. Esse token é o que permite ou não o envio de notificação para cada usuário da sua base. Sem o envio desse token usuário não receberá notificação push. Acesse a [explicação da Apple](https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html) e entenda como obter o token de permissão do usuário para que você possa enviar para a Dito. ### Enviando o token do usuário [block:code] { "codes": [ { "code": "[DitoAPI registerDevice:credentials deviceToken:@\"TOKEN_DE_PERMISSAO_DO_USUARIO\" completion:nil];", "language": "objectivec" } ] } [/block] ### Removendo um token do usuário [block:code] { "codes": [ { "code": "[DitoAPI unregisterDevice:credentials deviceToken:@\"TOKEN_DE_PERMISSAO_DO_USUARIO\" completion:nil];", "language": "objectivec" } ] } [/block] ### Formato da notificação A Dito enviará as notificações push para seu aplicativo no seguinte formato: [block:code] { "codes": [ { "code": "{\n \"aps\": {\n \"alert\": \"MESSAGE\",\n \"sound\": \"default\",\n \"priority\": 10,\n \"content_available\": 1,\n \"badge: 0\n },\n \"notification\": \"ID_DA_NOTIFICACAO\",\n \"link\": \"DEEP_LINK_DA_NOTIFICACAO\"\n}", "language": "json" } ] } [/block] [block:callout] { "type": "info", "body": "A mensagem da notificação será enviada dentro do nó `alert`." } [/block] ### Leitura da notificação Quando o usuário abrir uma notificação, o método `DitoSDK.notificationRead` deverá ser chamado passando o `JSON` enviado pela Dito como parâmetro. [block:code] { "codes": [ { "code": "- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {\n NSNumber *notification = [userInfo objectForKey:@\"notification\"];\n NSString *link = [userInfo objectForKey:@\"link\"];\n NSString *notificationJSON = [NSString stringWithFormat:@\"{ \\\"notification\\\": \\\"%@\\\", \\\"link\\\": \\\"%@\\\" }\", notification, link];\n\n [DitoAPI notificationRead:self.credentials message:notificationJSON completion:nil];\n}", "language": "objectivec" } ] } [/block]