社交网络
使用说明
通过CocoaPods安装
pod 'SocialNetwork', '0.3.4'
可以打开官方社交网络应用或展示SFSafariViewController
进行授权
switch SocialNetwork.facebook.appExists {
case true:
UIApplication.shared.openURL(SocialNetwork.facebook.appUrl)
case false:
let controller = SFSafariViewController(url: SocialNetwork.facebook.oauthUrl)
UIApplication.shared.keyWindow?.rootViewController?.present(controller: controller)
}
请注意,并非所有社交网络都允许通过其官方应用进行授权。
Info.plist配置
要使用appExists
变量,您应该为所需社交网络提供LSApplicationQueriesSchemes
<key>LSApplicationQueriesSchemes</key>
<array>
<!-- facebook.com -->
<string>fb</string>
<string>fbapi</string>
<string>fbauth</string>
<string>fbauth2</string>
<!-- ok.ru -->
<string>odnoklassniki</string>
<string>okauth</string>
<!-- vk.com -->
<string>vk</string>
<string>vk-share</string>
<string>vkauthorize</string>
</array>
必要的CFBundleURLTypes
- socialnetwork
。其他CFBundleURLTypes
是可选的,并且仅在您计划使用官方应用进行授权的情况下提供
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>SocialNetwork</string>
<key>CFBundleURLSchemes</key>
<array>
<string>socialnetwork</string>
<!-- facebook.com -->
<string>fb0123456789</string>
<!-- ok.ru -->
<string>ok0123456789</string>
<!-- vk.com -->
<string>vk0123456789</string>
</array>
</dict>
</array>
重定向URL配置
在每个计划用于授权的社交网络中,您应该提供一个重定向URL
https://iwheelbuy.github.io/SocialNetwork/simplified.html
重定向HTML页面的代码可以在那里找到
https://github.com/iwheelbuy/SocialNetwork/blob/master/docs/simplified.html
基本设置
在您的项目中的某个位置设置 SocialNetworkDataSource
和 SocialNetworkDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
SocialNetwork.dataSource = self
SocialNetwork.delegate = self
return true
}
按照这种方式继续URL
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if SocialNetwork.didProceed(url: url) {
return true
}
return false
}
遵守 SocialNetworkDelegate
以接收授权数据
extension AppDelegate: SocialNetworkDelegate {
func socialNetwork(socialNetwork: SocialNetwork, didCompleteWithParameters parameters: [String : String]) {
// hide authorization controllers if there are some
if let token = socialNetwork.getToken(parameters: parameters) {
// do something with token
}
}
}
遵守 SocialNetworkDataSource
并为所需社交网络提供信息
extension AppDelegate: SocialNetworkDataSource {
func socialNetworkClientIdentifier(socialNetwork: SocialNetwork) -> String? {
switch socialNetwork {
case .facebook:
return "0123456789"
default:
return nil
}
}
}
还有一些额外的可选方法,其中您可以为代码流授权提供客户端密钥或更改默认权限
extension AppDelegate: SocialNetworkDataSource {
func socialNetworkClientSecret(socialNetwork: SocialNetwork) -> String? {
switch socialNetwork {
case .facebook:
return "987654321"
default:
return nil
}
}
func socialNetworkPermissions(socialNetwork: SocialNetwork) -> String? {
switch socialNetwork {
case .facebook:
return "public_profile,email"
default:
return nil
}
}
}
作者
iwheelbuy, [email protected]
许可
SocialNetwork 按照MIT许可可用。请参阅LICENSE文件以获取更多信息。