Este tutorial le mostrará cómo integrar rápidamente la API de Twitter con el iPhone SDK usando Twitter-OAuth-iPhone, una biblioteca de plug-and-play Twitter para el iPhone compuesta de múltiples proyectos de código abierto combinados y sintetizados para una fácil implementación por Ben Gottlieb.
Ciertos aspectos de las aplicaciones o técnicas utilizadas en este tutorial han cambiado desde que se publicó originalmente. Esto podría hacer que sea un poco difícil de seguir. Recomendamos ver estos tutoriales más recientes sobre el mismo tema:
NOTA: Con el lanzamiento de iOS 5, este artículo está desactualizado. En el futuro, debería considerar seriamente usar el marco de Twitter que se incluye con el iOS 5 SDK. Solo considere implementar la solución demostrada aquí si debe admitir usuarios en versiones anteriores de iOS.
Este tutorial utilizará una aplicación simple llamada "TwitterRush" para demostrar la integración de Twitter OAuth para el iPhone. Al descargar la aplicación TwitterRush, podrá seguir con precisión todos los pasos de este tutorial. Sin embargo, si ya tienes un proyecto de iPhone que te gustaría conectar con la API de Twitter, aún así deberías poder seguir tu propio código con solo pequeñas modificaciones..
Además de TwitterRush o su propio proyecto, también deberá descargar el proyecto Twitter-OAuth-iPhone de Ben Gottlieb disponible en GitHub.
Después de descargar y desarchivar la biblioteca Twitter-OAuth-iPhone, arrastre la carpeta titulada "Twitter + OAuth" a la carpeta "Otras fuentes" en el área del navegador de Xcode 4. Asegúrese de marcar la opción "Copiar elementos en la carpeta del grupo de destino (si es necesario)" y haga clic en "Finalizar".
Intentar compilar y ejecutar su aplicación ahora resultará en MUCHOS errores (90 en el momento de escribir esto con iOS SDK 4). No se preocupe: los arreglaremos fácilmente en el Paso 2.
En el área del navegador de Xcode 4, seleccione el nombre del proyecto (en este caso "TwitterRush"). A continuación, seleccione el objetivo actual ("TwitterRush" aquí nuevamente), y luego seleccione la pestaña "Construir fases". Expanda la opción "Vincular binarios con bibliotecas" y luego haga clic en el botón "+" para agregar un nuevo marco. Escriba "libxml2" en el cuadro de búsqueda y seleccione libxml2.dylib biblioteca que aparece en la lista. Haga clic en "Agregar" para incluir esta biblioteca en la fase de vinculación de su proyecto..
Después de completar estos pasos, su pantalla debería verse algo como esto:
Después de agregar la biblioteca a su proyecto, deberá modificar la configuración de "rutas de búsqueda de encabezado" en la configuración de compilación de su proyecto. Para hacer esto, deseleccione el objetivo y seleccione el proyecto TwitterRush real. Abra la pestaña "Crear configuración" y busque la entrada "Rutas de búsqueda de encabezado". Haga doble clic en esta configuración y luego haga clic en el botón "+" en la parte inferior izquierda del diálogo emergente para agregar una nueva ruta de búsqueda. Haga clic en la casilla de verificación "recursiva", haga doble clic en el campo "Ruta" e ingrese la siguiente ruta dinámica:
$ (SDKROOT) / usr / include / libxml2
Después de hacer clic en "Listo", su pantalla debería verse similar a esto:
Si ejecuta la aplicación desde la barra de menú de Xcode, ahora debería poder compilar la aplicación sin ningún error de compilación!
Si bien ahora puede compilar y ejecutar la aplicación sin ningún error, hay una serie de advertencias relacionadas con los cambios en el SDK de iOS4 y el protocolo NSXMLParserDelegate. Tendrá que declarar explícitamente que MGTwitterStatusesParser.h y MGTwitterXMLParser.h Conforme a este protocolo para evitar que se produzcan estas advertencias..
Para ello, abre el MGTwitterStatusesParser.h archivar y modificar el @interfaz
declaración declarando el NSXMLParserDelegate
protocolo como tal:
@interface MGTwitterStatusesParser: MGTwitterXMLParser
Ahora haz lo mismo para MGTwitterXMLParser.h, modificando el @interfaz
declaración para leer:
@interface MGTwitterXMLParser: NSObject
¡Ahora debería poder compilar sin problemas la aplicación sin generar errores ni advertencias! Ahora estamos listos para comenzar a integrar la biblioteca Twitter-OAuth-iPhone con nuestro código.
Ahora debemos comenzar a importar las clases de biblioteca que usaremos para conectarnos con la API de Twitter. Abierto TwitterRushViewController.h y modifique el código para que lea como sigue:
#importar#import "SA_OAuthTwitterController.h" @class SA_OAuthTwitterEngine; @interface TwitterRushViewController: UIViewController IBOutlet UITextField * tweetTextField; SA_OAuthTwitterEngine * _engine; @ propiedad (no atómica, retener) IBOutlet UITextField * tweetTextField; - (IBAction) updateTwitter: (id) sender; @fin
En la línea 2, importamos el SA_OAuthTwitterController
clase para uso dentro de nuestro controlador de vista. En la línea 4, remitimos declarar SA_OAuthTwitterEngine
clase para que podamos declarar una instancia de esa clase en el @interfaz
sin importar realmente el archivo de encabezado. En la línea 6 declaramos el SA_OAuthTwitterControllerDelegate
protocolo: esto nos permitirá responder fácilmente a los eventos de la API de Twitter más adelante. Finalmente, en la línea 10 declaramos la _motor
objeto como una instancia de la SA_OAuthTwitterEngine
clase.
Ahora cambia a la TwitterRushViewController.m expediente. Importar el SA_OAuthTwitterEngine
Clase que acabamos de reenviar declarada en la interfaz de clase:
#import "SA_OAuthTwitterEngine.h"
Porque el SA_OAuthTwitterControllerDelegate
solo contiene declaraciones de métodos opcionales, en este punto usted debería poder compilar y ejecutar su aplicación nuevamente sin ningún error o advertencia.
Para obtener acceso de OAuth a la API de Twitter, primero deberá crear una Clave de consumidor y una Clave secreta para que Twitter pueda identificar y autenticar su aplicación. Puede hacerlo desde el sitio web de Twitter iniciando sesión en su cuenta y navegando al formulario de registro de la aplicación. Al pasar por el proceso de registro, asegúrese de especificar "cliente" como tipo de aplicación, marque la casilla "Sí, usar Twitter para iniciar sesión" y seleccione "Leer y escribir" como el tipo de acceso predeterminado para permitir que su aplicación de iPhone publique tweets en nombre de sus usuarios.
Una vez que haya registrado su aplicación y Twitter haya generado sus credenciales de aplicación, agregue lo siguiente a TwitterRushViewController.m por encima de la clase @implementación
:
#define kOAuthConsumerKey @ "Su clave de consumidor aquí" // REEMPLAZAR con la clave de OAuth de la aplicación de Twitter #define kOAuthConsumerSecret @ "Su secreto de consumidor aquí" // REEMPLAZA con la Secretaria de OAuth de la aplicación de Twitter
Usaremos estas constantes momentáneamente cuando instanciamos nuestra _motor
objeto.
Para nuestro caso de uso, queremos inicializar el _motor
objeto cuando se crea nuestro ViewController y luego muestra la pantalla de inicio de sesión de Twitter OAuth tan pronto como el controlador de vista termina de cargarse. Para inicializar el _motor
objeto, modificar el viewDidAppear
Método para leer de la siguiente manera:
- (void) viewDidAppear: (BOOL) animado si (! _ engine) _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self]; _engine.consumerKey = kOAuthConsumerKey; _engine.consumerSecret = kOAuthConsumerSecret;
Ahora adelante y suelte el _motor
Objeto en nuestro método dealloc del controlador de vista:
- (void) dealloc [_engine release]; [TweetTextField release]; [super dealloc];
Después de que nuestra vista termine de cargarse, queremos iniciar inmediatamente la pantalla de inicio de sesión de Twitter. Para ello, deberá modificar de nuevo el viewDidAppear
método como tal:
- (void) viewDidAppear: (BOOL) animado si (! _ engine) _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self]; _engine.consumerKey = kOAuthConsumerKey; _engine.consumerSecret = kOAuthConsumerSecret; UIViewController * controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self]; if (controller) [self presentModalViewController: controller animated: YES];
Si ejecuta la aplicación ahora, verá que estamos presentando con éxito la pantalla de inicio de sesión de Twitter cada vez que se muestra nuestra vista personalizada. Sin embargo, hay un problema importante con esta configuración: la pantalla de inicio de sesión siempre se mostrará cuando aparezca la vista, incluso si el usuario ya ha iniciado sesión. Necesitamos agregar un condicional que solo mostrará este control si el usuario aún no lo ha hecho. conectado a través de OAuth.
Para hacer esto, agregue el siguiente condicional antes de mostrar la vista:
if (! [_ engine isAuthorized]) UIViewController * controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self]; if (controller) [self presentModalViewController: controller animated: YES];
los está autorizado
método devolverá un valor booleano de VERDADERO si tenemos un token de autenticación OAuth. Por lo tanto, este condicional simplemente prueba si no haga tener autorización, y luego muestra el inicio de sesión de Twitter cuando sea necesario.
Para el está autorizado
Método para trabajar, también necesitamos agregar lo siguiente SA_OAuthTwitterEngineDelegate
Métodos de protocolo responsables de almacenar nuestro token de autenticación OAuth después del primer inicio de sesión:
// ================================================ ================================================== =========================== #pragma mark SA_OAuthTwitterEngineDelegate - (void) storeCachedTwitterOAuthData: (NSString *) datos paraUsername: (NSString *) username NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [por defecto setObject: data forKey: @ "authData"]; [los valores predeterminados sincronizan]; - (NSString *) cachedTwitterOAuthDataForUsername: (NSString *) nombre de usuario return [[NSUserDefaults standardUserDefaults] objectForKey: @ "authData"];
En lo que quizás sea el paso más simple de todo el proceso, agregue la siguiente línea de código a updateTwitter
, Nuestro método de acción de IBA personalizado, para publicar una actualización en Twitter:
[_engine sendUpdate: tweetTextField.text];
Voila! Ahora deberías estar publicando actualizaciones en tu feed de Twitter. Sin embargo, todavía no hemos terminado. ¿Qué pasa si nuestra aplicación no publica la actualización? ¿Qué pasaría si quisiéramos presentar una vista de confirmación si el tweet se publica correctamente? Afortunadamente, el TwitterEngineDelegate
El protocolo tiene dos métodos definidos para este propósito..
Agregue el siguiente código a TwitterRushViewController.m
:
// ================================================ ================================================== =========================== #pragma mark TwitterEngineDelegate - (void) requestSucceeded: (NSString *) requestIdentifier NSLog (@ "Request% @ tenido éxito ", requestIdentifier); - (void) requestFailed: (NSString *) requestIdentifier withError: (NSError *) error NSLog (@ "Error en la solicitud% @:% @", requestIdentifier, error);
Puede ver que la aplicación ahora registrará los mensajes de éxito y error en la consola, dependiendo de lo que suceda después de hacer clic en el botón "Tweet". Este comportamiento se puede modificar fácilmente para satisfacer las necesidades de sus propias aplicaciones.
Si ha seguido las instrucciones paso a paso anteriores, ahora debería poder publicar actualizaciones de estado en Twitter en nombre de sus usuarios.!
El lleno TwitterRushViewController.h
El archivo ahora debería verse así:
#importar#import "SA_OAuthTwitterController.h" @class SA_OAuthTwitterEngine; @interface TwitterRushViewController: UIViewController IBOutlet UITextField * tweetTextField; SA_OAuthTwitterEngine * _engine; @ propiedad (no atómica, retener) IBOutlet UITextField * tweetTextField; - (IBAction) updateTwitter: (id) sender; @fin
El lleno TwitterRushViewController.m
el archivo debe leer:
#importar "TwitterRushViewController.h" #importar "SA_OAuthTwitterEngine.h" / * Defina las constantes a continuación con la clave y el secreto de Twitter para su aplicación. Cree las credenciales de Twitter OAuth registrando su aplicación como un Cliente OAuth aquí: http://twitter.com/apps/new * / #define kOAuthConsumerKey @ "Su clave aquí" // REEMPLAZAR con la clave OAuth de la aplicación de Twitter #define kOAuthConsumerSecret @ "Su Secret Here "// REEMPLAZO con la aplicación de Twitter OAuth Secret @implementation TwitterRushViewController @synthesize tweetTextField; #pragma mark Métodos personalizados - (IBAction) updateTwitter: (id) sender // Dismiss Keyboard [tweetTextField resignFirstResponder]; // El código de integración de Twitter va aquí [_engine sendUpdate: tweetTextField.text]; #pragma mark ViewController Lifecycle - (void) viewDidAppear: (BOOL) animated // Inicialización de Twitter / El código de inicio de sesión va aquí si (! _ engine) _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self]; _engine.consumerKey = kOAuthConsumerKey; _engine.consumerSecret = kOAuthConsumerSecret; if (! [_ engine isAuthorized]) UIViewController * controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self]; if (controller) [self presentModalViewController: controller animated: YES]; - (void) viewDidUnload [tweetTextField release]; tweetTextField = nil; - (void) didReceiveMemoryWarning [super didReceiveMemoryWarning]; - (void) dealloc [_engine release]; [TweetTextField release]; [super dealloc]; // =============================================== ================================================== ============================ #pragma mark SA_OAuthTwitterEngineDelegate - (void) storeCachedTwitterOAuthData: (NSString *) datos paraUsername: (NSString *) username NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [por defecto setObject: data forKey: @ "authData"]; [los valores predeterminados sincronizan]; - (NSString *) cachedTwitterOAuthDataForUsername: (NSString *) nombre de usuario return [[NSUserDefaults standardUserDefaults] objectForKey: @ "authData"]; // =============================================== ================================================== ============================ #pragma mark TwitterEngineDelegate - (void) requestSucceeded: (NSString *) requestIdentifier NSLog (@ "Request% @ tuvo éxito ", requestIdentifier); - (void) requestFailed: (NSString *) requestIdentifier withError: (NSError *) error NSLog (@ "Error en la solicitud% @:% @", requestIdentifier, error); @final
Gracias por leer este tutorial en la biblioteca Twitter-OAuth-iPhone, y un agradecimiento muy especial a Ben Gottlieb, Matt Gemmell, Jon Crosby, Chris Kimpton e Isaiah Carew. Sin su arduo trabajo, implementar la API de Twitter con el iPhone SDK tomaría muchos, muchos más pasos para lograrlo..
¿Tiene preguntas o comentarios sobre este tutorial? Déjelos en la sección de comentarios a continuación o envíe un mensaje a @markhammonds directamente en twitter. Puntos de bonificación por completar este tutorial y utilizar la aplicación TwitterRush para enviarme un mensaje de bienvenida!