前言
在使用 QQ卿嘲,微信等第三方登錄時(shí)需要通過 application:openURL:options:
方法來調(diào)起對(duì)應(yīng)的應(yīng)用颂斜。但是在制作登錄 SDK
時(shí)無法直接在 application:openURL:options:
寫入相應(yīng)的代碼。此時(shí)需要通過 swizzle
技術(shù)來交換 application:openURL:options:
方法腔寡。
swizzle
application:openURL:options:
是 UIApplicationDelegate
的方法焚鲜,不能在 AppDelegate
當(dāng)分類中 swizzle
,因?yàn)?load
分類的時(shí)候并不能保證 UIApplicationDelegate
的代理方法已經(jīng)實(shí)現(xiàn)放前。
可以通過一個(gè) regist
方法在 application:didFinishLaunchingWithOptions:
中 swizzle
忿磅。
這里要注意的是需要判斷原來的類中是否已經(jīng)存在 swizzle
的方法,防止重復(fù)交換凭语。
BOOL registerMethod = class_addMethod(originalClass,
swizzledSelector,
method_getImplementation(swizzledMethod),
method_getTypeEncoding(swizzledMethod));
if (!registerMethod) {
return;
}
具體代碼參考 GitHub葱她。