Modelo iOS

Modelo de Backend para App de CRM
iOS — Guia de Schema, API e IA

Um schema de backend de iOS CRM pronto para produção e Starter Kit na Back4app: Contato, Empresa, Negócio, Atividade, estágios do pipeline, diagrama ER, dicionário de dados, schema JSON, playground de API e um prompt de Agente de IA com um clique para implantar em minutos.

Principais Conclusões

Nesta página você obtém um schema de CRM pronto para produção, um prompt de IA com um clique e código iOS passo a passo — para que você possa lançar um app de CRM sem construir o backend.

  1. Implante em minutosCole o prompt do Agente de IA e obtenha um aplicativo em funcionamento com contatos, empresas, negócios e pipeline.
  2. Seguro por padrãoACLs e acesso baseado em funções para que os usuários vejam apenas seus negócios e dados atribuídos.
  3. iOS-nativo SDKObjetos tipados, async/await, fixação offline e Live Queries para atualizações de pipeline.
  4. REST + GraphQLAmbas as APIs geradas automaticamente; filtre negócios por estágio, liste atividades por relacionado a.
  5. Cinco classes_Usuário (embutido), Empresa, Contato, Negócio (pipeline), Atividade (tarefas/eventos).

O que é o modelo de backend do aplicativo CRM iOS?

O modelo CRM iOS do Back4app oferece um backend amigável ao Swift com modelos no estilo Codable para Contato, Empresa, Negócio e Atividade. Use o SDK Parse iOS com async/await, pin objetos para acesso offline e assine Live Queries para atualizações do pipeline. Envie um aplicativo CRM nativo sem executar ou manter seu próprio backend.

Melhor para:

Equipes de vendasConstrutores de CRMPrototipagem rápidaRepresentantes de campoLançamentos de MVPEquipes escolhendo um BaaS para CRM

Visão Geral

Os aplicativos de CRM da iOS se beneficiam de tipos Swift, async/await e design offline-first. O SDK Parse da Back4app oferece acesso amigável ao Codable para Contato, Negócio e Atividade, fixação de datastore local e Live Queries para atualizações em tempo real do pipeline e da atividade.

As cinco classes — _User, Company, Contact, Deal, Activity — são expostas via PFQuery e PFObject. Use PFQuery(className: "Deal").whereKey("stage", equalTo: "qualified") e fixe os resultados para offline; o SDK gerencia a sincronização quando o aplicativo se reconecta.

Recursos principais do CRM

iOS backend CRM com Swift e o SDK Parse: gerenciamento de contatos, pipeline de negócios, modelos Codable e sincronização offline para pipeline e contatos com ACLs.

Gerenciamento de contatos

Armazene e gerencie contatos com nome, e-mail, telefone, empresa e notas. Ideal para aplicativos iOS.

Gestão de empresas

Rastreie empresas com nome, site, setor e endereço. Links para contatos e negócios.

Pipeline de negócios

Pipeline de vendas com etapas, valor, data de fechamento esperada e atribuição. Construído para backends iOS.

Rastreamento de atividades

Registre chamadas, e-mails, reuniões e notas vinculadas a contatos e negócios. Funciona com o SDK iOS.

Usuário e permissões

Modelo de usuário embutido e referências para propriedade e atribuição. ACLs prontas para uso para iOS.

Por que construir seu backend de CRM iOS com Back4app?

Back4app oferece aos aplicativos iOS um SDK amigável para Swift e suporte offline para que você possa lançar rapidamente um aplicativo de CRM polido.

  • Swift e Codable: Use o SDK Parse iOS com async/await e Codable; modelos seguros para tipos para Contato, Empresa, Negócio, Atividade.
  • Offline e sincronização: Fixe objetos localmente; consulte o datastore local quando estiver offline e sincronize quando conectado.
  • Live Queries: Inscreva-se para mudanças de Negócio e Atividade para atualizações em tempo real no SwiftUI ou UIKit.

Ideal para desenvolvedores iOS que constroem aplicativos de CRM ou vendas com Swift e tipos de valor.

Benefícios Principais

Um backend CRM pronto para produção para que você possa enviar mais rápido e focar no seu aplicativo.

Envie Mais Rápido, Sem Código de Backend

APIs REST & GraphQL e um esquema pronto para uso — conecte seu aplicativo e vá.

Seguro por Padrão

ACLs e permissões em nível de classe; restrição por assignedTo e createdBy.

Pipeline em Tempo Real

Live Queries sobre WebSockets para atualizações instantâneas de negócios e atividades.

Autenticação Integrada

Cadastro de usuário, login e gerenciamento de sessão prontos para uso.

Funciona Offline

O pinning local mantém contatos e negócios disponíveis offline e sincroniza quando você se reconecta.

Implante em Minutos

Use o Agente de IA para criar e implantar seu aplicativo CRM a partir deste modelo.

Pronto para experimentar?

Deixe o agente de IA da Back4app criar o backend do seu aplicativo CRM, conectar o frontend iOS e implantar — tudo a partir de um único comando.

Grátis para começar — 50 comandos de Agente de IA/mês, sem necessidade de cartão de crédito

Pilha Técnica

Tudo que alimenta este modelo de aplicativo CRM em um relance.

Frontend
iOS
Backend
Back4app
Banco de Dados
MongoDB
Autenticação
Autenticação e Controle de Acesso
APIs
REST e GraphQL
Implantação
Agente de IA / Painel

Diagrama ER

Diagrama de Entidade-Relacionamento para o modelo de dados do aplicativo iOS CRM.

Ver fonte do diagrama
Mermaid
erDiagram
    _User {
        String objectId PK
        String username
        String email
        String password
        Date createdAt
        Date updatedAt
    }

    Company {
        String objectId PK
        String name
        String website
        String industry
        String address
        String notes
        Pointer createdBy FK
        Date createdAt
        Date updatedAt
    }

    Contact {
        String objectId PK
        String name
        String email
        String phone
        Pointer company FK
        String notes
        Pointer createdBy FK
        Date createdAt
        Date updatedAt
    }

    Deal {
        String objectId PK
        String title
        Number amount
        String stage
        Pointer contact FK
        Pointer company FK
        Date expectedCloseDate
        String notes
        Pointer assignedTo FK
        Date createdAt
        Date updatedAt
    }

    Activity {
        String objectId PK
        String type
        String subject
        String description
        Date dueDate
        Date completedAt
        Pointer relatedTo FK
        Pointer createdBy FK
        Date createdAt
        Date updatedAt
    }

    Company ||--o{ Contact : "has"
    Company ||--o{ Deal : "has"
    Contact ||--o{ Deal : "has"
    _User ||--o{ Deal : "assignedTo"
    _User ||--o{ Activity : "createdBy"
    Contact ||--o{ Activity : "relatedTo"
    Deal ||--o{ Activity : "relatedTo"
    _User ||--o{ Company : "createdBy"
    _User ||--o{ Contact : "createdBy"

Fluxo de Integração

Sequência Auth-to-CRUD: como seu aplicativo iOS se comunica com Back4app — login, depois consulta contatos e negócios, atualiza o pipeline.

Ver fonte do diagrama
Mermaid
sequenceDiagram
  participant User
  participant App as iOS App
  participant Back4app as Back4app Cloud

  User->>App: Login
  App->>Back4app: ParseUser.logIn(username:password:)
  Back4app-->>App: Session token
  App-->>User: Logged in

  User->>App: Load contacts and deals
  App->>Back4app: ParseQuery.find()
  Back4app-->>App: [PFObject]
  App-->>User: Show list

  User->>App: Create deal or contact
  App->>Back4app: deal.save() or contact.save()
  Back4app-->>App: Deal (objectId)
  App-->>User: Updated list

Dicionário de Dados

Referência completa de campos para cada classe no esquema.

CampoTipoDescriçãoObrigatório
objectIdStringAuto-generated unique identifierautomático
nameStringFull name of the contact
emailStringEmail address
phoneStringPhone number
companyPointer<Company>Company this contact belongs to
notesStringFree-form notes
createdByPointer<_User>User who created this contact
createdAtDateAuto-generated creation timestampautomático
updatedAtDateAuto-generated last-update timestampautomático

9 campos em Contact

Segurança e Permissões

Como a propriedade, ACLs e permissões em nível de classe protegem os dados neste esquema de CRM.

ACLs em Nível de Linha

Use ACLs e ponteiros (assignedTo, createdBy) para que os usuários vejam e editem apenas seus negócios atribuídos e dados relacionados.

Permissões em Nível de Classe

CLPs restringem quais funções ou usuários podem criar, ler, atualizar ou excluir objetos em nível de classe.

Propriedade Baseada em Ponteiro

Deal.assignedTo e Activity.createdBy vinculam-se a _User; o Cloud Code pode impor visibilidade e edições por função.

Esquema (JSON)

Definição de esquema JSON bruto — copie e use em seu aplicativo Back4app ou importe via API.

JSON
{
  "classes": [
    {
      "className": "Contact",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "name": {
          "type": "String",
          "required": true
        },
        "email": {
          "type": "String",
          "required": false
        },
        "phone": {
          "type": "String",
          "required": false
        },
        "company": {
          "type": "Pointer",
          "targetClass": "Company",
          "required": false
        },
        "notes": {
          "type": "String",
          "required": false
        },
        "createdBy": {
          "type": "Pointer",
          "targetClass": "_User",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Company",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "name": {
          "type": "String",
          "required": true
        },
        "website": {
          "type": "String",
          "required": false
        },
        "industry": {
          "type": "String",
          "required": false
        },
        "address": {
          "type": "String",
          "required": false
        },
        "notes": {
          "type": "String",
          "required": false
        },
        "createdBy": {
          "type": "Pointer",
          "targetClass": "_User",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Deal",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "title": {
          "type": "String",
          "required": true
        },
        "amount": {
          "type": "Number",
          "required": false
        },
        "stage": {
          "type": "String",
          "required": false
        },
        "contact": {
          "type": "Pointer",
          "targetClass": "Contact",
          "required": false
        },
        "company": {
          "type": "Pointer",
          "targetClass": "Company",
          "required": false
        },
        "expectedCloseDate": {
          "type": "Date",
          "required": false
        },
        "notes": {
          "type": "String",
          "required": false
        },
        "assignedTo": {
          "type": "Pointer",
          "targetClass": "_User",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Activity",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "type": {
          "type": "String",
          "required": false
        },
        "subject": {
          "type": "String",
          "required": false
        },
        "description": {
          "type": "String",
          "required": false
        },
        "dueDate": {
          "type": "Date",
          "required": false
        },
        "completedAt": {
          "type": "Date",
          "required": false
        },
        "relatedTo": {
          "type": "Pointer",
          "required": false
        },
        "createdBy": {
          "type": "Pointer",
          "targetClass": "_User",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "_User",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "username": {
          "type": "String",
          "required": true
        },
        "email": {
          "type": "String",
          "required": true
        },
        "password": {
          "type": "String",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    }
  ]
}

Construa com o Agente de IA

Use o Agente de IA Back4app para construir um aplicativo CRM real a partir deste modelo: ele criará o frontend, o backend (este esquema, autenticação e APIs) e fará a implantação — sem configuração manual. O prompt abaixo descreve esta pilha de CRM para que o Agente possa gerar um aplicativo pronto para produção de uma só vez.

Agente de IA Back4app
Pronto para construir
Crie um aplicativo CRM no Back4app com este esquema e comportamento exatos.

Esquema:
1. _Usuário (use Back4app embutido): nome de usuário (String, obrigatório), email (String, obrigatório), senha (String, obrigatório); objectId, createdAt, updatedAt (sistema).
2. Empresa: nome (String, obrigatório), site (String), setor (String), endereço (String), notas (String), criadoPor (Ponteiro para _Usuário); objectId, createdAt, updatedAt (sistema).
3. Contato: nome (String, obrigatório), email (String), telefone (String), empresa (Ponteiro para Empresa), notas (String), criadoPor (Ponteiro para _Usuário); objectId, createdAt, updatedAt (sistema).
4. Negócio: título (String, obrigatório), valor (Número), estágio (String; por exemplo, lead, qualificado, proposta, negociação, ganho, perdido), contato (Ponteiro para Contato), empresa (Ponteiro para Empresa), dataFechamentoEsperada (Data), notas (String), atribuídoA (Ponteiro para _Usuário); objectId, createdAt, updatedAt (sistema).
5. Atividade: tipo (String; por exemplo, chamada, email, reunião, nota), assunto (String), descrição (String), dataVencimento (Data), concluídoEm (Data), relacionadoA (Ponteiro para Contato ou Negócio), criadoPor (Ponteiro para _Usuário); objectId, createdAt, updatedAt (sistema).

Segurança:
- Defina ACLs para que apenas usuários autenticados possam acessar os dados; use regras baseadas em função ou baseadas em proprietário onde apropriado (por exemplo, atribuídoA, criadoPor).
- Use Permissões em Nível de Classe para que apenas usuários autenticados possam criar/ler/atualizar/excluir essas classes.

Autenticação:
- Cadastro (nome de usuário, email, senha) e login; suporte para logout/sessão.

Comportamento:
- CRUD completo para Empresa, Contato, Negócio e Atividade.
- Liste negócios com filtro por estágio e ordene por dataFechamentoEsperada ou updatedAt (visualização de pipeline).
- Liste atividades por relacionadoA (Contato ou Negócio).
- Opcional: Live Queries em tempo real para Negócio e Atividade para atualizações de painel/pipeline.
- Opcional: fixação offline para mobile (Contatos, Negócios, Atividades).

Entregar:
- Crie o aplicativo Back4app com o esquema acima, ACLs e qualquer Cloud Code necessário.
- Gere o frontend e conecte-o a este backend; implante para que o aplicativo seja executável de ponta a ponta.

Pressione o botão abaixo para abrir o Agente com o prompt deste modelo pré-preenchido.

Implantar em minutos50 prompts gratuitos / mêsNenhum cartão de crédito necessário

API Playground

Experimente os endpoints REST e GraphQL para o esquema CRM. Respostas dos dados de exemplo acima — nenhuma conta Back4app necessária.

Carregando playground…

Usa o mesmo esquema CRM (Contato, Empresa, Negócio, Atividade) que este modelo.

Integração iOS Passo a Passo

Conecte-se ao seu backend Back4app a partir de um app iOS usando o SDK Back4app iOS.

  1. Passo 1: Instale o SDK Back4app iOS

    Adicione o SDK Back4app para sua stack (por exemplo, npm, pubspec ou gerenciador de pacotes).

    Swift
    // Package.swift or CocoaPods
    // SPM: .package(url: "https://github.com/parse-community/Parse-Swift", from: "4.0.0")
    // Podfile: pod 'Parse'
  2. Passo 2: Inicialize o Back4app em seu app

    Inicialize o SDK do Back4app na inicialização do aplicativo com seu ID de aplicativo e URL do servidor.

    Swift
    Parse.initialize(
        configuration: ParseClientConfiguration {
            $0.applicationId = "YOUR_APP_ID"
            $0.clientKey = "YOUR_CLIENT_KEY"
            $0.server = "https://parseapi.back4app.com/"
        }
    )
  3. Etapa 3: Consultar contatos e negócios

    Use o SDK para buscar objetos de Contato e Negócio; filtre negócios por estágio para o pipeline.

    Swift
    func getDeals(stage: String = "qualified") async throws -> [PFObject] {
        let query = PFQuery(className: "Deal")
        query.whereKey("stage", equalTo: stage)
        query.order(byAscending: "expectedCloseDate")
        return try await query.findObjects()
    }
    func getContacts() async throws -> [PFObject] {
        let query = PFQuery(className: "Contact")
        return try await query.findObjects()
    }
  4. Etapa 4: Criar um contato ou negócio

    Crie um novo Contato ou Negócio com os campos e apontadores necessários (empresa, contato, atribuído a), e então salve.

    Swift
    func createDeal(title: String, stage: String = "lead", amount: Double? = nil) async throws {
        let deal = PFObject(className: "Deal")
        deal["title"] = title
        deal["stage"] = stage
        if let amount = amount { deal["amount"] = amount }
        try await deal.save()
    }
    func createContact(name: String, email: String? = nil, phone: String? = nil) async throws {
        let contact = PFObject(className: "Contact")
        contact["name"] = name
        if let email = email { contact["email"] = email }
        if let phone = phone { contact["phone"] = phone }
        try await contact.save()
    }
  5. Etapa 5: Atualizar estágio do negócio e atividades

    Atualize Deal.stage ao mover no pipeline; crie e liste Atividades por relacionado a.

    Swift
    // Update deal stage (e.g. move in pipeline)
    func updateDealStage(objectId: String, stage: String) async throws {
        let query = PFQuery(className: "Deal")
        let deal = try await query.getObjectWithId(objectId)
        deal["stage"] = stage
        try await deal.save()
    }
    
    // Delete a deal
    func deleteDeal(objectId: String) async throws {
        let query = PFQuery(className: "Deal")
        let deal = try await query.getObjectWithId(objectId)
        try await deal.delete()
    }

Integração de Gerenciamento de Estado

Integre o SDK Back4app com a camada de estado do seu aplicativo (por exemplo, contexto, loja ou serviços) para estado de pipeline e contato.

Modelo de Dados Completo

Copie um modelo completo de CRM para serialização segura por tipo (por exemplo, classe, interface ou definição de tipo).

Swift
// Deal.swift — matches Back4app schema
struct Deal: Codable {
    var objectId: String?
    var title: String
    var amount: Double?
    var stage: String?
    var expectedCloseDate: Date?
    var contact: Pointer<ParseObject>?
    var company: Pointer<ParseObject>?
    var assignedTo: Pointer<_User>?
    var createdAt: Date?
    var updatedAt: Date?
}

func toDeal(_ obj: PFObject) -> Deal {
    Deal(
        objectId: obj.objectId,
        title: obj["title"] as? String ?? "",
        amount: obj["amount"] as? Double,
        stage: obj["stage"] as? String,
        expectedCloseDate: obj["expectedCloseDate"] as? Date,
        contact: obj["contact"] as? Pointer<ParseObject>,
        company: obj["company"] as? Pointer<ParseObject>,
        assignedTo: obj["assignedTo"] as? Pointer<_User>,
        createdAt: obj.createdAt,
        updatedAt: obj.updatedAt
    )
}

Offline-First & Armazenamento Local

Use pin() e unpin() para que contatos e negócios estejam disponíveis offline e sincronizem quando voltarem online.

SDKs suportados incluem um armazenamento local. Fixe objetos de Contato, Negócio e Atividade para mantê-los no dispositivo; consulte dados fixados quando estiver offline. Quando o aplicativo voltar online, sincronize com o servidor.

Abaixo: fixe resultados após a busca e desfaça a fixação quando não precisar mais de cópias locais.

Swift
// After fetch, pin for offline
try? await PFObject.pinAll(deals)

// Query from local datastore
let query = PFQuery(className: "Deal").fromLocalDatastore()
query.whereKey("stage", equalTo: "qualified")
query.order(byAscending: "expectedCloseDate")
let localDeals = try? await query.findObjects()

// Unpin
try? await PFObject.unpinAllObjects(inBackground: "Deal")

Perguntas Frequentes

Perguntas comuns sobre o modelo de backend do aplicativo CRM.

O que é Back4app?
Por que usar Back4app para um aplicativo de CRM iOS?
Como faço para consultar negócios por estágio em Swift?
O SDK iOS suporta dados de CRM offline?

Confiado por desenvolvedores em todo o mundo

Junte-se à comunidade que está construindo o futuro dos aplicativos

G2 Users Love Us Badge

Pronto para Construir Seu App de CRM?

Comece seu projeto iOS em minutos. Nenhum cartão de crédito necessário.

Construa com Agente de IA