如何将微信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 } // ... }
请参阅示例演示应用程序,了解可在onReq
和onResp
执行的可选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 }