7

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

我试过的

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

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

我尝试按照有关此答案的建议使用桥接头。

MyProject-Bridging-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' 

问题

有没有人成功地将微信 API 与 Swift 项目一起使用?我很想看到一个简短的步骤列表或一些示例代码。我不介意是否有任何补充链接指向中文资源。

4

3 回答 3

25

有关此过程的更新,请参阅@chengsam 的答案。

如何在你的 Swift 项目中使用微信 SDK

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

申请微信App ID

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

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

下载微信SDK

您可以尝试使用英文网站上的 SDK,但由于在撰写本文时中文网站上的内容似乎更最新,因此我下载了用于这些说明的 SDK。

我从这个页面下载了 SDK ,微信 SDK 版本 1.6.2 的链接在这里。不过,您可能希望使用最新版本,无论将来会是什么。

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

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

在此处输入图像描述

错误修复:

在 SDK 1.6.2 中,问题中描述的问题出现并由@Anbu.Karthik's answer 解决。只需添加#import <UIKit/UIKit.h>WXApiObject.h. (您实际上可以#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 所需的唯一行。(当我创建头文件时,还有一些其他自动生成的代码行,但我只是将它们注释掉,因为我不知道它们做了什么。如果我发现它们有用,我稍后会回来编辑这个答案。 )

有关添加桥接头的更多帮助,请参见此处此处此处。

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

添加所需的框架和库

转到项目的General选项卡并向下滚动到Linked Frameworks and Libraries。单击加号 (+) 按钮以添加以下所需的框架和库。

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

它现在应该是这样的:

在此处输入图像描述

CoreTelephony自述文件中libc++提到了,在线 SDK 安装说明中也提到了,反之亦然。为了安全起见,我只是将它们都添加了。如果实际上不需要其中任何一个,请随时发表评论。

添加 URL 方案

转到项目的Info选项卡并展开URL Types项。

添加一个类型,其中标识符是weixin,URL Schemes 是你成功注册微信后应该得到的 AppID。

在此处输入图像描述

编辑 AppDelegate

编辑您的 AppDelegate.swift 文件以包含以下函数。请务必使用您的 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。(当前链接在这里,如果链接失效,请在官方微信开发者文档中查找示例演示。)

编辑信息.plist

右键单击 Info.plist 并选择 Open As > Source Code。然后在 final 之前添加以下两个键</dict>

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

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

使用微信 API

此时,您应该可以开始在您的 Swift 代码中使用微信 API。稍后我可能会添加更多 API 示例,但以下是概念证明。

发一个短信

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

我无法使用 Objective-C 定义的 enum WXSceneSession,所以我只使用了它的整数值。可能有更好的解决方案,但目前可行。


上述解决方案已使用 Xcode 7.2 和 iOS 9.2 进行了测试。

于 2016-03-08T08:22:13.893 回答
2

Suragch 的回答详细描述了如何将微信 API 添加到您的应用程序中。但是在我实施之后,我发现程序现在可以更简单了。下面我将重点介绍与该答案相比的一些变化。您可以参考该答案以获取更多详细信息。

下载 SDK

使用 CocoaPods

pod 'WechatOpenSDK'

手动的

资源页面下载 SDK 。在撰写本文时有两个版本,第一个包含支付功能,第二个不包含。根据您的需要选择一个。下载后,将文件复制到您的项目中。根据该答案添加所需的框架和库。如果您使用 CocoaPods 安装,则不需要此步骤。

添加桥接头

正如WXApi用 Objective-C 编写的那样,我们必须创建一个桥接头才能在 Swift 项目中使用它。请参阅此链接以了解如何添加桥接头。

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

#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)
}

编辑信息.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
}
于 2017-07-18T16:51:14.873 回答
1

预期类型-> 对于此错误,请检查Apple 文档中的 UIImage 是否位于 中UIKit,而不是Foundation。这些文档现在都针对 Swift。

@import UIKit;

在客观-c。

#import <UIKit/UIKit.h> 

您需要在文件顶部(也不需要 Foundation 导入)。

无法导入桥接头->您犯了一个小错误,请参阅此链接,它可以帮助

于 2016-03-01T09:27:10.983 回答