Swift集成友盟

友盟是一個非常強大的數(shù)據(jù)平臺,經過多年的沉淀譬正,被廣大應用廠商所青睞宫补,而且是免費的;是數(shù)據(jù)集成的不二之選曾我。但是很遺憾粉怕,友盟并沒有Swift版的sdk(期待推出啊),可能是有自己的考慮抒巢,所以在集成的時候只能通過橋接OC的方式贫贝;在頁面統(tǒng)計的時候有兩種方式,一種是通過集成在基類的viewWillAppear和viewWillDisappear進行統(tǒng)計,另一種是采用AOP方式,調用運行時的Method Swizzing笔诵。我們這里采用了AOP的方式克蚂。

一、集成友盟sdk
1.我們這邊只有用友盟做了數(shù)據(jù)統(tǒng)計,沒有集成推送和分享等,所有在pods里配置統(tǒng)計的sdk即可(這邊接入的是非idfa的sdk)

    pod 'UMengAnalytics-NO-IDFA'

2.進行橋接,首先創(chuàng)建一個OC的header文件也搓,把友盟的SDK頭文件導入,橋接的時候在Build settings里搜索Objective-C Bridging Header填入我們剛才創(chuàng)建好的頭文件路徑涵紊,配置好編譯一下傍妒,編譯成功之后就可以coding了


創(chuàng)建頭文件

配置橋接文件路徑

3.在應用啟動時候進行配置

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // 統(tǒng)計
        let umconfig = UMAnalyticsConfig.sharedInstance()
        umconfig?.appKey = ""
        umconfig?.channelId = "AppStore"
        MobClick.start(withConfigure: umconfig)
        let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String
        MobClick.setAppVersion(version)
        return true
}

此時已經可以統(tǒng)計到日活和新增數(shù)據(jù)了,但是產品還有頁面路徑的需求摸柄,所有我們還要在頁面里面做埋點

二颤练、Swift調用Method Swizzing
這里我們封裝一個UIViewController的category,分別hook了viewWillAppear和viewWillDisappear兩個方法塘幅。

extension UIViewController {
    @objc func newViewWillAppear(_ animated: Bool) {
        self.newViewWillAppear(animated) //Incase we need to override this method
        MobClick.beginLogPageView(type(of: self).description())
        print("WillAppear" + type(of: self).description())
    }
    
    @objc func newViewWillDismissAppear(_ animated: Bool) {
        self.newViewWillAppear(animated) //Incase we need to override this method
        MobClick.endLogPageView(type(of: self).description())
        print("WillDisAppear" + type(of: self).description())
    }
    
    static func swizzleViewWillAppear() {
        //Make sure This isn't a subclass of UIViewController, So that It applies to all UIViewController childs
        if self != UIViewController.self {
            return
        }
        let _: () = {
            let originalSelector = #selector(UIViewController.viewWillAppear(_:))
            let swizzledSelector = #selector(UIViewController.newViewWillAppear(_:))
            let originalMethod = class_getInstanceMethod(self, originalSelector)
            let swizzledMethod = class_getInstanceMethod(self, swizzledSelector)
            method_exchangeImplementations(originalMethod!, swizzledMethod!);
        }()
    }
    
    static func swizzleViewWillDismissAppear() {
        //Make sure This isn't a subclass of UIViewController, So that It applies to all UIViewController childs
        if self != UIViewController.self {
            return
        }
        let _: () = {
            let originalSelector = #selector(UIViewController.viewWillDisappear(_:))
            let swizzledSelector = #selector(UIViewController.newViewWillDismissAppear(_:))
            let originalMethod = class_getInstanceMethod(self, originalSelector)
            let swizzledMethod = class_getInstanceMethod(self, swizzledSelector)
            method_exchangeImplementations(originalMethod!, swizzledMethod!);
        }()
    }

}

封裝好之后記得在appdelegate里執(zhí)行一下

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        UIViewController.swizzleViewWillAppear()
        UIViewController.swizzleViewWillDismissAppear()
        return true
}

好的昔案,以上就是我們的swift集成友盟尿贫,這邊已經測試通過,歡迎大家討論!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末踏揣,一起剝皮案震驚了整個濱河市庆亡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捞稿,老刑警劉巖又谋,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異娱局,居然都是意外死亡彰亥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門衰齐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來任斋,“玉大人,你說我怎么就攤上這事耻涛》峡幔” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵抹缕,是天一觀的道長澈蟆。 經常有香客問我,道長卓研,這世上最難降的妖魔是什么趴俘? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮奏赘,結果婚禮上寥闪,老公的妹妹穿的比我還像新娘。我一直安慰自己志珍,他們只是感情好橙垢,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伦糯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嗽元。 梳的紋絲不亂的頭發(fā)上敛纲,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機與錄音剂癌,去河邊找鬼淤翔。 笑死,一個胖子當著我的面吹牛佩谷,可吹牛的內容都是我干的旁壮。 我是一名探鬼主播监嗜,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼抡谐!你這毒婦竟也來了裁奇?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤麦撵,失蹤者是張志新(化名)和其女友劉穎刽肠,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體免胃,經...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡音五,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了羔沙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躺涝。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扼雏,靈堂內的尸體忽然破棺而出诞挨,到底是詐尸還是另有隱情,我是刑警寧澤呢蛤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布惶傻,位于F島的核電站,受9級特大地震影響其障,放射性物質發(fā)生泄漏银室。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一励翼、第九天 我趴在偏房一處隱蔽的房頂上張望蜈敢。 院中可真熱鬧,春花似錦汽抚、人聲如沸抓狭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽否过。三九已至,卻和暖如春惭蟋,著一層夾襖步出監(jiān)牢的瞬間苗桂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工告组, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留煤伟,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像便锨,于是被迫代替她去往敵國和親围辙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內容

  • 從這個app開始用上了swift放案,最近又集成了友盟統(tǒng)計功能姚建,根據(jù)友盟的文檔一步一步來整體比較順利,但是中間也遇到了...
    移動端_小剛哥閱讀 4,065評論 12 4
  • github鏈接 我的博客 前言 友盟統(tǒng)計分析平臺是國內最大的移動應用統(tǒng)計分析平臺卿叽。用于幫助移動應用開發(fā)商統(tǒng)計和分...
    Cheero閱讀 1,766評論 1 1
  • 公司運營部提了一個需求需要統(tǒng)計打開某個頁面的次數(shù)桥胞,點擊某個按鈕的次數(shù)和定時器自動關閉的次數(shù),上次因為就這一個地方考婴,...
    玉思盈蝶閱讀 1,844評論 4 4
  • 關于友盟統(tǒng)計和itunesConnect統(tǒng)計到的下載量不一致的問題解釋: 友盟統(tǒng)計是根據(jù)設備來進行統(tǒng)計的贩虾,如果想要...
    流星大石頭閱讀 2,766評論 1 2
  • 1、前期準備 集成之前沥阱, 請在http://push.umeng.com/申請開通【友盟+】消息推送服務缎罢。下載 U...
    z小志閱讀 2,048評論 0 0