從使用友盟SDK分享facebook失敗到類方法交換

最近項(xiàng)目中把以前的各個(gè)第三方分享統(tǒng)一使用友盟SDK管理, 發(fā)現(xiàn)一個(gè)問題就是分享facebook一直失敗. 而且是在分享圖片的時(shí)候失敗, 分享網(wǎng)頁的時(shí)候是可以的

分享失敗的時(shí)候一直報(bào)錯(cuò):

[core] isAvailableForServiceType: for com.apple.social.facebook returning NO

這句話不是我打印的, 我猜想是不是友盟內(nèi)部的代碼做了這個(gè)操作, 但是我又拿不到友盟的代碼, 查了很多資料, 都沒說到點(diǎn)子上. 但是怎么解決這個(gè)問題呢?

我發(fā)現(xiàn)isAvailableForServiceType這個(gè)方法是系統(tǒng)框架Social框架里SLComposeViewController的方法, 于是我寫了一個(gè)SLComposeViewController的分類, 對(duì)isAvailableForServiceType進(jìn)行了方法交換, 因?yàn)橹皩懛椒ń粨Q都寫的是對(duì)象方法的方法交換, 所以類方法交換老是不成功, 參考了一下網(wǎng)上的方法, 找到了答案:

iOS runtime交換類方法的問題

以下是我的代碼:

#import <Social/Social.h>
#import <objc/message.h>
#import "SLComposeViewController+TG_ShareExtension.h"

@implementation SLComposeViewController (TG_ShareExtension)

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        [objc_getClass("SLComposeViewController") tg_getOrigMenthod:@selector(isAvailableForServiceType:) swizzledMethod:@selector(tg_isAvailableForServiceType:)];
    });
}

+ (BOOL)tg_getOrigMenthod:(SEL)orignalSel swizzledMethod:(SEL)swizzledSel{
    Class kls = self;
    Method origMethod = class_getClassMethod(kls, orignalSel);
    Method altMethod = class_getClassMethod(kls, swizzledSel);
    if (!origMethod || !altMethod) {
        return NO;
    }
    Class metaClass = object_getClass(kls);
    BOOL didAddMethod = class_addMethod(metaClass,orignalSel,
                                        method_getImplementation(altMethod),
                                        method_getTypeEncoding(altMethod));
    
    if (didAddMethod) {
        class_replaceMethod(metaClass,swizzledSel,
                            method_getImplementation(origMethod),
                            method_getTypeEncoding(origMethod));
    } else {
        method_exchangeImplementations(origMethod, altMethod);
    }
    return YES;
}

+ (BOOL)tg_isAvailableForServiceType:(NSString *)serviceType {
    if ([serviceType isEqualToString:@"com.apple.social.facebook"]) {
        return YES;
    }
    return [self tg_isAvailableForServiceType:serviceType];
}

@end

核心就是當(dāng)serviceType是facebook時(shí), 始終返回YES, 于是解決了這個(gè)問題. 類方法交換只是一個(gè)工具, 解決問題的思路才是關(guān)鍵.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末必盖,一起剝皮案震驚了整個(gè)濱河市踏志,隨后出現(xiàn)的幾起案子丽猬,更是在濱河造成了極大的恐慌,老刑警劉巖脚祟,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谬以,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡由桌,警方通過查閱死者的電腦和手機(jī)为黎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門邮丰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铭乾,你說我怎么就攤上這事剪廉。” “怎么了炕檩?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵斗蒋,是天一觀的道長。 經(jīng)常有香客問我笛质,道長泉沾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任妇押,我火速辦了婚禮跷究,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敲霍。我一直安慰自己俊马,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布色冀。 她就那樣靜靜地躺著潭袱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锋恬。 梳的紋絲不亂的頭發(fā)上屯换,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音与学,去河邊找鬼彤悔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛索守,可吹牛的內(nèi)容都是我干的晕窑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼卵佛,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼杨赤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起截汪,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤疾牲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后衙解,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阳柔,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年蚓峦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了舌剂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片济锄。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖霍转,靈堂內(nèi)的尸體忽然破棺而出荐绝,到底是詐尸還是另有隱情,我是刑警寧澤很泊,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布委造,位于F島的核電站,受9級(jí)特大地震影響昏兆,放射性物質(zhì)發(fā)生泄漏妇穴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一呻纹、第九天 我趴在偏房一處隱蔽的房頂上張望姻报。 院中可真熱鬧哮缺,春花似錦妓忍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至酬凳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背罚拟。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工完箩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弊知,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓秩彤,卻偏偏與公主長得像漫雷,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子降盹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容