Validar compra no iOS In App Purchase

Estamos trabalhando em um novo aplicativo para iPhone e iPad que usa o recurso de In App Purchase do iOS. Pra quem não está familiarizado, In App Purchase é uma forma de vender “bens virtuais” no seu aplicativo.

É uma forma muito mais eficiente de gerar receita no seu aplicativo visto que, na maioria dos casos, o download é gratuito, mas é possível comprar coisas dentro de uma loja no aplicativo, por exemplo: uma nova fase ou itens em um game, algo que possa fazer download, uma versão sem anúncios, etc.

A implementação no aplicativo não é nada muito complexo, a documentação oficial explica direitinho e com bons exemplos de código que você pode usar, leia com carinho.

Mas em alguns casos, é necessário que o controle de compras seja feito por algum serviço online que você vai implementar. Nesses casos, existe um recurso de validar se a compra é legítima usando uma API da apple.

A documentação de como fazer essa validação você encontra no capítulo “Verifying a Receipt with the App Store“. Este post objetiva oferecer um trecho de código em Ruby que você pode usar na sua aplicação web (API) para validar o recibo (receipt) da compra.

Abaixo temos o código Ruby para validar o receipt em ambiente de homologação (sandbox). É simples usá-lo para integrar à sua aplicação Rails.

Este arquivo uma recept válida para a loja de homologação (sandbox) para você testar o código. Baixe o arquivo e salve com o nome “receipt” no mesmo diretório do script acima.

Execute com “ruby verifyReceipt.rb”. O resultado deve ser esse:

Se você não usar Ruby, mas sim PHP, esses caras disponibilizaram o código em PHP. Tem também um trecho de código Objective-C que você vai precisar para converter o receipt para Base 64.

Download de todo o código fonte.

Espero ter ajudado! Fique à vontade para colaborar com seus comentários.

Como tratar urls como UTF8 dentro do DRUPAL no IIS6

Nossa… acho que esta é uma das maiores gambiarras que já presenciei, mas não desaprovo, na verdade achei perfeito. Como diria @porkaria FACA NOS DENTES MER-MAO!

Vamos ao problema: Utilizando Drupal junto com IIS6 as vezes você não terá acesso ao servidor para modificar sua codificação para UTF8. O problema é que caracteres especiais necessitam ser tratados como urls em utf8.
Trabalhando com Drupal as buscas no apache solr não estavam retornando os resultados corretamente. @raphox mudou a codificação do navegador para ISO e comprovou: O servidor estava interpretando as urls como ISO mas a aplicação espera um UTF8.

Bom, estão preparados para a jogada de mestre: como alguns devem saber toda a URL no drupal vem pelo parâmetro $_GET[‘q’]; o que @raphox fez foi abrir o index.php do drupal e na primeira linha de php fazer

$_GET['q'] = utf8_encode($_GET['q']);

Funcionou perfeitamente. Vlw Raphox, está ai moçada, grande dica para contornar problemas.

Drupal para soluções grandes

A muito tempo que venho apostando em softwares livres e agora foi a vez do projeto Drupal. Ele é um CMS robusto com milhares de módulos e funcionalidades. Costumo dizer que Drupal é a única aplicação que não é orientada a objetos, totalmente solta, trabalhando com tokens e que FUNCIONA.

Após passar por um grande projeto de portal tive experiências com o CMS para opinar e saber alguns truques relacionados a desempenho, tratamento, cache e escalabilidade. Muitos detalhes só foram percebidos depois de um tempo de uso e migração de conteúdos.

Ambiente:
Realmente o ambiente mais indicado seria Linux, Apache com ModRewrite e PHP 5.2. Quanto ao banco estou trabalhando com MySQL. Não utilizei php 5.3 pois alguns módulos tem tido problemas.

Tratamento de Cache:
Nativamente Drupal tem um módulo de cache mas ele não é bem o que se espera. Para melhores resultados optei pelo Boost; ele gera HTML, compacta arquivos CSS e JS com facilidade.
Outro ponto importante é saber o que é necessário gravar no banco como log. Como utilizo o módulo do Analytics não vejo necessidade de gravar estatísticas em banco, assim como também não vejo necessidade de gravar log em banco uma vez que se o php e apache estiverem configurados corretamente os erros serão armazenados em algum local.

Manutenção:
Esse ponto foi complicado de ser resolvido. Imaginem que terá várias áreas de publicação de conteúdos, vários tipos de conteúdos, várias áreas para apresentar tais conteúdos. Minha dica é: O que for possível colocar em menu coloque mas o que não for trate com taxonomia. O que quero dizer é que possivelmente informações sobre sua empresa serão textuais e com isto é mais interessante colocar no menu; porém notícias, vídeos e outros dados serão publicados constantemente e terão várias áreas dedicadas a eles, a idéia então é categorizá-los usando taxonomia pois as views e painéis trabalharão muito bem.

Problemas comuns:
Encontrei vários problemas relacionados a conteúdos e publicação dos mesmos usando workflow. O mais comum foi tratar corretamente o cache mas como já expliquei acima o boost resolve bem. Outro problema muito grave é a permissão dos conteúdos. Entendam que na etapa de desenvolvimento muitas coisas irão mudar, muitas idéias irão surgir e com essa bagunça toda seu conteúdo migrado poderá sofrer. Diversas vezes percebi que uma página não estava online para usuários anônimos mas existia para autenticados; a dica é: de temos em tempos reconstrua as permissões dos conteúdos, isso irá garantir que papéis e regras sejam renovadas nos conteúdos. CUIDADO essa operação demora um pouco, faça de maneira planejada.

Módulos bem interessantes:
Vou citar alguns módulos que gostei bastante e que podem ajudar sua vida de alguma maneira:
lightbox2 – Muito bom para imagens e galerias
gmap, location – Georeferenciamento, USE A VERSÃO BETA
views, panels, menu_node, cck – Esses módulos realmente dão qualidade e facilidade no desenvolvimento.

Este post foi criado com ajuda de @raphox. Ele fez o deploy do Drupa em Windows e acreditem, está show! É isto gente… espero que gostem

Concatenando campos em um find list no CakePHP 1.3

Esses dias precisei que um select do meu formulário apresenta-se no seu valor, não apenas o valor de um único campo, no caso o ID, queria que o value dos options fica-sem assim “ID – Campo 1 – Campo 2 – Campo 3”. O problema é que cada campo estava em uma tabela diferente. E foi aí que eu conheci um novo recurso do CakePHP 1.3, os campos virtuais (virtualFields). Continuar lendo Concatenando campos em um find list no CakePHP 1.3