Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nixzhu/MonkeyKing
MonkeyKing helps you to post messages to Chinese Social Networks.
https://github.com/nixzhu/MonkeyKing
alipay qq wechat weibo
Last synced: 6 days ago
JSON representation
MonkeyKing helps you to post messages to Chinese Social Networks.
- Host: GitHub
- URL: https://github.com/nixzhu/MonkeyKing
- Owner: nixzhu
- License: mit
- Created: 2015-09-11T14:57:31.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2022-12-08T06:48:36.000Z (about 2 years ago)
- Last Synced: 2024-10-29T15:34:16.853Z (about 1 month ago)
- Topics: alipay, qq, wechat, weibo
- Language: Swift
- Homepage:
- Size: 3 MB
- Stars: 2,755
- Watchers: 68
- Forks: 240
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ios - MonkeyKing - MonkeyKing helps you post messages to Chinese Social Networks. (Networking / Video)
- awesome-ios-star - MonkeyKing - MonkeyKing helps you post messages to Chinese Social Networks. (Networking / Video)
- awesome - MonkeyKing - MonkeyKing helps you to post messages to Chinese Social Networks. (OOM-Leaks-Crash / Sharing)
README
# MonkeyKing
MonkeyKing helps you post SNS messages to Chinese Social Networks, without their buggy SDKs.
MonkeyKing uses the same analysis process of [openshare](https://github.com/100apps/openshare).
We also use some reverse engineering tools such as [Hopper Disassembler](https://www.hopperapp.com/) to unveil several undocumented authentication mechanisms under the hood.
It supports sharing **Text**, **URL**, **Image**, **Audio**, **Video**, and **File** to **WeChat**, **QQ**, **Alipay** or **Weibo**.
MonkeyKing can also post messages to Weibo by a web page. (Note: Audio and Video are exclusive to WeChat or QQ, and File is exclusive to QQ Dataline)MonkeyKing also supports **OAuth** and **Mobile payment** via WeChat and Alipay!
## Requirements
Swift 5, iOS 9
(For Swift 4.2, use version 1.13.0)
(For Swift 4.1/4.0, use version 1.11.0)
(For Swift 3, use version 1.3.0)
## Examples
### Share
Example: Share to WeChat (微信):
1. In your Project Target's `Info.plist`, set `URL Type`, `LSApplicationQueriesSchemes` as follow:
You should also add `weixinULAPI` once you enabled Universal Link of your WeChat App.2. Register account: // it's not necessary to do it here, but for the sake of convenience
```swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
MonkeyKing.regsiterAccount(
.weChat(
appID: "xxx",
appKey: "yyy",
miniAppID: nil,
universalLink: nil // FIXME: You have to adopt Universal Link otherwise your app name becomes "Unauthorized App"(未验证应用)...
)
)
return true
}
```3. Append the following code to handle callbacks:
```swift
// AppDelegate.swift
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
//func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { // only for iOS 8
return MonkeyKing.handleOpenURL(url)
}
```
Remember to handle userActivities if you are using `UIScene` in your project:
```swift
// SceneDelegate.swift
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
MonkeyKing.handleOpenUserActivity(userActivity)
}
```4. Prepare your message and ask MonkeyKing to deliver it:
```swift
@IBAction func shareURLToWeChatSession(sender: UIButton) {MonkeyKing.registerAccount(.weChat(appID: "xxx", appKey: "yyy", miniAppID: nil)) // you can do it here (just before deliver)
let message = MonkeyKing.Message.weChat(.session(info: (
title: "Session",
description: "Hello Session",
thumbnail: UIImage(named: "rabbit"),
media: .url(URL(string: "http://www.apple.com/cn")!)
)))MonkeyKing.deliver(message) { success in
print("shareURLToWeChatSession success: \(success)")
}
}
```It's done!
### OAuth
Example: Weibo OAuth
```swift
MonkeyKing.oauth(for: .weibo) { (oauthInfo, response, error) -> Void in
print("OAuthInfo \(oauthInfo) error \(error)")
// Now, you can use the token to fetch info.
}
```or, WeChat OAuth for code only
``` swift
MonkeyKing.weChatOAuthForCode { [weak self] (code, error) in
guard let code = code else {
return
}
// TODO: fetch info with code
}
```If the user doesn't have Weibo App installed on their devices then MonkeyKing will use web OAuth:
### Pay
Example: Alipay
```swift
let order = MonkeyKing.Order.alipay(urlString: urlString, scheme: nil)
MonkeyKing.deliver(order) { result in
print("result: \(result)")
}
```
> You need to configure `pay.php` in a remote server. You can find an example of `pay.php` at the Demo project.
### Launch WeChat Mini App
``` swift
let path = "..."
MonkeyKing.launch(.weChat(.miniApp(username: "gh_XXX", path: path, type: .release))) { result in
switch result {
case .success:
break
case .failure(let error):
print("error:", error)
}
}
```Note that `username` has a `gh_` prefix (原始ID).
### More
If you like to use `UIActivityViewController` for sharing then MonkeyKing has `AnyActivity` which can help you.
Check the demo for more information.
## Installation
### Carthage
```ogdl
github "nixzhu/MonkeyKing"
```### CocoaPods
```ruby
pod 'MonkeyKing'
```### Swift Package Manager
```
https://github.com/nixzhu/MonkeyKing
```## Contributors
Thanks to all the [contributors](https://github.com/nixzhu/MonkeyKing/graphs/contributors).
## Credits
WeChat logos from [WeChat-Logo](https://github.com/RayPS/WeChat-Logo) by Ray.
## License
MonkeyKing is available under the [MIT License][mitLink]. See the LICENSE file for more info.
[mitLink]:http://opensource.org/licenses/MIT