如何将微信API添加到Swift项目?

我正在尝试将微信分享function添加到我的项目中。 但是SDK文件 , 文档 , 开发指南和示例项目都在Objective-C中。 我正在用Swift编写我的项目。

我试过了

我将以下SDK文件添加到我的项目中

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

我试着按照这个答案使用桥接头的build议。

MyProject的桥接,Header.h

 #import "WXApi.h" 

错误

但是,我仍然无法使用我的代码中的微信API。 我收到以下错误:

WXApiObject.h

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

WXApi.h

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

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

有没有人用Swift项目成功地使用WeChat API? 我很想看到一个步骤或一些示例代码的简要列表。 我不介意补充链接是否适合中国的资源。

请参阅@ chengsam的答案 ,以获得对此过程的更新更新。

如何在Swift项目中使用WeChat SDK

官方的微信开发者英文说明似乎已经过时,不完整。 中文的指令比较好,但只处理Objective-C。 下面的步骤展示了如何将微信(微信微信)SDK添加到您的项目中。

申请微信App ID

英文网站是dev.wechat.com 。 但是,我从来没有能够成功地在英文网站上注册。 我结束了使用中文网站: open.weixin.qq.com 。 如何做到这一点超出了这个答案的范围,但如果你不懂中文,Google翻译可以帮助你。 请注意,您可能还需要在中国的电话号码。

在您的应用程序获得批准(您只需描述您的应用程序,无需提供二进制或源代码)后,您将获得应用程序ID,您将在其中使用该应用程序ID。

下载微信SDK

您可以尝试从英文网站使用SDK,但是由于在写这篇文章的时候中文网站上的内容似乎比较新,所以我下载了这些SDK的说明。

我从这个页面下载了SDK,微信SDK版本1.6.2的链接就在这里 。 不过,你可能会想使用最新的版本,不pipe将来会怎样。

将SDK文件复制到您的Xcode项目中

为了组织起见,我把所有的文件放在同一个组中,放在我的项目导航器中。 (实际的文件仍然在项目的根文件夹中。)

在这里输入图像说明

错误修复:

在SDK 1.6.2中,问题中描述的问题出现并由@ Anbu.Karthik的答案解决 。 只需将#import <UIKit/UIKit.h>添加到WXApiObject.h 。 (你实际上可以用它replace#import <Foundation/Foundation.h> )。如果你在1.6.2以后使用了一些SDK版本,这可能不再是一个问题,所以你可能想在修改之前完成其他步骤SDK文件。

添加桥接头

请注意,几个SDK文件是Objective-C头(.h)文件。 为了在你的Swift项目中使用它们,你需要添加一个Bridging Header文件到你的项目中。 添加一个新文件(File> New> File …> iOS> Source> Header File),并将其称为YourProjectName-Bridging-Header.h

将以下行添加到此文件。

 #import "WXApi.h" 

在我的项目中,这是桥接头文件中唯一的一行,因为它是唯一需要的微信SDK。 (当我创build头文件的时候,还有一些其他的自动生成的代码行,但是我只是把它们注释掉了,因为我不知道他们做了什么,如果我发现它们是有用的,我会回来编辑这个答案。 )

看到这里 , 在这里 , 这里更多的帮助,添加一个桥接头。

现在无需在Swift代码文件中导入任何微信SDK文件。

添加所需的框架和库

转到项目的“ 常规”选项卡,然后向下滚动到“ 链接的框架和库” 。 点击加号(+)button添加以下所需的框架和库。

  • 的libc ++。TBD
  • CoreTelephony.framework
  • libsqlite3.tbd
  • libz.tbd
  • SystemConfiguration.framework
  • libWeChatSDK.a(如果你已经将它拷贝到你的项目中,这个应该已经存在了。)

它现在应该是这样的:

在这里输入图像说明

在自述CoreTelephony中提到了CoreTelephony ,在线SDK安装说明中提到了libc++ ,但反之亦然。 我只是添加他们两个是安全的。 如果其中任何一个不是实际需要的,请随时留下评论。

添加URLscheme

转到项目的“ 信息”选项卡,然后展开“ URLtypes”项目。

添加一个types,其中的标识符是weixin ,URL Schemes是在您使用微信成功注册您的应用程序后应该获得的AppID。

在这里输入图像说明

编辑AppDelegate

编辑您的AppDelegate.swift文件以包含以下function。 一定要使用你的AppID而不是示例。 除此之外,你几乎可以复制和粘贴。

 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 } // ... } 

请参阅示例演示应用程序,了解可在onReqonResp执行的可选onResp 。 (当前链接在这里,但是如果这个链接被破坏了,那么在官方的微信开发者文档中查找示例演示。)

编辑Info.plist

右键点击Info.plist并selectOpen As> Source Code。 然后在最后添加以下两个键</dict>

 <key>LSApplicationQueriesSchemes</key> <array> <string>weixin</string> </array> <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> 

根据SDK附带的自述文件,这是必要的,因为iOS 9限制了http访问。

使用微信API

在这一点上,你应该能够开始在你的Swift代码中使用WeChat API。 稍后我可能会再添加一些API示例,但下面是一个概念certificate。

发一个短信

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

我无法使用Objective-C定义的枚举WXSceneSession ,所以我只是使用它的整数值。 可能有一个更好的解决scheme,但现在这个工作。


上面的这个解决scheme是用Xcode 7.2和iOS 9.2testing的。

预期types – >对于这个错误,检查一次UIImage的Apple文档是在UIKit ,而不是在Foundation 。 这些文档现在都是针对Swift的。

 @import UIKit; 

在目标-c。

 #import <UIKit/UIKit.h> 

你需要在你的文件的顶部(不需要基金会导入)。

无法导入桥接头 – >你是小错误看到这个链接,它可以帮助你

Suragch的答案描述了如何将微信API添加到您的应用程序的细节。 但是在我执行之后,我发现程序现在可以更简单了。 下面我将重点介绍一些与这个答案相比的变化。 你可以参考这个答案了解更多细节。

下载SDK

使用CocoaPods

 pod 'WechatOpenSDK' 

手册

从资源页面下载SDK。 有两个版本在写作时,第一个包括付款function,第二个不。 根据您的需要select一个。 下载后,将文件复制到您的项目。 根据这个答案添加所需的框架和库。 如果使用CocoaPods进行安装,则不需要执行此步骤。

添加桥接头

由于WXApi是用Objective-C编写的,所以我们必须创build一个桥接头来在Swift项目中使用它。 请参阅此链接以了解如何添加桥接报头。

创build桥接头后,插入以下行:

 #import "WXApi.h" 

iOS 9+更改

在AppDelegate中,在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) } 

在iOS 9中,以上两种方法已被弃用,并使用以下方法:

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

编辑Info.plist

在我的情况下,只需要以下内容:

 <key>LSApplicationQueriesSchemes</key> <array> <string>weixin</string> </array> 

如果它不适用于您,请添加以下内容:

 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> 

额外

要检查手机上是否安装了微信应用程序,请使用以下代码:

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