¿Cómo agregar la API WeChat a un proyecto Swift?

Estoy intentando agregar la funcionalidad de intercambio de WeChat a mi proyecto. Sin embargo, los archivos SDK , la documentación , las guías de desarrollo y el proyecto de muestra están todos en Objective-C. Estoy escribiendo mi proyecto en Swift.

Lo que he intentado

Agregué los siguientes archivos SDK siguientes a mi proyecto

libWeChatSDK.a WechatAuthSDK.h WXApi.h WXApiObject.h 

Intenté seguir el consejo sobre esta respuesta para usar un encabezado de puente.

MyProject-Bridging-Header.h

 #import "WXApi.h" 

Errores

Sin embargo, todavía no puedo usar la API de WeChat en mi código. Recibo los siguientes errores:

WXApiObject.h

 - (void) setThumbImage:(UIImage *)image; // Expected a type 

WXApi.h

 +(BOOL) sendAuthReq:(SendAuthReq*) req viewController : (UIViewController*) viewController delegate:(id) delegate; // Expected a type 

Y

 :0: error: failed to import bridging header '[my path]/MyProject-Bridging-Header.h' 

Pregunta

¿Alguien ha tenido éxito en el uso de la API WeChat con un proyecto Swift? Me encantaría ver una breve lista de pasos o algún código de muestra. No me importa si hay enlaces complementarios a los recursos chinos.

Consulte la respuesta de @ chengsam para obtener actualizaciones más recientes de este proceso.

Cómo utilizar el SDK de WeChat en su proyecto Swift

Las instrucciones oficiales del desarrollador WeChat en inglés parecen estar desactualizadas e incompletas. Las instrucciones chinas son mejores, pero solo tratan con Objective-C. Los pasos a continuación muestran cómo agregar el SDK WeChat (weixin 微 SD) a su proyecto.

Solicite una identificación de la aplicación WeChat

El sitio en inglés es dev.wechat.com . Sin embargo, nunca pude registrarme exitosamente en el sitio en inglés. Terminé usando el sitio chino: open.weixin.qq.com . Cómo hacerlo está más allá del scope de esta respuesta, pero si no conoce chino, Google translate puede ayudarlo. Tenga en cuenta que probablemente también necesite un número de teléfono en China.

Una vez que se aprueba su aplicación (solo tiene que describir su aplicación, no es necesario que proporcione un código binario o fuente), obtendrá una ID de la aplicación, que usará en su código.

Descargue el SDK de WeChat

Puede intentar usar el SDK desde el sitio en inglés, pero dado que las cosas parecen estar más actualizadas al momento de escribir esto en el sitio chino, aquí descargué el SDK para obtener estas instrucciones.

Descargué el SDK de esta página y el enlace para WeChat SDK versión 1.6.2 está aquí . Sin embargo, es probable que desee utilizar la versión más reciente, sea lo que sea que pueda haber en el futuro.

Copie los archivos SDK en su proyecto Xcode

Por motivos de organización, puse todos los archivos en el mismo grupo en el navegador de mi proyecto. (Los archivos reales todavía están en la carpeta raíz del proyecto).

enter image description here

Arreglo del fallo:

En SDK 1.6.2 aparece el problema descrito en la pregunta y se resuelve mediante la respuesta de @ Anbu.Karthik . Simplemente agregue #import a WXApiObject.h . (En realidad puede reemplazar #import con él.) Si está utilizando alguna versión del SDK después de la 1.6.2, esto puede no ser más un problema, por lo que es posible que desee completar los otros pasos antes de modificar el Archivos SDK.

Agregar un encabezado de puente

Tenga en cuenta que varios de los archivos SDK son archivos Objective-C header (.h). Para usarlos en su proyecto Swift, necesita agregar un archivo de encabezado de puente a su proyecto. Agregue un nuevo archivo (Archivo> Nuevo> Archivo …> iOS> Fuente> Archivo de encabezado) y YourProjectName-Bridging-Header.h .

Agregue la siguiente línea a este archivo.

 #import "WXApi.h" 

En mi proyecto, esta es la única línea en mi archivo de encabezado de puente porque es la única línea que necesita para el SDK de WeChat. (Hubo algunas otras líneas de código generadas automáticamente cuando creé el archivo de encabezado, pero simplemente las comenté porque no sabía lo que hacían. Volveré y editaré esta respuesta más adelante si descubro que son útiles. )

Consulte aquí , aquí y aquí para obtener más ayuda con la adición de un encabezado de puente.

No es necesario importar ninguno de los archivos de WeChat SDK en sus archivos de código Swift ahora.

Agregue los marcos y las bibliotecas requeridas

Vaya a la pestaña General de su proyecto y desplácese hacia abajo a los marcos y bibliotecas vinculados . Haga clic en el botón más (+) para agregar los siguientes marcos y bibliotecas necesarios.

  • libc ++. tbd
  • CoreTelephony.framework
  • libsqlite3.tbd
  • libz.tbd
  • SystemConfiguration.framework
  • libWeChatSDK.a (Este ya debería estar allí si lo ha copiado en su proyecto).

Ahora debería verse así:

enter image description here

CoreTelephony fue mencionado en el CoreTelephony léame y el libc++ fue mencionado en las instrucciones de instalación del SDK en línea, pero no al revés. Acabo de agregarlos para estar a salvo. Siéntase libre de dejar un comentario si alguno de estos no es realmente requerido.

Agregar esquema de URL

Vaya a la pestaña Información de su proyecto y expanda el elemento Tipos de URL .

Agregue un tipo en el que el identificador sea weixin y los Esquemas de URL sea el ID de aplicación que debería haber obtenido después de registrar su aplicación con éxito con WeChat.

enter image description here

Editar AppDelegate

Edite su archivo AppDelegate.swift para que contenga las siguientes funciones. Asegúrese de usar su AppID en lugar del ejemplo. Aparte de eso, puedes copiar y pegar.

 import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, WXApiDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // WeChat: replace with your AppID WXApi.registerApp("wx68aa08d12b601234") return true } func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool { return WXApi.handleOpenURL(url, delegate: self) } func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { return WXApi.handleOpenURL(url, delegate: self) } func onReq(req: BaseReq!) { // do optional stuff } func onResp(resp: BaseResp!) { // do optional stuff } // ... } 

Consulte la aplicación de demostración de muestra para ver las cosas opcionales que puede hacer en onReq y onResp . (El enlace actual está aquí, pero si ese enlace está roto, busque la demostración de ejemplo en los documentos oficiales de WeChat para desarrolladores).

Editar Info.plist

Haga clic derecho en Info.plist y elija Abrir como> Código fuente. A continuación, agregue las dos teclas siguientes antes de la final:

 LSApplicationQueriesSchemes  weixin  NSAppTransportSecurity  NSAllowsArbitraryLoads   

De acuerdo con el archivo Léame incluido con el SDK, esto es necesario porque iOS 9 limita el acceso http.

Use la API de WeChat

En este punto, debería poder comenzar a usar la API WeChat dentro de su código Swift. Puedo agregar un par de ejemplos de API más adelante, pero la siguiente es una prueba de concepto.

Enviar un mensaje de texto

 let message = SendMessageToWXReq() message.text = "Hello WeChat" message.bText = true message.scene = Int32(WXSceneSession.rawValue) // WXSceneSession WXApi.sendReq(message) 

No pude usar la enumeración Objective-C enum WXSceneSession , así que solo utilicé su valor entero. Probablemente haya una mejor solución, pero esto funciona por ahora.


Esta solución anterior se probó con Xcode 7.2 y iOS 9.2.

Se esperaba un tipo -> para este error, verifique una vez que la Documentación de Apple para UIImage esté en UIKit , no en Foundation . Los documentos ahora están dirigidos a Swift.

 @import UIKit; 

En objective-c.

 #import  

que necesita en la parte superior de su archivo (tampoco es necesario importar la Fundación).

no se pudo importar el encabezado de conexión en puente -> se le hizo el pequeño error. Vea este enlace, lo ayuda

La respuesta de Suragch describió cómo agregar WeChat API a su aplicación en detalles. Pero después de mi implementación, descubrí que el procedimiento puede ser más simple ahora. A continuación, resaltaré algunos de los cambios en comparación con esa respuesta. Puede consultar esa respuesta para más detalles.

Descargue el SDK

Usando CocoaPods

 pod 'WechatOpenSDK' 

Manual

Descargue el SDK de la página de recursos . Hay dos versiones al momento de escribir, la primera incluye la función de pago y la segunda no. Elija uno según su necesidad. Después de descargar, copie los archivos a su proyecto. Agregue los marcos y las bibliotecas requeridas según esa respuesta. Este paso no es necesario si instala usando CocoaPods.

Agregar encabezado puente

Como WXApi está escrito en Objective-C, tenemos que crear un encabezado de puente para usarlo en proyectos Swift. Vea este enlace sobre cómo agregar un encabezado de puente.

Después de crear el encabezado de puente, inserte la siguiente línea:

 #import "WXApi.h" 

Cambios iOS 9+

En AppDelegate, los siguientes dos métodos se usan antes de iOS 9:

 func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool { return WXApi.handleOpenURL(url, delegate: self) } func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { return WXApi.handleOpenURL(url, delegate: self) } 

En iOS 9, los dos métodos anteriores están en desuso y se usa el siguiente:

 func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { return WXApi.handleOpen(url, delegate: self) } 

Editar Info.plist

En mi caso, solo se necesita lo siguiente:

 LSApplicationQueriesSchemes  weixin  

Si no funciona para usted, agregue lo siguiente también:

 NSAppTransportSecurity  NSAllowsArbitraryLoads   

Extra

Para verificar si la aplicación WeChat está instalada en el teléfono, use el siguiente código:

 if WXApi.isWXAppInstalled() { // do something with WeChat... } else { // WeChat app is not installed, show error message }