组件化中对第三方库手动集成的坑和处理过程
2024-02-06 06:47:16
前言
随着项目的日益庞大,代码量的不断增加,代码的可维护性与可扩展性会成为一个严重的问题。组件化是一种很好的解决办法,它可以将项目拆分成多个独立的组件,每个组件都有自己的功能和职责,这样既可以提高代码的可维护性,也可以提高代码的可扩展性。
使用组件化也有一段时间了,碰到不少问题,但也算是给解决了,总结一下手动引入第三方组件的一些问题。
主要包含微信、支付宝、微博、极光推送、友盟这几种。
微信支付集成
微信支付集成需要用到微信开放平台的SDK,SDK的接入很简单,只需要在项目的Podfile中添加以下代码即可:
pod 'WechatOpenSDK'
添加好之后,需要在项目的AppDelegate中进行初始化:
import WechatOpenSDK
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// 微信开放平台SDK初始化
WXApi.registerApp("wxd930ea5d5a258f4f")
return true
}
// 微信支付回调
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return WXApi.handleOpen(url, delegate: self)
}
}
需要注意的是,在使用微信支付时,需要先获取用户的授权,否则会报一个错误。
支付宝支付集成
支付宝支付集成需要用到支付宝开放平台的SDK,SDK的接入也很简单,只需要在项目的Podfile中添加以下代码即可:
pod 'AlipaySDK'
添加好之后,需要在项目的AppDelegate中进行初始化:
import AlipaySDK
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// 支付宝开放平台SDK初始化
AlipaySDK.defaultService()?.payOrder("app_id=2015050100090184&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22seller_id%22%3A%222088102147304138%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%94%AF%E4%BB%98%22%2C%22out_trade_no%22%3A%221231312312321%22%7D", fromScheme: "alisdkdemo", callback: { (resultDic) in
print(resultDic)
})
return true
}
// 支付宝支付回调
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if AlipaySDK.defaultService()?.processOrder(withPaymentResult: url, standbyCallback: { (resultDic) in
print(resultDic)
}) ?? false {
return true
}
return false
}
}
需要注意的是,在使用支付宝支付时,也需要先获取用户的授权,否则会报一个错误。
微博登录集成
微博登录集成需要用到微博开放平台的SDK,SDK的接入也很简单,只需要在项目的Podfile中添加以下代码即可:
pod 'WeiboSDK'
添加好之后,需要在项目的AppDelegate中进行初始化:
import WeiboSDK
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// 微博开放平台SDK初始化
WeiboSDK.registerApp("3224510646")
return true
}
// 微博登录回调
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return WeiboSDK.handleOpen(url, delegate: self)
}
}
需要注意的是,在使用微博登录时,也需要先获取用户的授权,否则会报一个错误。
极光推送集成
极光推送集成需要用到极光推送的SDK,SDK的接入也很简单,只需要在项目的Podfile中添加以下代码即可:
pod 'JPush'
添加好之后,需要在项目的AppDelegate中进行初始化:
import JPush
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// 极光推送SDK初始化
let entity = JPUSHRegisterEntity()
entity.types = NSInteger(UNAuthorizationOptions.alert.rawValue) | NSInteger(UNAuthorizationOptions.sound.rawValue) | NSInteger(UNAuthorizationOptions.badge.rawValue)
JPUSHService.register(forRemoteNotificationConfig: entity, delegate: self)
JPUSHService.setup(withOption: launchOptions, appKey: "JPushAppKey", channel: "JPushChannel", apsForProduction: false, advertisingIdentifier: nil)
return true
}
// 极光推送回调
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
JPUSHService.registerDeviceToken(deviceToken)
}
}
需要注意的是,在使用极光推送时,需要先获取用户的授权,否则会报一个错误。
友盟集成
友盟集成需要用到友盟的SDK,SDK的接入也很简单,只需要在项目的Podfile中添加以下代码即可:
pod 'UMengAnalytics'
添加好之后,需要在项目的AppDelegate中进行初始化:
import Umeng
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// 友盟SDK初始化
UMConfigure.initWithAppkey("UmengAppKey", channel: "UmengChannel")
return true
}
}
手动集成第三方组件时需要注意的点
在手动集成第三方组件时,需要