登录 SDK 调起第三方应用

前言

在使用 QQ,微信等第三方登录时需要通过 application:openURL:options: 方法来调起对应的应用。但是在制作登录 SDK 时无法直接在 application:openURL:options: 写入相应的代码。此时需要通过 swizzle 技术来交换 application:openURL:options: 方法。

swizzle

application:openURL:options:UIApplicationDelegate 的方法,不能在 AppDelegate 当分类中 swizzle,因为 load 分类的时候并不能保证 UIApplicationDelegate 的代理方法已经实现。

可以通过一个 regist 方法在 application:didFinishLaunchingWithOptions:swizzle

这里要注意的是需要判断原来的类中是否已经存在 swizzle 的方法,防止重复交换。

BOOL registerMethod = class_addMethod(originalClass,
                                      swizzledSelector,
                                      method_getImplementation(swizzledMethod),
                                      method_getTypeEncoding(swizzledMethod));
if (!registerMethod) {
    return;
}

具体代码参考 GitHub。

你可能感兴趣的:(登录 SDK 调起第三方应用)