Day28 Plugin 从零开始到上架 - iOS总结

InstagramManager


class InstagramManager {
    private let userUpdated: ((UserInfoResponse) -> Void)
    private let mediasUpdated: (([[String : Any]]) -> Void)
    private let albumDetailUpdated: (([[String : Any]]) -> Void)
    private let mediaItemUpdated: (([String : Any]) -> Void)
    private let errorUpdated: ((String) -> Void)

    init(userUpdated: @escaping (UserInfoResponse) -> Void,
         mediasUpdated: @escaping ([[String : Any]]) -> Void,
         albumDetailUpdated: @escaping ([[String : Any]]) -> Void,
         mediaItemUpdated: @escaping ([String : Any]) -> Void,
         errorUpdated: @escaping (String) -> Void) {
        self.userUpdated = userUpdated
        self.mediasUpdated = mediasUpdated
        self.albumDetailUpdated = albumDetailUpdated
        self.mediaItemUpdated = mediaItemUpdated
        self.errorUpdated = errorUpdated
    }
    
    func getUserInfo() {
        do {
            try AccessTokenRepository.shared.getUserInfo { response in
                self.userUpdated(response)
            }
        }catch(let error) {
            if(error as? InstagramErrors == InstagramErrors.tokenEmpty){
                self.errorUpdated("TOKEN_EMPTY")
                return
            }
            if(error as? InstagramErrors == InstagramErrors.tokenExpired){
                self.errorUpdated("TOKEN_EXPIRED")
                return
            }
            print(error.localizedDescription)
            self.errorUpdated("UNKNOWN_EXCEPTION")
        }
    }
    
    func getMedias() {
        do {
            try AccessTokenRepository.shared.getMedias { response in
                self.mediasUpdated(response)
            }
        }catch(let error) {
            if(error as? InstagramErrors == InstagramErrors.tokenEmpty){
                self.errorUpdated("TOKEN_EMPTY")
                return
            }
            if(error as? InstagramErrors == InstagramErrors.tokenExpired){
                self.errorUpdated("TOKEN_EXPIRED")
                return
            }
            print(error.localizedDescription)
            self.errorUpdated("UNKNOWN_EXCEPTION")
        }
    }
    
    func getAlbumDetail(albumId: String) {
        do {
            try AccessTokenRepository.shared.getAlbumDetail(albumId: albumId, completionHandler: { response in
                self.albumDetailUpdated(response)
            })
        }catch(let error) {
            if(error as? InstagramErrors == InstagramErrors.tokenEmpty){
                self.errorUpdated("TOKEN_EMPTY")
                return
            }
            if(error as? InstagramErrors == InstagramErrors.tokenExpired){
                self.errorUpdated("TOKEN_EXPIRED")
                return
            }
            print(error.localizedDescription)
            self.errorUpdated("UNKNOWN_EXCEPTION")
        }
    }
    
    func getMediaItem(mediaId: String) {
        do {
            try AccessTokenRepository.shared.getMediaItem(mediaId: mediaId, completionHandler: { response in
                self.mediaItemUpdated(response)
            })
        }catch(let error) {
            if(error as? InstagramErrors == InstagramErrors.tokenEmpty){
                self.errorUpdated("TOKEN_EMPTY")
                return
            }
            if(error as? InstagramErrors == InstagramErrors.tokenExpired){
                self.errorUpdated("TOKEN_EXPIRED")
                return
            }
            print(error.localizedDescription)
            self.errorUpdated("UNKNOWN_EXCEPTION")
        }
    }
    
    func logout(){
        AccessTokenRepository.shared.logout()
        self.userUpdated(UserInfoResponse(id: "", username: "", accountType: ""))
    }
    
    func hasFoundInstagramClient() -> Bool{
        guard Bundle.main.object(forInfoDictionaryKey: "INSTAGRAM_CLIENT_ID") as? String != nil,
              Bundle.main.object(forInfoDictionaryKey: "INSTAGRAM_CLIENT_SECRET") as? String != nil,
              Bundle.main.object(forInfoDictionaryKey: "REDIRECT_URI") as? String != nil else {
            self.errorUpdated("NOT_FOUND_IG_CLIENT")
            return false
        }
        return true
    }
}

SwiftInstagramBasicDisplayApiPlugin 总结

iOS 端,SwiftInstagramBasicDisplayApiPlugin在收到指令时,会由handleFlutterMethodCall处理传来的事件,而方法等API都放至在InstagramManager,且在InstagramManager设置listeniing callback供SwiftInstagramBasicDisplayApiPlugin监听,在执行完方法後回传结果callback 给SwiftInstagramBasicDisplayApiPlugin,最後在透过MethodChannel回传结果至Flutter 端


<<:  Day29 Data Storage in iOS 05 - Core Data 实作专案范例

>>:  Day29 Plugin 从零开始到上架 - 上架

系统分析师的养成之路—观察篇

大家好!为了将我自己在系统分析师养成的道路上经历过的种种事情传承给後进,我会自今日起不定时发表文章在...

DAY18 - [JS] 合体ToDoList + 番茄钟

今日文章目录 需求说明 事前准备 显示效果 需求说明 在每个ToDoList项目中,都可以作番茄钟...

Chapter5 - 当一个勤劳的园丁,来修剪我们美丽的树(III)Canvas动画 让树随着读取画面长大

题外话 补充昨天忘记下的结论:不管要绘制的图案多大,都建议画(储存)在一个和原图一样大的canvas...

使用证书对代码进行签章,以防止其被篡改并向用户验证您的身份-使用您的私钥对代码进行散列并加密结果

-使用私钥和公钥对强大的程序集进行签名和验证 (来源:https://flylib.com/boo...

台湾需要1500位CISSP!

这是Erwin参加WUSON CISSP课程的上课笔记, 整理的真的很棒! 大家不一定要来上我的课,...