Como lidar com a depreciação do offline_access no Facebook ao usar o token no aplicativo para iOS e no servidor

Facebook'sdeprecação dooffline_access a permissão está chegando em maio de 2012 e a documentação não está nos dando informações suficientes sobre como lidar com isso.

Temos um aplicativo para iOS e serviço correspondente que o capacita e se integra ao Facebook de maneira profunda para alavancar a lista de amigos de um usuário dentro do aplicativo (por isso, se seus amigos do FB também estiverem usando o aplicativo, você poderá se conectar mais facilmente). É assim que todos os aplicativos sociais parecem funcionar, então nada de especial aqui.

Cliente

Nosso aplicativo usaSDK para iOS do Facebook para permitir que o usuário faça o login, que atualmente solicitamosoffline_access. O token é mantido em nosso aplicativo para iOS, mas também enviado ao nosso servidor onde ele é salvo. O cliente age em nome do usuário para postar atualizações no feed de notícias de um usuário (também pedimospublish_stream permissão).

Servidor

Nosso servidor verifica periodicamente se os amigos do FB do usuário estão usando o nosso aplicativo. Na próxima vez que o usuário fizer login, expomos o conteúdo e os relacionamentos de uma determinada maneira para promover os amigos desse usuário. O servidor também atua em nome do usuário para se conectar periodicamente à API do gráfico e obter a lista atual de amigos do usuário. Isso é para que possamos explicar as alterações nos relacionamentos de um usuário e tê-los refletidos em nosso aplicativo. Fazemos isso quando o usuário não está usando o aplicativo no momento para que tenha a melhor experiência da próxima vez que ele for usado. Para permitir isso, nosso aplicativo para iOS envia o token de acesso ao nosso servidor que ele usa e por que pedimosoffline_access.

Nota: Se o usuário sair do nosso aplicativo explicitamente, excluiremos os tokens de acesso do cliente e do servidor.

Problemas

Agora que não há mais um token de acesso perpétuo que podemos usar, estou tentando descobrir a melhor prática para ainda ativar nossos cenários enquanto aproveito a nova forma pretendida do Facebook de manipular e estender tokens de acesso. A documentação infelizmente não é totalmente útil.

Questões

UMA. Quando você autentica através do mais recente SDK do Facebook para iOS, qual é o tempo de vida padrão do token de acesso obtido?Esse documento diz que um pedido de token estendido lhe dará um que dura 60 dias. esteoutro documento fala sobre o primeiro pedido de token de acesso e menciona validades variadas, mas éobscuro e fala sobre tempos de validade específicos:

(a ênfase é minha)

Quando você obtiver um token de acesso do Facebook, ele será válido imediatamente e utilizável em solicitações para a API por algum período de tempo definido pelo Facebook. Após esse período, considera-se que o token de acesso expirou e o usuário precisará ser autenticado novamente para que seu aplicativo obtenha um novo token de acesso.A duração para a qual um determinado token de acesso é válido depende de como ele foi gerado.

Também há eventos que podem fazer com que um token de acesso se torne inválido antes de seu tempo de expiração esperado. Tais eventos incluem o usuário alterando sua senha, um aplicativo atualizando seu App Secret. Lidar com tempos de expiração de token de acesso variados e lidar com o caso quando um token de acesso se torna inválido antes que o tempo de expiração esperado seja essencial para criar experiências sociais robustas.

B. Para o cliente, agora que o token de acesso não é necessariamente de longa duração, é a abordagem certa para nós:

Vamos usar o login por meio do FB e, em seguida, detectar sempre que o token de acesso expirar. Se estiver, ligue para o FB iOS SDK para re-autenticar / autorizar novamente? (isso deve apenas acionar o usuário para sair do aplicativo FB para iOS e, na maioria dos casos, retornar imediatamente ao nosso aplicativo com um novo token de acesso).

C. De acordo comeste post de blog Eu descobri que você só pode estender um token de acesso uma vez:

Posso trocar meu token de acesso de 60 dias por um novo token de acesso de 60 dias?

Não, desculpe, você não pode. Você só pode trocar um token de acesso de usuário válido (que significa atual) por um estendido. Você não pode estender um token de acesso já estendido.

No cliente, posso apenas lidar com isso solicitando uma nova autenticação / nova autorização, conforme mencionei na pergunta B. No entanto, isso não funciona no nosso servidor. Poderíamos certamente ter o servidor renová-lo uma vez a 60 dias, mas o que acontece no 61º dia? O servidor deixa de poder sincronizar a lista de amigos?

D. Parece fazer sentido verificar a validade do token de acesso do FB sempre que o aplicativo for iniciado ou se hidratar novamente. Qual é a melhor maneira para o nosso aplicativo iOS verificar isso? Existe um terminal recomendado para chamar para validar um token? Devemos apenas chamar emhttps://graph.facebook.com/me passando o token de acesso e verificando a resposta?

Nota: podemos certamente gravar oexpires quando recebemos o token inicial estendido, mas isso não é confiável, pois o usuário pode revogar a permissão do aplicativo a qualquer momento, o que tornaexpires tempo um ponto de dados não confiáveis ​​sobre a validade

questionAnswers(2)

yourAnswerToTheQuestion