NBus is a sharing and signin library for Chinese Social Application, such as WeChat, QQ and Weibo. NBus also supports system's sharing and Sign in with Apple.
Handler | Text | Image | Audio | Video | WebPage | File | MiniProgram |
---|---|---|---|---|---|---|---|
QQHandler | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
QQSDKHandler | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
WechatHandler | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
WechatSDKHandler | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
WeiboHandler | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
WeiboSDKHandler | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
SystemHandler | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
Handler | Oauth |
---|---|
QQHandler | ✔️ |
QQSDKHandler | ✔️ |
WechatHandler | ✔️ |
WechatSDKHandler | ✔️ |
WeiboHandler | ✔️ |
WeiboSDKHandler | ✔️ |
SystemHandler | ✔️ |
Handler | MiniProgram |
---|---|
QQHandler | ✔️ |
QQSDKHandler | ✔️ |
WechatHandler | ✔️ |
WechatSDKHandler | ✔️ |
WeiboHandler | ❌ |
WeiboSDKHandler | ❌ |
SystemHandler | ❌ |
- ✔️ - Support
- ⭕ - Experimental support
- ❌ - NOT support
- Swift 5.0
- iOS 10.0
- QQ 8.1.3 - 20190830
- Wechat 7.0.7 - 20190917
- Weibo ~ 20201017
- Edit
LSApplicationQueriesSchemes
inInfo.plist
.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<string>mqq</string>
<string>mqqopensdkapiV2</string>
<string>mqqopensdklaunchminiapp</string>
<string>mqqopensdkminiapp</string>
<string>mqqopensdknopasteboard</string>
<string>weixin</string>
<string>weixinULAPI</string>
<string>sinaweibo</string>
<string>weibosdk</string>
<string>weibosdk3.3</string>
</array>
</plist>
- Edit
CFBundleURLTypes
inInfo.plist
.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>QQ</string>
<key>CFBundleURLSchemes</key>
<array>
<string>tencent123456</string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>Wechat</string>
<key>CFBundleURLSchemes</key>
<array>
<string>wx123456</string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>Weibo</string>
<key>CFBundleURLSchemes</key>
<array>
<string>wb123456</string>
</array>
</dict>
</array>
</plist>
- Edit
com.apple.developer.associated-domains
inTARGET.entitlements
.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<string>applinks:www.example.com</string>
</array>
</plist>
- Register handler(s) before using NBus.
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let qqHandler = QQHandler(
appID: "tencent123456",
universalLink: URL(string: "https://www.example.com/qq_conn/123456/")!
)
Bus.shared.handlers = [qqHandler]
}
func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey: Any] = [:]
) -> Bool {
Bus.shared.openURL(url)
}
func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
Bus.shared.openUserActivity(userActivity)
}
- Share message using NBus.
let message = Messages.text(text: "NBus")
let endpoint = Endpoints.QQ.friend
Bus.shared.share(message: message, to: endpoint) { result in
switch result {
case .success:
print("Success")
case let .failure(error):
print(error)
}
}
- Oauth using NBus.
let platform = Platforms.qq
Bus.shared.oauth(with: platform) { result in
switch result {
case let .success(parameters):
let accessToken = parameters[Bus.OauthInfoKeys.QQ.accessToken]
let expirationDate = parameters[Bus.OauthInfoKeys.QQ.expirationDate]
let openID = = parameters[Bus.OauthInfoKeys.QQ.openID]
print(accessToken, expirationDate, openID)
case let .failure(error):
print(error)
}
}
- Launch Mini Program using NBus.
let program = Messages.miniProgram(
miniProgramID: "123456",
path: "/example",
link: URL(string: "https://www.example.com")!,
miniProgramType: .release,
title: "NBus",
description: "NBus",
thumbnail: UIImage(named: "example")?.jpegData(compressionQuality: 1)
)
let platform = Platforms.qq
Bus.shared.launch(program: program, with: platform) { result in
switch result {
case .success:
print("Success") // Never happen
case let .failure(error):
print(error)
}
}
To run the example project, clone the repo, edit the Example/NBus/Config.xcconfig
file, and run bundle install && bundle exec fastlane setup && open Example/NBus.xcworkspace
from the Example directory first.
You can use NBus
directly which is including all SDK bridging handlers.
pod "NBus" # default subspecs "SDKHandlers"
or all open source handlers.
pod "NBus/BusHandlers"
or what you like.
pod "NBus/QQSDKHandler"
pod "NBus/QQHandler"
pod "NBus/WechatSDKHandler"
pod "NBus/WechatHandler"
pod "NBus/WeiboSDKHandler"
pod "NBus/WeiboHandler"
pod "NBus/SystemHandler"
even those SDKs.
pod "NBusQQSDK"
pod "NBusWechatSDK"
pod "NBusWeiboSDK"
WeiboSDK.bundle
must saved in App's root path.
nuomi1, nuomi1@qq.com
- NBus 的由来
- NBus 之 QQHandler
- NBus 之 QQSDKHandler
- NBus 之 SystemHandler
- NBus 之 WechatHandler
- NBus 之 WechatSDKHandler
- NBus 之 WeiboHandler
- NBus 之 WeiboSDKHandler
NBus is available under the MIT license. See the LICENSE file for more info.