117个文件已删除
81个文件已修改
47个文件已添加
| | |
| | | 2DECF92D22325172002FF49F /* GuessLikeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DECF92C22325172002FF49F /* GuessLikeViewController.m */; }; |
| | | 2DECF93122325854002FF49F /* GuessLTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DECF92F22325854002FF49F /* GuessLTableViewCell.m */; }; |
| | | 2DECF93222325854002FF49F /* GuessLTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2DECF93022325854002FF49F /* GuessLTableViewCell.xib */; }; |
| | | 7042C94E2515A4FE0017F5D8 /* BUAdSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7042C94B2515A4FE0017F5D8 /* BUAdSDK.framework */; }; |
| | | 7042C94F2515A4FE0017F5D8 /* BUFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7042C94C2515A4FE0017F5D8 /* BUFoundation.framework */; }; |
| | | 7042C9502515A4FE0017F5D8 /* BUAdSDK.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7042C94D2515A4FE0017F5D8 /* BUAdSDK.bundle */; }; |
| | | 70452819250E2C610006C95E /* libGDTMobSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7045280E250E2C5F0006C95E /* libGDTMobSDK.a */; }; |
| | | 705951F425161153008E0CDF /* SearchTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 705951F325161153008E0CDF /* SearchTitleView.m */; }; |
| | | 705951F7251633E9008E0CDF /* SearchDetailListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 705951F6251633E9008E0CDF /* SearchDetailListCell.m */; }; |
| | |
| | | 705F1F83251F1CA80065350E /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 705F1F68251F1CA70065350E /* MJRefreshAutoFooter.m */; }; |
| | | 705F1F84251F1CA80065350E /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 705F1F6A251F1CA70065350E /* MJRefreshComponent.m */; }; |
| | | 705F1F85251F1CA80065350E /* MJRefreshTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 705F1F6D251F1CA70065350E /* MJRefreshTrailer.m */; }; |
| | | 70D5933E25EA17AB00438F1A /* BUAdSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70D5933A25EA17A900438F1A /* BUAdSDK.framework */; }; |
| | | 70D5933F25EA17AB00438F1A /* BUCNAuxiliary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70D5933B25EA17AA00438F1A /* BUCNAuxiliary.framework */; }; |
| | | 70D5934025EA17AB00438F1A /* BUAdSDK.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 70D5933C25EA17AA00438F1A /* BUAdSDK.bundle */; }; |
| | | 70D5934125EA17AB00438F1A /* BUFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70D5933D25EA17AB00438F1A /* BUFoundation.framework */; }; |
| | | 70D5934525EA1FAE00438F1A /* PPTVController.m in Sources */ = {isa = PBXBuildFile; fileRef = 70D5934425EA1FAE00438F1A /* PPTVController.m */; }; |
| | | 7B0D3B2C1D59BCAB003E74A8 /* AnimationTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B0D3B271D59BCAB003E74A8 /* AnimationTool.m */; }; |
| | | 7B0D3B2D1D59BCAB003E74A8 /* CMuneBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B0D3B291D59BCAB003E74A8 /* CMuneBar.m */; }; |
| | | 7B0D3B2E1D59BCAB003E74A8 /* CMuneItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B0D3B2B1D59BCAB003E74A8 /* CMuneItem.m */; }; |
| | |
| | | 2DECF92F22325854002FF49F /* GuessLTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GuessLTableViewCell.m; sourceTree = "<group>"; }; |
| | | 2DECF93022325854002FF49F /* GuessLTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GuessLTableViewCell.xib; sourceTree = "<group>"; }; |
| | | 5326AC3933907F23F3929227 /* Pods-BuWanVideo2.0.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BuWanVideo2.0.release.xcconfig"; path = "Pods/Target Support Files/Pods-BuWanVideo2.0/Pods-BuWanVideo2.0.release.xcconfig"; sourceTree = "<group>"; }; |
| | | 7042C94B2515A4FE0017F5D8 /* BUAdSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BUAdSDK.framework; sourceTree = "<group>"; }; |
| | | 7042C94C2515A4FE0017F5D8 /* BUFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BUFoundation.framework; sourceTree = "<group>"; }; |
| | | 7042C94D2515A4FE0017F5D8 /* BUAdSDK.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = BUAdSDK.bundle; sourceTree = "<group>"; }; |
| | | 70452801250E2C5C0006C95E /* GDTSDKDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GDTSDKDefines.h; sourceTree = "<group>"; }; |
| | | 70452802250E2C5C0006C95E /* GDTRewardVideoAdNetworkConnectorProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GDTRewardVideoAdNetworkConnectorProtocol.h; sourceTree = "<group>"; }; |
| | | 70452803250E2C5C0006C95E /* GDTMediaView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GDTMediaView.h; sourceTree = "<group>"; }; |
| | |
| | | 705F1F6B251F1CA70065350E /* MJRefreshFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshFooter.h; sourceTree = "<group>"; }; |
| | | 705F1F6C251F1CA70065350E /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackFooter.h; sourceTree = "<group>"; }; |
| | | 705F1F6D251F1CA70065350E /* MJRefreshTrailer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshTrailer.m; sourceTree = "<group>"; }; |
| | | 70D5933A25EA17A900438F1A /* BUAdSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BUAdSDK.framework; sourceTree = "<group>"; }; |
| | | 70D5933B25EA17AA00438F1A /* BUCNAuxiliary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BUCNAuxiliary.framework; sourceTree = "<group>"; }; |
| | | 70D5933C25EA17AA00438F1A /* BUAdSDK.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = BUAdSDK.bundle; sourceTree = "<group>"; }; |
| | | 70D5933D25EA17AB00438F1A /* BUFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BUFoundation.framework; sourceTree = "<group>"; }; |
| | | 70D5934325EA1FAE00438F1A /* PPTVController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PPTVController.h; sourceTree = "<group>"; }; |
| | | 70D5934425EA1FAE00438F1A /* PPTVController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PPTVController.m; sourceTree = "<group>"; }; |
| | | 7B0D3B261D59BCAB003E74A8 /* AnimationTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimationTool.h; sourceTree = "<group>"; }; |
| | | 7B0D3B271D59BCAB003E74A8 /* AnimationTool.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AnimationTool.m; sourceTree = "<group>"; }; |
| | | 7B0D3B281D59BCAB003E74A8 /* CMuneBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CMuneBar.h; sourceTree = "<group>"; }; |
| | |
| | | 2D732550212D6B5200E09821 /* WebP.framework in Frameworks */, |
| | | 2D73254E212D626B00E09821 /* YYWebImage.framework in Frameworks */, |
| | | 2D73254C212D626600E09821 /* YYCache.framework in Frameworks */, |
| | | 7042C94F2515A4FE0017F5D8 /* BUFoundation.framework in Frameworks */, |
| | | 2D73254A212D626000E09821 /* YYImage.framework in Frameworks */, |
| | | 7B8AC4F01D5D802200450285 /* CFNetwork.framework in Frameworks */, |
| | | 7B8AC5221D5D822F00450285 /* CoreMotion.framework in Frameworks */, |
| | | 70D5933F25EA17AB00438F1A /* BUCNAuxiliary.framework in Frameworks */, |
| | | 7B8AC50A1D5D80A500450285 /* Security.framework in Frameworks */, |
| | | 7B8AC4EA1D5D7FFC00450285 /* libz.tbd in Frameworks */, |
| | | 7B8AC4F61D5D804100450285 /* CoreMedia.framework in Frameworks */, |
| | |
| | | 7B389BDC1D61B1D10043A2F2 /* ModelIO.framework in Frameworks */, |
| | | 1845BB4B209BF212009C639B /* PassKit.framework in Frameworks */, |
| | | 7B8AC52C1D5D828000450285 /* libz.1.2.5.tbd in Frameworks */, |
| | | 7042C94E2515A4FE0017F5D8 /* BUAdSDK.framework in Frameworks */, |
| | | 70D5933E25EA17AB00438F1A /* BUAdSDK.framework in Frameworks */, |
| | | 7B1FF0DF1D6711CF00E6C207 /* libiconv.tbd in Frameworks */, |
| | | 1877D1791DCAE119000CEC83 /* JavaScriptCore.framework in Frameworks */, |
| | | 1877D1771DCAE100000CEC83 /* CoreData.framework in Frameworks */, |
| | |
| | | 7B8AC5141D5D810A00450285 /* Accelerate.framework in Frameworks */, |
| | | 7B8AC5121D5D80F700450285 /* libxml2.tbd in Frameworks */, |
| | | 7B8AC5021D5D807F00450285 /* MapKit.framework in Frameworks */, |
| | | 70D5934125EA17AB00438F1A /* BUFoundation.framework in Frameworks */, |
| | | 7B8AC4FE1D5D806A00450285 /* EventKitUI.framework in Frameworks */, |
| | | 7B8AC4EC1D5D800B00450285 /* libsqlite3.0.tbd in Frameworks */, |
| | | 8619598F33C90A9D1035A2BD /* Pods_BuWanVideo2_0.framework in Frameworks */, |
| | |
| | | 1833602A1DC3336400391627 /* çé¢ */ = { |
| | | isa = PBXGroup; |
| | | children = ( |
| | | 70D5934225EA1F6D00438F1A /* PPTV */, |
| | | 18A8D14A1DC32B5B00A03FB7 /* Sideslip(ä¾§è¾¹æ ) */, |
| | | 18A8D14B1DC32CDB00A03FB7 /* Main(主è§å¾) */, |
| | | 7BC600A01D63F134005CE8FD /* searchView(æç´¢) */, |
| | |
| | | 7042C94A2515A4FE0017F5D8 /* CSJ */ = { |
| | | isa = PBXGroup; |
| | | children = ( |
| | | 7042C94B2515A4FE0017F5D8 /* BUAdSDK.framework */, |
| | | 7042C94C2515A4FE0017F5D8 /* BUFoundation.framework */, |
| | | 7042C94D2515A4FE0017F5D8 /* BUAdSDK.bundle */, |
| | | 70D5933C25EA17AA00438F1A /* BUAdSDK.bundle */, |
| | | 70D5933A25EA17A900438F1A /* BUAdSDK.framework */, |
| | | 70D5933B25EA17AA00438F1A /* BUCNAuxiliary.framework */, |
| | | 70D5933D25EA17AB00438F1A /* BUFoundation.framework */, |
| | | ); |
| | | path = CSJ; |
| | | sourceTree = "<group>"; |
| | |
| | | 705F1F6D251F1CA70065350E /* MJRefreshTrailer.m */, |
| | | ); |
| | | path = Base; |
| | | sourceTree = "<group>"; |
| | | }; |
| | | 70D5934225EA1F6D00438F1A /* PPTV */ = { |
| | | isa = PBXGroup; |
| | | children = ( |
| | | 70D5934325EA1FAE00438F1A /* PPTVController.h */, |
| | | 70D5934425EA1FAE00438F1A /* PPTVController.m */, |
| | | ); |
| | | name = PPTV; |
| | | sourceTree = "<group>"; |
| | | }; |
| | | 7B0A1E1F1D4B1437000518FA /* cell */ = { |
| | |
| | | 18B6BE6E1DADDB4700DA4F63 /* InfoTableViewCell.xib in Resources */, |
| | | 7B4220FA1D6D7DDE007345E6 /* OnlySpecialOne.xib in Resources */, |
| | | 18BC12A81EDEA7AD001E2FB0 /* HotLiveTableViewCell.xib in Resources */, |
| | | 7042C9502515A4FE0017F5D8 /* BUAdSDK.bundle in Resources */, |
| | | 7B9D31CD1D54481000EDED00 /* XYRDetailViewController.xib in Resources */, |
| | | 7B59CC001D5B15A3000B357F /* GroupCollectionViewCell.xib in Resources */, |
| | | 7B4220FC1D6D7DDE007345E6 /* OnlySpecialThere.xib in Resources */, |
| | |
| | | 7BFBC65F1D6704E20058FFEB /* NoteCell.xib in Resources */, |
| | | 189787871D925B5D006245B9 /* GoogleAdTableViewCell.xib in Resources */, |
| | | 7B1FF0A71D67094500E6C207 /* CellOne.xib in Resources */, |
| | | 70D5934025EA17AB00438F1A /* BUAdSDK.bundle in Resources */, |
| | | 7B59CC191D5B16DC000B357F /* ADCollectionReusableView.xib in Resources */, |
| | | 18D94EAC1ECD7B6E00B6FA54 /* newADCollectionViewCell.xib in Resources */, |
| | | 18BC12B21EDEA87D001E2FB0 /* LiveListTableViewCell.xib in Resources */, |
| | |
| | | 18E943E62057656C0019FD04 /* recommendViewController.m in Sources */, |
| | | 7BB429141D4B5FC900AA2D11 /* UIImage+YTH.m in Sources */, |
| | | 7B1FF0DD1D670B8800E6C207 /* attentionView.m in Sources */, |
| | | 70D5934525EA1FAE00438F1A /* PPTVController.m in Sources */, |
| | | 1884A6031E545D4900548480 /* PopoverViewCell.m in Sources */, |
| | | 7BFBC6461D6703E40058FFEB /* WebControllerView.m in Sources */, |
| | | 18BC12B11EDEA87D001E2FB0 /* LiveListTableViewCell.m in Sources */, |
| | |
| | | CODE_SIGN_IDENTITY = "iPhone Developer"; |
| | | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; |
| | | CODE_SIGN_STYLE = Automatic; |
| | | CURRENT_PROJECT_VERSION = 76; |
| | | CURRENT_PROJECT_VERSION = 82; |
| | | DEVELOPMENT_TEAM = 98HSDT7AP4; |
| | | ENABLE_BITCODE = NO; |
| | | FRAMEWORK_SEARCH_PATHS = ( |
| | |
| | | "$(PROJECT_DIR)/BuWanVideo2.0/DKADSet_iOS_SDK_1.2.0_iphoneOS", |
| | | "$(PROJECT_DIR)/BuWanVideo2.0/GDT_iOS_SDK", |
| | | ); |
| | | MARKETING_VERSION = 3.1.0; |
| | | MARKETING_VERSION = 3.1.3; |
| | | ONLY_ACTIVE_ARCH = YES; |
| | | OTHER_LDFLAGS = ( |
| | | "$(inherited)", |
| | |
| | | CODE_SIGN_IDENTITY = "iPhone Developer"; |
| | | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; |
| | | CODE_SIGN_STYLE = Automatic; |
| | | CURRENT_PROJECT_VERSION = 76; |
| | | CURRENT_PROJECT_VERSION = 82; |
| | | DEVELOPMENT_TEAM = 98HSDT7AP4; |
| | | ENABLE_BITCODE = NO; |
| | | FRAMEWORK_SEARCH_PATHS = ( |
| | |
| | | "$(PROJECT_DIR)/BuWanVideo2.0/DKADSet_iOS_SDK_1.2.0_iphoneOS", |
| | | "$(PROJECT_DIR)/BuWanVideo2.0/GDT_iOS_SDK", |
| | | ); |
| | | MARKETING_VERSION = 3.1.0; |
| | | MARKETING_VERSION = 3.1.3; |
| | | ONLY_ACTIVE_ARCH = NO; |
| | | OTHER_LDFLAGS = ( |
| | | "$(inherited)", |
| | |
| | | uuid = "297DA90A-ED47-4DCA-BC7A-5F76C81057DB" |
| | | type = "0" |
| | | version = "2.0"> |
| | | <Breakpoints> |
| | | <BreakpointProxy |
| | | BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> |
| | | <BreakpointContent |
| | | uuid = "24C9F381-5D49-4CF5-BD18-1F53C86F33D2" |
| | | shouldBeEnabled = "No" |
| | | ignoreCount = "0" |
| | | continueAfterRunningActions = "No" |
| | | filePath = "BuWanVideo2.0/AppDelegate.m" |
| | | startingColumnNumber = "9223372036854775807" |
| | | endingColumnNumber = "9223372036854775807" |
| | | startingLineNumber = "100" |
| | | endingLineNumber = "100" |
| | | landmarkName = "-fetchCommenConfig" |
| | | landmarkType = "7"> |
| | | </BreakpointContent> |
| | | </BreakpointProxy> |
| | | </Breakpoints> |
| | | </Bucket> |
| | |
| | | if (width == 320.0f && height<=480.0f) { |
| | | // iphone4 iphone4s ä¸çdefaultå¾ç |
| | | _splash.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"320x480"]]; |
| | | imageview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"320"]]; |
| | | //imageview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"320"]]; |
| | | viewHeight = 55; |
| | | |
| | | }else if (width ==320.0f && height==568.0f) { |
| | | // iphone5 ä¸çdefaultå¾ç |
| | | _splash.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"320x568"]]; |
| | | imageview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"320"]]; |
| | | //imageview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"320"]]; |
| | | viewHeight = 55; |
| | | |
| | | }else if (width ==375.0f) { |
| | | } else if (width ==375.0f) { |
| | | // iphone6 ä¸çdefaultå¾ç |
| | | _splash.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"375x667"]]; |
| | | imageview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"375"]]; |
| | | //imageview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"375"]]; |
| | | viewHeight = 63; |
| | | |
| | | }else{ |
| | | // iphone6 plus ä¸çdefaultå¾ç |
| | | _splash.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"414x736"]]; |
| | | imageview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"414"]]; |
| | | //imageview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"414"]]; |
| | | viewHeight = 69; |
| | | } |
| | | if (KIsiPhoneX) { |
| | | _splash.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"1125x2436"]]; |
| | | // _splash.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"1125x2436"]]; |
| | | //imageview.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"414"]]; |
| | | } |
| | | imageview.image = [UIImage imageNamed:@"375"]; |
| | | |
| | | UIWindow *keyWindow = self.window; |
| | | //self.startTime = CACurrentMediaTime(); |
| | | [self.splashAdView loadAdData]; |
| | | [keyWindow.rootViewController.view addSubview:self.splashAdView]; |
| | | |
| | | self.splashAdView.frame = CGRectMake(0, 0, KScreenW, KScreenH - viewHeight); |
| | | CGFloat screenH = [[UIScreen mainScreen] bounds].size.height; |
| | | |
| | | _bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, KScreenH - viewHeight, KScreenW, viewHeight)]; |
| | | imageview.frame = CGRectMake(0, 12, _bottomView.frame.size.width, _bottomView.frame.size.height - 6); |
| | | //self.splashAdView.frame = CGRectMake(0, 0, KScreenW, screenH - viewHeight); |
| | | |
| | | [_bottomView addSubview:imageview]; |
| | | _bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, screenH - 100, KScreenW, 100)]; |
| | | _bottomView.backgroundColor = [UIColor whiteColor]; |
| | | |
| | | imageview.frame = CGRectMake(0, 12, _bottomView.frame.size.width, 57); |
| | | [_bottomView addSubview:imageview]; |
| | | |
| | | [keyWindow addSubview:self.bottomView]; |
| | | |
| | |
| | | { |
| | | "images" : [ |
| | | { |
| | | "size" : "20x20", |
| | | "filename" : "icon-20@2x.png", |
| | | "idiom" : "iphone", |
| | | "filename" : "徿 -40.png", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "size" : "20x20", |
| | | "idiom" : "iphone", |
| | | "filename" : "徿 -100ç坿¬-1.png", |
| | | "scale" : "3x" |
| | | }, |
| | | { |
| | | "size" : "29x29", |
| | | "idiom" : "iphone", |
| | | "filename" : "徿 -29.png", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "size" : "29x29", |
| | | "idiom" : "iphone", |
| | | "filename" : "徿 -58.png", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "size" : "29x29", |
| | | "idiom" : "iphone", |
| | | "filename" : "徿 -87.png", |
| | | "scale" : "3x" |
| | | }, |
| | | { |
| | | "size" : "40x40", |
| | | "idiom" : "iphone", |
| | | "filename" : "徿 -80.png", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "size" : "40x40", |
| | | "idiom" : "iphone", |
| | | "filename" : "徿 -120.png", |
| | | "scale" : "3x" |
| | | }, |
| | | { |
| | | "size" : "57x57", |
| | | "idiom" : "iphone", |
| | | "filename" : "徿 -57.png", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "size" : "57x57", |
| | | "idiom" : "iphone", |
| | | "filename" : "徿 -114.png", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "size" : "60x60", |
| | | "idiom" : "iphone", |
| | | "filename" : "徿 -121.png", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "size" : "60x60", |
| | | "idiom" : "iphone", |
| | | "filename" : "徿 -180.png", |
| | | "scale" : "3x" |
| | | }, |
| | | { |
| | | "size" : "20x20", |
| | | "idiom" : "ipad", |
| | | "filename" : "徿 -100ç坿¬-2.png", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "size" : "20x20", |
| | | "idiom" : "ipad", |
| | | "filename" : "徿 -41.png", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "size" : "29x29", |
| | | "idiom" : "ipad", |
| | | "filename" : "徿 -30.png", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "size" : "29x29", |
| | | "idiom" : "ipad", |
| | | "filename" : "徿 -59.png", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "size" : "40x40", |
| | | "idiom" : "ipad", |
| | | "filename" : "徿 -42.png", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "size" : "40x40", |
| | | "idiom" : "ipad", |
| | | "filename" : "徿 -81.png", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "size" : "50x50", |
| | | "idiom" : "ipad", |
| | | "filename" : "徿 -50.png", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "size" : "50x50", |
| | | "idiom" : "ipad", |
| | | "filename" : "徿 -100.png", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "size" : "72x72", |
| | | "idiom" : "ipad", |
| | | "filename" : "徿 -72.png", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "size" : "72x72", |
| | | "idiom" : "ipad", |
| | | "filename" : "徿 -144.png", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "size" : "76x76", |
| | | "idiom" : "ipad", |
| | | "filename" : "徿 -76.png", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "size" : "76x76", |
| | | "idiom" : "ipad", |
| | | "filename" : "徿 -152.png", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "size" : "83.5x83.5", |
| | | "idiom" : "ipad", |
| | | "filename" : "徿 -100ç坿¬.png", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "size" : "1024x1024", |
| | | "idiom" : "ios-marketing", |
| | | "filename" : "徿 -1024.png", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "size" : "24x24", |
| | | "idiom" : "watch", |
| | | "scale" : "2x", |
| | | "size" : "20x20" |
| | | }, |
| | | { |
| | | "filename" : "icon-20@3x.png", |
| | | "idiom" : "iphone", |
| | | "scale" : "3x", |
| | | "size" : "20x20" |
| | | }, |
| | | { |
| | | "filename" : "icon-29.png", |
| | | "idiom" : "iphone", |
| | | "scale" : "1x", |
| | | "size" : "29x29" |
| | | }, |
| | | { |
| | | "filename" : "icon-29@2x.png", |
| | | "idiom" : "iphone", |
| | | "scale" : "2x", |
| | | "size" : "29x29" |
| | | }, |
| | | { |
| | | "filename" : "icon-29@3x.png", |
| | | "idiom" : "iphone", |
| | | "scale" : "3x", |
| | | "size" : "29x29" |
| | | }, |
| | | { |
| | | "filename" : "icon-40@2x.png", |
| | | "idiom" : "iphone", |
| | | "scale" : "2x", |
| | | "size" : "40x40" |
| | | }, |
| | | { |
| | | "filename" : "icon-40@3x.png", |
| | | "idiom" : "iphone", |
| | | "scale" : "3x", |
| | | "size" : "40x40" |
| | | }, |
| | | { |
| | | "filename" : "icon-57.png", |
| | | "idiom" : "iphone", |
| | | "scale" : "1x", |
| | | "size" : "57x57" |
| | | }, |
| | | { |
| | | "filename" : "icon-57@2x.png", |
| | | "idiom" : "iphone", |
| | | "scale" : "2x", |
| | | "size" : "57x57" |
| | | }, |
| | | { |
| | | "filename" : "icon-60@2x.png", |
| | | "idiom" : "iphone", |
| | | "scale" : "2x", |
| | | "size" : "60x60" |
| | | }, |
| | | { |
| | | "filename" : "icon-60@3x.png", |
| | | "idiom" : "iphone", |
| | | "scale" : "3x", |
| | | "size" : "60x60" |
| | | }, |
| | | { |
| | | "filename" : "icon-20-ipad.png", |
| | | "idiom" : "ipad", |
| | | "scale" : "1x", |
| | | "size" : "20x20" |
| | | }, |
| | | { |
| | | "filename" : "icon-20@2x-ipad.png", |
| | | "idiom" : "ipad", |
| | | "scale" : "2x", |
| | | "size" : "20x20" |
| | | }, |
| | | { |
| | | "filename" : "icon-29-ipad.png", |
| | | "idiom" : "ipad", |
| | | "scale" : "1x", |
| | | "size" : "29x29" |
| | | }, |
| | | { |
| | | "filename" : "icon-29@2x-ipad.png", |
| | | "idiom" : "ipad", |
| | | "scale" : "2x", |
| | | "size" : "29x29" |
| | | }, |
| | | { |
| | | "filename" : "icon-40.png", |
| | | "idiom" : "ipad", |
| | | "scale" : "1x", |
| | | "size" : "40x40" |
| | | }, |
| | | { |
| | | "filename" : "icon-40@2x-1.png", |
| | | "idiom" : "ipad", |
| | | "scale" : "2x", |
| | | "size" : "40x40" |
| | | }, |
| | | { |
| | | "filename" : "icon-50.png", |
| | | "idiom" : "ipad", |
| | | "scale" : "1x", |
| | | "size" : "50x50" |
| | | }, |
| | | { |
| | | "filename" : "icon-50@2x.png", |
| | | "idiom" : "ipad", |
| | | "scale" : "2x", |
| | | "size" : "50x50" |
| | | }, |
| | | { |
| | | "filename" : "icon-72.png", |
| | | "idiom" : "ipad", |
| | | "scale" : "1x", |
| | | "size" : "72x72" |
| | | }, |
| | | { |
| | | "filename" : "icon-72@2x.png", |
| | | "idiom" : "ipad", |
| | | "scale" : "2x", |
| | | "size" : "72x72" |
| | | }, |
| | | { |
| | | "filename" : "icon-76.png", |
| | | "idiom" : "ipad", |
| | | "scale" : "1x", |
| | | "size" : "76x76" |
| | | }, |
| | | { |
| | | "filename" : "icon-76@2x.png", |
| | | "idiom" : "ipad", |
| | | "scale" : "2x", |
| | | "size" : "76x76" |
| | | }, |
| | | { |
| | | "filename" : "icon-83.5@2x.png", |
| | | "idiom" : "ipad", |
| | | "scale" : "2x", |
| | | "size" : "83.5x83.5" |
| | | }, |
| | | { |
| | | "filename" : "icon-1024.png", |
| | | "idiom" : "ios-marketing", |
| | | "scale" : "1x", |
| | | "size" : "1024x1024" |
| | | }, |
| | | { |
| | | "idiom" : "watch", |
| | | "role" : "notificationCenter", |
| | | "scale" : "2x", |
| | | "size" : "24x24", |
| | | "subtype" : "38mm" |
| | | }, |
| | | { |
| | | "size" : "27.5x27.5", |
| | | "idiom" : "watch", |
| | | "scale" : "2x", |
| | | "role" : "notificationCenter", |
| | | "scale" : "2x", |
| | | "size" : "27.5x27.5", |
| | | "subtype" : "42mm" |
| | | }, |
| | | { |
| | | "size" : "29x29", |
| | | "idiom" : "watch", |
| | | "role" : "companionSettings", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "size" : "29x29", |
| | | "idiom" : "watch", |
| | | "role" : "companionSettings", |
| | | "scale" : "3x" |
| | | }, |
| | | { |
| | | "size" : "40x40", |
| | | "idiom" : "watch", |
| | | "scale" : "2x", |
| | | "size" : "29x29" |
| | | }, |
| | | { |
| | | "idiom" : "watch", |
| | | "role" : "companionSettings", |
| | | "scale" : "3x", |
| | | "size" : "29x29" |
| | | }, |
| | | { |
| | | "idiom" : "watch", |
| | | "role" : "appLauncher", |
| | | "scale" : "2x", |
| | | "size" : "40x40", |
| | | "subtype" : "38mm" |
| | | }, |
| | | { |
| | | "size" : "44x44", |
| | | "idiom" : "watch", |
| | | "scale" : "2x", |
| | | "role" : "appLauncher", |
| | | "scale" : "2x", |
| | | "size" : "44x44", |
| | | "subtype" : "40mm" |
| | | }, |
| | | { |
| | | "size" : "50x50", |
| | | "idiom" : "watch", |
| | | "scale" : "2x", |
| | | "role" : "appLauncher", |
| | | "scale" : "2x", |
| | | "size" : "50x50", |
| | | "subtype" : "44mm" |
| | | }, |
| | | { |
| | | "size" : "86x86", |
| | | "idiom" : "watch", |
| | | "scale" : "2x", |
| | | "role" : "quickLook", |
| | | "scale" : "2x", |
| | | "size" : "86x86", |
| | | "subtype" : "38mm" |
| | | }, |
| | | { |
| | | "size" : "98x98", |
| | | "idiom" : "watch", |
| | | "scale" : "2x", |
| | | "role" : "quickLook", |
| | | "scale" : "2x", |
| | | "size" : "98x98", |
| | | "subtype" : "42mm" |
| | | }, |
| | | { |
| | | "size" : "108x108", |
| | | "idiom" : "watch", |
| | | "scale" : "2x", |
| | | "role" : "quickLook", |
| | | "scale" : "2x", |
| | | "size" : "108x108", |
| | | "subtype" : "44mm" |
| | | }, |
| | | { |
| | | "idiom" : "watch-marketing", |
| | | "size" : "1024x1024", |
| | | "scale" : "1x" |
| | | "scale" : "1x", |
| | | "size" : "1024x1024" |
| | | } |
| | | ], |
| | | "info" : { |
| | | "version" : 1, |
| | | "author" : "xcode" |
| | | "author" : "xcode", |
| | | "version" : 1 |
| | | } |
| | | } |
| | | } |
| | |
| | | "ContinuePlaying" = "Ù
تابعة Ø§ÙØªØ´ØºÙÙ"; |
| | | "GetRewardAfterPlaying" = "ÙÙ
بإستÙÙ
Ø§Ù Ø§ÙØªØ´ØºÙÙ ÙÙØØµÙ٠عÙ٠اÙÙ
ÙØ§Ùآت"; |
| | | "Wan" = "10 Ø£ÙÙ"; |
| | | "ViewDetail" = "عرض"; |
| | |
| | | "ContinuePlaying" = "Weiter wiedergeben"; |
| | | "GetRewardAfterPlaying" = "Bis zum Ende wiedergeben, um Prämien zu erhalten"; |
| | | "Wan" = "Zehntausend"; |
| | | "ViewDetail" = "Ansehen"; |
| | | // Icon |
| | |
| | | "View" = "View"; |
| | | "ContinuePlaying" = "Keep on"; |
| | | "GetRewardAfterPlaying" = "Finish playing to get rewards!"; |
| | | "ViewDetail" = "View"; |
| | | // Icon |
| | |
| | | "ContinuePlaying" = "Seguir con la reproducción"; |
| | | "GetRewardAfterPlaying" = "Terminar la reproducción para reclamar recompensas"; |
| | | "Wan" = "10"; |
| | | "ViewDetail" = "Ver"; |
| | | // Icon |
| | |
| | | "ContinuePlaying" = "Poursuivre la lecture"; |
| | | "GetRewardAfterPlaying" = "Terminez la lecture pour obtenir vos récompenses"; |
| | | "Wan" = "10 000"; |
| | | "ViewDetail" = "Voir"; |
| | | // Icon |
| | |
| | | "ContinuePlaying" = "दà¥à¤à¤¨à¤¾ à¤à¤¾à¤°à¥ रà¤à¥à¤"; |
| | | "GetRewardAfterPlaying" = "रिवà¥à¤°à¥à¤¡à¥à¤¸ à¤à¤¾ दावा à¤à¤°à¤¨à¥ à¤à¥ लिठपà¥à¤°à¤¾ दà¥à¤à¥à¤"; |
| | | "Wan" = "10 हà¤à¤¼à¤¾à¤°"; |
| | | "ViewDetail" = "दà¥à¤à¥à¤"; |
| | | // Icon |
| | |
| | | "ContinuePlaying" = "Lanjut memutar"; |
| | | "GetRewardAfterPlaying" = "Selesaikan pemutaran untuk mendapatkan reward"; |
| | | "Wan" = "10 ribu"; |
| | | "ViewDetail" = "Lihat"; |
| | | // Icon |
| | |
| | | "ContinuePlaying" = "Continua a riprodurre"; |
| | | "GetRewardAfterPlaying" = "Riproduci tutto per richiedere le ricompense"; |
| | | "Wan" = "10 mila"; |
| | | "ViewDetail" = "Visualizza"; |
| | |
| | | "Back" = "æ»ã"; |
| | | "Replay" = "ãªãã¬ã¤"; |
| | | "Continue" = "åçãç¶ãã"; |
| | | "Skip" = "skip"; |
| | | "Feedback" = "Feedback"; |
| | | "FeedbackStr1" = "Thank you for your feedback."; |
| | | "FeedbackStr2" = "We will try to do better."; |
| | | "FeedbackStr3" = "You have submitted feedback."; |
| | | "FeedbackStr4" = "please donât submit it again!"; |
| | | "Skip" = "ã¹ããã"; |
| | | "Feedback" = "ãã£ã¼ãããã¯"; |
| | | "FeedbackStr1" = "ãæè¦ãããã¨ããããã¾ã"; |
| | | "FeedbackStr2" = "ããè¯ãåºåä½é¨ãæä¾ãããã¾ã"; |
| | | "FeedbackStr3" = "ãã£ã¼ãããã¯ã¯ãã§ã«éä¿¡æ¸ã¿ã§ã"; |
| | | "FeedbackStr4" = "æ¢ã«éä¿¡æ¸ã¿ã§ã"; |
| | | "ViewNow" = "詳細ãè¦ã"; |
| | | "Download" = "download"; |
| | | "Download" = "å
¥æ"; |
| | | "LoadFailure" = "ãã¼ãã«å¤±æãã¾ãããã¯ãªãã¯ãã¦å度ã試ããã ãã"; |
| | | "GetRewardAfterWatching" = "åç»ãæå¾ã¾ã§è¦è´ããã ããã¨ãªã¯ã¼ããä»ä¸ããã¾ã"; |
| | | "GiveUpReward" = "ãããªã"; |
| | | "ContinueWatching" = "è¦è´ãç¶ãã"; |
| | | "CanbeTurnedOffAfter" = "%dså¾ã«éãããã¾ã"; |
| | | "Get" = "Get"; |
| | | "View" = "View"; |
| | | "Get" = "å
¥æ"; |
| | | "View" = "è¦ã"; |
| | | "ContinuePlaying" = "ã¤ã¥ãã"; |
| | | "GetRewardAfterPlaying" = "éãã§å ±é
¬ãã²ãã!"; |
| | | "ViewDetail" = "ãã§ãã¯"; |
| | | // Icon |
| | |
| | | "View" = "ì²´í¬"; |
| | | "ContinuePlaying" = "ê³ìíë¤"; |
| | | "GetRewardAfterPlaying" = "리ìëë ê²ì íë ì´ ì´íì ì§ê¸ë©ëë¤."; |
| | | "ViewDetail" = "ì²´í¬"; |
| | | // Icon |
| | |
| | | "ContinuePlaying" = "Continuar executando"; |
| | | "GetRewardAfterPlaying" = "Finalizar a execução para solicitar as premiações"; |
| | | "Wan" = "10 mil"; |
| | | "ViewDetail" = "Visualizar"; |
| | | // Icon |
| | |
| | | "ContinuePlaying" = "ÐÑодолжиÑÑ Ð¿ÑоÑмоÑÑ"; |
| | | "GetRewardAfterPlaying" = "ÐавеÑÑиÑе пÑоÑмоÑÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð½Ð°Ð³ÑадÑ"; |
| | | "Wan" = "10 ÑÑÑÑÑ"; |
| | | "ViewDetail" = "Ðид"; |
| | |
| | | "ContinuePlaying" = "à¹à¸¥à¹à¸à¸à¹à¸"; |
| | | "GetRewardAfterPlaying" = "à¹à¸¥à¹à¸à¸à¸à¸à¸à¹à¸à¸·à¹à¸à¸£à¸±à¸à¸£à¸²à¸à¸§à¸±à¸¥"; |
| | | "Wan" = "1 หมืà¹à¸"; |
| | | "ViewDetail" = "à¸à¸¹"; |
| | |
| | | "ContinuePlaying" = "Tiếp tục chơi"; |
| | | "GetRewardAfterPlaying" = "ChÆ¡i hết Äá» già nh phần thưá»ng"; |
| | | "Wan" = "10 nghìn"; |
| | | "ViewDetail" = "Xem"; |
| | |
| | | "View" = "æ¥ç"; |
| | | "ContinuePlaying" = "ç»§ç»è¯ç©"; |
| | | "GetRewardAfterPlaying" = "è¯ç©åæå¯é¢åå¥å±"; |
| | | "ViewDetail" = "æ¥ç详æ
"; |
| | | // Icon |
| | |
| | | "ContinuePlaying" = "ç¹¼çºè©¦ç©"; |
| | | "GetRewardAfterPlaying" = "試ç©å¾æå¯é åçåµ"; |
| | | "Wan" = "è¬"; |
| | | "ViewDetail" = "æ¥ç詳æ
"; |
| | |
| | | #import <BUAdSDK/BUNativeAdsManager.h> |
| | | |
| | | /// native express ads |
| | | #import <BUAdSDK/BUNativeExpressAdViewDelegate.h> |
| | | #import <BUAdSDK/BUNativeExpressAdManager.h> |
| | | #import <BUAdSDK/BUNativeExpressAdView.h> |
| | | #import <BUAdSDK/BUNativeExpressBannerView.h> |
| | |
| | | #import <BUAdSDK/BUNativeExpressFullscreenVideoAd.h> |
| | | #import <BUAdSDK/BUNativeExpressSplashView.h> |
| | | |
| | | /// banner ads |
| | | #import <BUAdSDK/BUBannerAdView.h> |
| | | |
| | | /// splash ads |
| | | #import <BUAdSDK/BUSplashAdView.h> |
| | | |
| | | /// interstitial ads |
| | | #import <BUAdSDK/BUInterstitialAd.h> |
| | | |
| | | /// rewarded video ads |
| | | #import <BUAdSDK/BURewardedVideoModel.h> |
| | |
| | | #import "BUAdSDKDefines.h" |
| | | #import "BUMopubAdMarkUpDelegate.h" |
| | | |
| | | ///CN china, NO_CN is not china |
| | | typedef NS_ENUM(NSUInteger, BUAdSDKTerritory) { |
| | | BUAdSDKTerritory_CN = 1, |
| | | BUAdSDKTerritory_NO_CN, |
| | | }; |
| | | |
| | | @class BUAdSlot; |
| | | |
| | | typedef void (^BUConfirmGDPR)(BOOL isAgreed); |
| | | |
| | | @interface BUAdSDKManager : NSObject |
| | | |
| | | @property (nonatomic, copy, readonly, class) NSString *SDKVersion; |
| | | |
| | | /** |
| | | This property should be set when integrating non-China areas at the same time, otherwise it does not need to be set.youâd better set Territory first, if you need to set them |
| | | @param territory : Regional value |
| | | */ |
| | | + (void)setTerritory:(BUAdSDKTerritory)territory; |
| | | /** |
| | | Register the App key thatâs already been applied before requesting an ad from TikTok Audience Network. |
| | | @param appID : the unique identifier of the App |
| | |
| | | /// Open GDPR Privacy for the user to choose before setAppID. |
| | | + (void)openGDPRPrivacyFromRootViewController:(UIViewController *)rootViewController confirm:(BUConfirmGDPR)confirm; |
| | | |
| | | /// Custom set idfa value |
| | | + (void)setCustomIDFA:(NSString *)idfa; |
| | | |
| | | /// get appID |
| | | + (NSString *)appID; |
| | | |
| | |
| | | /// get GDPR |
| | | + (NSInteger)GDPR; |
| | | |
| | | /// get coppa |
| | | + (NSUInteger)coppa; |
| | | |
| | | @end |
| | | |
| | | |
| | | @interface BUAdSDKManager (MopubAdaptor) <BUMopubAdMarkUpDelegate> |
| | | |
| | | @end |
| | | |
| | | @interface BUAdSDKManager (BUAdNR) |
| | | + (NSDictionary *)bunr_dictionaryWithSlot:(BUAdSlot *)slot isDynamicRender:(BOOL)isDynamicRender; |
| | | @end |
| | |
| | | |
| | | + (void)clearInputContent; |
| | | |
| | | - (NSString *)testTimeStamp; |
| | | |
| | | @end |
| | | |
| | | |
| | |
| | | // Copyright © 2017 bytedance. All rights reserved. |
| | | // |
| | | |
| | | #import <Foundation/Foundation.h> |
| | | #import <UIKit/UIKit.h> |
| | | #import "BUSize.h" |
| | | |
| | | typedef NS_ENUM(NSInteger, BUAdSlotAdType) { |
| | |
| | | /// required. Ad type. |
| | | @property (nonatomic, assign) BUAdSlotAdType AdType; |
| | | |
| | | /// required. Ad display location. |
| | | /// optional. Ad display location. defaults is BUAdSlotPositionTop |
| | | @property (nonatomic, assign) BUAdSlotPosition position; |
| | | |
| | | /// Accept a set of image sizes, please pass in the BUSize object. |
| | |
| | | /// Maximum length of description. |
| | | @property (nonatomic, assign) NSInteger descLengthLimit; |
| | | |
| | | /// Whether to support deeplink. |
| | | @property (nonatomic, assign) BOOL isSupportDeepLink; |
| | | /// optional. Whether to support deeplink.defaults is true |
| | | @property (nonatomic, assign) BOOL isSupportDeepLink DEPRECATED_MSG_ATTRIBUTE("This property is deprecated,Settings are no longer required after version 3300"); |
| | | |
| | | /// Native banner ads and native interstitial ads are set to 1, other ad types are 0, the default is 0. |
| | | @property (nonatomic, assign) BOOL isOriginAd; |
| | | |
| | | /// optional. Whether to support render control |
| | | @property (nonatomic, assign) BOOL supportRenderControl; |
| | | |
| | | //adload_seqï¼ï¼é对èå广åä½ï¼ä¼ éæ¬æ¬¡è¯·æ±æ¯ä¸ºâèªç¶æ¥å
æè®¾å¤æå¹¿åä½ç½®ç¬¬N次å±ç¤ºæºä¼âååºç广å请æ±ï¼åç©çä½ç½®å¨èªç¶æ¥ä»1å¼å§è®¡æ°ï¼ä¸åç©çä½ç½®ç¬ç«è®¡æ°ï¼exampleï¼æåç广åä½ç½®ï¼å½å¤©ç¬¬5次产çå±ç¤ºæºä¼ï¼è¿æ¬¡å±ç¤ºæºåç©¿å±±ç²åéäº4次广å请æ±ï¼åè¿4次广å请æ±ç"adload_seq"çå¼åºä¸º5ã第äºå¤©éæ°å¼å§è®¡æ°ã |
| | | @property (nonatomic, assign) NSInteger adloadSeq; |
| | | |
| | | // Valid only in Native Banner and Native Interstitial |
| | | @property (nonatomic, assign) CGSize adSize; |
| | | |
| | | |
| | | //prime_ritï¼ï¼é对èå广åä½ï¼å¹¿åç©çä½ç½®å¯¹åºçåºå®ç©¿å±±ç²å¹¿åä½idï¼å¯ä»¥ä½¿ç¨ç¬¬ä¸å±ç广åä½idä¹å¯ä»¥ä¸ºæä¸å±ç广åä½idï¼ä½è¦æ±åä¸ç©çä½ç½®å¨è¯¥å段åºå®ä¸æ¥åä¸å¹¿åä½idï¼ä¸é¢ç¹æ´æ¢ï¼exampleï¼æåç广åä½ï¼å½å¤©å
±ååºäº1000个请æ±ï¼è¿1000个请æ±ä¸ä½¿ç¨äº5个ä¸åtargetçç©¿å±±ç²ritï¼ç¨æX ritæ¥ä½ä¸ºè¯¥ä½ç½®çæ è®°ritï¼åè¿1000次请æ±çprime_rité½éè¦ä¸æ¥X ritçrit idã |
| | | @property (nonatomic, copy) NSString *primeRit; |
| | | |
| | |
| | | @interface BUFullscreenVideoAd : NSObject <BUMopubAdMarkUpDelegate> |
| | | |
| | | @property (nonatomic, weak, nullable) id<BUFullscreenVideoAdDelegate> delegate; |
| | | @property (nonatomic, getter=isAdValid, readonly) BOOL adValid; |
| | | @property (nonatomic, getter=isAdValid, readonly) BOOL adValid __attribute__((deprecated("Use fullscreenVideoMaterialMetaAdDidLoad: instead."))); |
| | | |
| | | /// media configuration parameters. |
| | | @property (nonatomic, copy, readonly) NSDictionary *mediaExt; |
| | |
| | | // image height |
| | | @property (nonatomic, assign) float height; |
| | | |
| | | // stream ad image druation |
| | | |
| | | @property (nonatomic, assign) float duration; |
| | | |
| | | - (instancetype)initWithDictionary:(NSDictionary *)dic; |
| | | |
| | | - (NSDictionary *)dictionaryValue; |
| | |
| | | /// video duration |
| | | @property (nonatomic, assign) NSInteger videoDuration; |
| | | |
| | | /// video url, will be empty string if allowCustomVideoPlayer is NO, contact BD to add to allow list. |
| | | @property (nonatomic, copy, readonly) NSString *videoUrl; |
| | | |
| | | /// be allowed to play video ad via custome player, contact BD to add to allow list. |
| | | @property (nonatomic, assign, readonly) BOOL allowCustomVideoPlayer; |
| | | |
| | | /// video resolution width |
| | | @property (nonatomic, assign, readonly) NSInteger videoResolutionWidth; |
| | | |
| | | /// video resolution height |
| | | @property (nonatomic, assign, readonly) NSInteger videoResolutionHeight; |
| | | |
| | | /// media configuration parameters. |
| | | @property (nonatomic, copy) NSDictionary *mediaExt; |
| | | |
| | |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | @class BUAdSlot; |
| | | |
| | | @protocol BUMopubAdMarkUpDelegate <NSObject> |
| | | @optional |
| | | |
| | |
| | | */ |
| | | - (void)setMopubAdMarkUp:(NSString *)adm; |
| | | |
| | | /// Bidding Token. Now for MSDK in domestic, used for every ad type. |
| | | - (NSString *)biddingToken; |
| | | |
| | | /** Mopub Adaptor get AD type from rit |
| | | * @return @{@"adSlotType": @(1), @"renderType": @(1)} |
| | | * adSlotType refer from BUAdSlotAdType in "BUAdSlot.h" |
| | | * showType: @"1" express AD @"2" native AD |
| | | */ |
| | | + (NSDictionary *)AdTypeWithRit:(NSString *)rit error:(NSError **)error; |
| | | + (nullable NSDictionary *)AdTypeWithRit:(NSString *)rit error:(NSError **)error; |
| | | |
| | | /** Mopub bidding Adaptor get AD type from adm |
| | | * @return @{@"adSlotType": @(1), @"renderType": @(1)} |
| | |
| | | |
| | | /// Mopub Bidding Token |
| | | + (NSString *)mopubBiddingToken; |
| | | |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |
| | |
| | | #import "BUVideoAdView.h" |
| | | #import "BUMopubAdMarkUpDelegate.h" |
| | | |
| | | |
| | | @protocol BUNativeAdDelegate; |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | |
| | | @optional |
| | | |
| | | /** |
| | | This method is called when native ad material loaded successfully. |
| | | This method is called when native ad material loaded successfully. This method will be deprecated. Use nativeAdDidLoad:view: instead |
| | | */ |
| | | - (void)nativeAdDidLoad:(BUNativeAd *)nativeAd; |
| | | |
| | | |
| | | /** |
| | | This method is called when native ad material loaded successfully. |
| | | */ |
| | | - (void)nativeAdDidLoad:(BUNativeAd *)nativeAd view:(UIView *_Nullable)view; |
| | | |
| | | /** |
| | | This method is called when native ad materia failed to load. |
| | | @param error : the reason of error |
| | |
| | | #import <UIKit/UIKit.h> |
| | | #import "BUVideoAdView.h" |
| | | #import "BUNativeAd.h" |
| | | #import "BUVideoAdReportor.h" |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | |
| | | @property (nonatomic, strong, readonly, nullable) UIImageView *logoADImageView; |
| | | |
| | | /** |
| | | Video ad view. Need to actively add to the view. |
| | | Video ad view. Need to actively add to the view. Can not coexist with videoAdReportor. |
| | | */ |
| | | @property (nonatomic, strong, readonly, nullable) BUVideoAdView *videoAdView; |
| | | |
| | | /** |
| | | Video ad Reportor. Can not coexist with videoAdView. |
| | | */ |
| | | @property (nonatomic, strong, readonly, nullable) id<BUVideoAdReportor> videoAdReportor; |
| | | |
| | | /** |
| | | Refresh the data every time you get new datas in order to show ad perfectly. |
| | | */ |
| | | - (void)refreshData:(BUNativeAd *)nativeAd; |
| | | |
| | | //@property (nonatomic, copy) BOOL(^expectUseCustomVideoPlayer)(BOOL isSupported, NSString *videoUrl); |
| | | |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |
| | |
| | | #import "BUAdSlot.h" |
| | | #import "BUMaterialMeta.h" |
| | | #import "BUNativeAd.h" |
| | | #import "BUNativeExpressAdViewDelegate.h" |
| | | |
| | | @protocol BUNativeAdsManagerDelegate; |
| | | |
| | |
| | | /// The delegate for receiving state change messages such as requests succeeding/failing. |
| | | /// The delegate can be set to any object which conforming to <BUNativeAdsManagerDelegate>. |
| | | @property (nonatomic, weak, nullable) id<BUNativeAdsManagerDelegate> delegate; |
| | | |
| | | /// The delegate for receiving messages when is render template |
| | | @property (nonatomic, weak, nullable) id<BUNativeExpressAdViewDelegate> nativeExpressAdViewDelegate; |
| | | /// Valid only in native Feed |
| | | @property (nonatomic, assign, readwrite) CGSize adSize; |
| | | - (instancetype)initWithSlot:(BUAdSlot * _Nullable) slot; |
| | | |
| | | /** |
| | |
| | | #import "BUDislikeWords.h" |
| | | #import "BUPlayerPublicDefine.h" |
| | | #import "BUMopubAdMarkUpDelegate.h" |
| | | #import "BUNativeExpressAdViewDelegate.h" |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | @class BUNativeExpressAdManager; |
| | | |
| | | @protocol BUNativeExpressAdViewDelegate <NSObject> |
| | | |
| | | @optional |
| | | /** |
| | | * Sent when views successfully load ad |
| | | */ |
| | | - (void)nativeExpressAdSuccessToLoad:(BUNativeExpressAdManager *)nativeExpressAd views:(NSArray<__kindof BUNativeExpressAdView *> *)views; |
| | | |
| | | /** |
| | | * Sent when views fail to load ad |
| | | */ |
| | | - (void)nativeExpressAdFailToLoad:(BUNativeExpressAdManager *)nativeExpressAd error:(NSError *_Nullable)error; |
| | | |
| | | /** |
| | | * This method is called when rendering a nativeExpressAdView successed, and nativeExpressAdView.size.height has been updated |
| | | */ |
| | | - (void)nativeExpressAdViewRenderSuccess:(BUNativeExpressAdView *)nativeExpressAdView; |
| | | |
| | | /** |
| | | * This method is called when a nativeExpressAdView failed to render |
| | | */ |
| | | - (void)nativeExpressAdViewRenderFail:(BUNativeExpressAdView *)nativeExpressAdView error:(NSError *_Nullable)error; |
| | | |
| | | /** |
| | | * Sent when an ad view is about to present modal content |
| | | */ |
| | | - (void)nativeExpressAdViewWillShow:(BUNativeExpressAdView *)nativeExpressAdView; |
| | | |
| | | /** |
| | | * Sent when an ad view is clicked |
| | | */ |
| | | - (void)nativeExpressAdViewDidClick:(BUNativeExpressAdView *)nativeExpressAdView; |
| | | |
| | | /** |
| | | Sent when a playerw playback status changed. |
| | | @param playerState : player state after changed |
| | | */ |
| | | - (void)nativeExpressAdView:(BUNativeExpressAdView *)nativeExpressAdView stateDidChanged:(BUPlayerPlayState)playerState; |
| | | |
| | | /** |
| | | * Sent when a player finished |
| | | * @param error : error of player |
| | | */ |
| | | - (void)nativeExpressAdViewPlayerDidPlayFinish:(BUNativeExpressAdView *)nativeExpressAdView error:(NSError *)error; |
| | | |
| | | /** |
| | | * Sent when a user clicked dislike reasons. |
| | | * @param filterWords : the array of reasons why the user dislikes the ad |
| | | */ |
| | | - (void)nativeExpressAdView:(BUNativeExpressAdView *)nativeExpressAdView dislikeWithReason:(NSArray<BUDislikeWords *> *)filterWords; |
| | | |
| | | /** |
| | | * Sent after an ad view is clicked, a ad landscape view will present modal content |
| | | */ |
| | | - (void)nativeExpressAdViewWillPresentScreen:(BUNativeExpressAdView *)nativeExpressAdView; |
| | | |
| | | /** |
| | | This method is called when another controller has been closed. |
| | | @param interactionType : open appstore in app or open the webpage or view video ad details page. |
| | | */ |
| | | - (void)nativeExpressAdViewDidCloseOtherController:(BUNativeExpressAdView *)nativeExpressAdView interactionType:(BUInteractionType)interactionType; |
| | | |
| | | @end |
| | | |
| | | |
| | | @interface BUNativeExpressAdManager : NSObject <BUMopubAdMarkUpDelegate> |
| | |
| | | /** |
| | | The number of ads requested,The maximum is 3 |
| | | */ |
| | | - (void)loadAd:(NSInteger)count; |
| | | - (void)loadAdDataWithCount:(NSInteger)count; |
| | | @end |
| | | |
| | | @interface BUNativeExpressAdManager (Deprecated) |
| | | - (void)loadAd:(NSInteger)count __attribute__((deprecated("Use loadAdDataWithCount: instead."))); |
| | | @end |
| | | |
| | | |
| | | NS_ASSUME_NONNULL_END |
| | |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | |
| | | @interface BUNativeExpressAdView : UIView |
| | | /** |
| | | * Whether render is ready |
| | |
| | | */ |
| | | - (void)render; |
| | | |
| | | |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |
New file |
| | |
| | | // |
| | | // BUNativeExpressAdViewDelegate.h |
| | | // BUAdSDK |
| | | // |
| | | // Created by Rush.D.Xzj on 2020/10/12. |
| | | // Copyright © 2020 bytedance. All rights reserved. |
| | | // |
| | | |
| | | #import <Foundation/Foundation.h> |
| | | #import "BUMaterialMeta.h" |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | |
| | | @class BUNativeExpressAdManager; |
| | | @class BUNativeExpressAdView; |
| | | @class BUDislikeWords; |
| | | |
| | | @protocol BUNativeExpressAdViewDelegate <NSObject> |
| | | |
| | | @optional |
| | | /** |
| | | * Sent when views successfully load ad |
| | | */ |
| | | - (void)nativeExpressAdSuccessToLoad:(BUNativeExpressAdManager *)nativeExpressAdManager views:(NSArray<__kindof BUNativeExpressAdView *> *)views; |
| | | |
| | | /** |
| | | * Sent when views fail to load ad |
| | | */ |
| | | - (void)nativeExpressAdFailToLoad:(BUNativeExpressAdManager *)nativeExpressAdManager error:(NSError *_Nullable)error; |
| | | |
| | | /** |
| | | * This method is called when rendering a nativeExpressAdView successed, and nativeExpressAdView.size.height has been updated |
| | | */ |
| | | - (void)nativeExpressAdViewRenderSuccess:(BUNativeExpressAdView *)nativeExpressAdView; |
| | | |
| | | /** |
| | | * This method is called when a nativeExpressAdView failed to render |
| | | */ |
| | | - (void)nativeExpressAdViewRenderFail:(BUNativeExpressAdView *)nativeExpressAdView error:(NSError *_Nullable)error; |
| | | |
| | | /** |
| | | * Sent when an ad view is about to present modal content |
| | | */ |
| | | - (void)nativeExpressAdViewWillShow:(BUNativeExpressAdView *)nativeExpressAdView; |
| | | |
| | | /** |
| | | * Sent when an ad view is clicked |
| | | */ |
| | | - (void)nativeExpressAdViewDidClick:(BUNativeExpressAdView *)nativeExpressAdView; |
| | | |
| | | /** |
| | | Sent when a playerw playback status changed. |
| | | @param playerState : player state after changed |
| | | */ |
| | | - (void)nativeExpressAdView:(BUNativeExpressAdView *)nativeExpressAdView stateDidChanged:(BUPlayerPlayState)playerState; |
| | | |
| | | /** |
| | | * Sent when a player finished |
| | | * @param error : error of player |
| | | */ |
| | | - (void)nativeExpressAdViewPlayerDidPlayFinish:(BUNativeExpressAdView *)nativeExpressAdView error:(NSError *)error; |
| | | |
| | | /** |
| | | * Sent when a user clicked dislike reasons. |
| | | * @param filterWords : the array of reasons why the user dislikes the ad |
| | | */ |
| | | - (void)nativeExpressAdView:(BUNativeExpressAdView *)nativeExpressAdView dislikeWithReason:(NSArray<BUDislikeWords *> *)filterWords; |
| | | |
| | | /** |
| | | * Sent after an ad view is clicked, a ad landscape view will present modal content |
| | | */ |
| | | - (void)nativeExpressAdViewWillPresentScreen:(BUNativeExpressAdView *)nativeExpressAdView; |
| | | |
| | | /** |
| | | This method is called when another controller has been closed. |
| | | @param interactionType : open appstore in app or open the webpage or view video ad details page. |
| | | */ |
| | | - (void)nativeExpressAdViewDidCloseOtherController:(BUNativeExpressAdView *)nativeExpressAdView interactionType:(BUInteractionType)interactionType; |
| | | |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |
| | |
| | | |
| | | - (instancetype)initWithSlotID:(NSString *)slotID |
| | | rootViewController:(UIViewController *)rootViewController |
| | | adSize:(CGSize)adsize |
| | | IsSupportDeepLink:(BOOL)isSupportDeepLink; |
| | | adSize:(CGSize)adsize; |
| | | |
| | | - (instancetype)initWithSlotID:(NSString *)slotID |
| | | rootViewController:(UIViewController *)rootViewController |
| | | adSize:(CGSize)adsize |
| | | IsSupportDeepLink:(BOOL)isSupportDeepLink |
| | | interval:(NSInteger)interval; |
| | | |
| | | /** |
| | |
| | | adloadSeq:(NSInteger)adloadSeq |
| | | primeRit:(NSString *)primeRit |
| | | rootViewController:(UIViewController *)rootViewController |
| | | adSize:(CGSize)adsize |
| | | IsSupportDeepLink:(BOOL)isSupportDeepLink; |
| | | |
| | | adSize:(CGSize)adsize; |
| | | |
| | | - (instancetype)initWithSlotID:(NSString *)slotID |
| | | adloadSeq:(NSInteger)adloadSeq |
| | | primeRit:(NSString *)primeRit |
| | | rootViewController:(UIViewController *)rootViewController |
| | | adSize:(CGSize)adsize |
| | | IsSupportDeepLink:(BOOL)isSupportDeepLink |
| | | interval:(NSInteger)interval; |
| | | |
| | | - (void)loadAdData; |
| | | |
| | | @end |
| | | |
| | | @interface BUNativeExpressBannerView (Deprecated) |
| | | - (instancetype)initWithSlotID:(NSString *)slotID |
| | | rootViewController:(UIViewController *)rootViewController |
| | | adSize:(CGSize)adsize |
| | | IsSupportDeepLink:(BOOL)isSupportDeepLink DEPRECATED_MSG_ATTRIBUTE("Use initWithSlotID:rootViewController:adSize: instead."); |
| | | - (instancetype)initWithSlotID:(NSString *)slotID |
| | | rootViewController:(UIViewController *)rootViewController |
| | | adSize:(CGSize)adsize |
| | | IsSupportDeepLink:(BOOL)isSupportDeepLink |
| | | interval:(NSInteger)interval DEPRECATED_MSG_ATTRIBUTE("Use initWithSlotID:rootViewController:adSize:interval: instead."); |
| | | - (instancetype)initWithSlotID:(NSString *)slotID |
| | | adloadSeq:(NSInteger)adloadSeq |
| | | primeRit:(NSString *)primeRit |
| | | rootViewController:(UIViewController *)rootViewController |
| | | adSize:(CGSize)adsize |
| | | IsSupportDeepLink:(BOOL)isSupportDeepLink DEPRECATED_MSG_ATTRIBUTE("Use initWithSlotID:adloadSeq:primeRit:rootViewController:adSize: instead."); |
| | | - (instancetype)initWithSlotID:(NSString *)slotID |
| | | adloadSeq:(NSInteger)adloadSeq |
| | | primeRit:(NSString *)primeRit |
| | | rootViewController:(UIViewController *)rootViewController |
| | | adSize:(CGSize)adsize |
| | | IsSupportDeepLink:(BOOL)isSupportDeepLink |
| | | interval:(NSInteger)interval DEPRECATED_MSG_ATTRIBUTE("Use initWithSlotID:adloadSeq:primeRit:rootViewController:adSize:interval: instead."); |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |
| | |
| | | |
| | | #import <UIKit/UIKit.h> |
| | | #import "BUMaterialMeta.h" |
| | | #import "BUMopubAdMarkUpDelegate.h" |
| | | |
| | | @class BUNativeExpressFullscreenVideoAd; |
| | | |
| | |
| | | @optional |
| | | /** |
| | | This method is called when video ad material loaded successfully. |
| | | And you can call [BUNativeExpressFullscreenVideoAd showAdFromRootViewController:]. |
| | | */ |
| | | - (void)nativeExpressFullscreenVideoAdDidLoad:(BUNativeExpressFullscreenVideoAd *)fullscreenVideoAd; |
| | | |
| | |
| | | /** |
| | | This method is called when video cached successfully. |
| | | For a better user experience, it is recommended to display video ads at this time. |
| | | And you can call [BUNativeExpressFullscreenVideoAd showAdFromRootViewController:]. |
| | | */ |
| | | - (void)nativeExpressFullscreenVideoAdDidDownLoadVideo:(BUNativeExpressFullscreenVideoAd *)fullscreenVideoAd; |
| | | |
| | |
| | | @end |
| | | |
| | | |
| | | @interface BUNativeExpressFullscreenVideoAd : NSObject |
| | | @interface BUNativeExpressFullscreenVideoAd : NSObject <BUMopubAdMarkUpDelegate> |
| | | |
| | | @property (nonatomic, weak, nullable) id<BUNativeExpressFullscreenVideoAdDelegate> delegate; |
| | | @property (nonatomic, getter=isAdValid, readonly) BOOL adValid; |
| | | @property (nonatomic, getter=isAdValid, readonly) BOOL adValid __attribute__((deprecated("Use nativeExpressFullscreenVideoAdDidLoad: instead."))); |
| | | |
| | | /// media configuration parameters. |
| | | @property (nonatomic, copy, readonly) NSDictionary *mediaExt; |
| | |
| | | #import <UIKit/UIKit.h> |
| | | #import "BUMaterialMeta.h" |
| | | #import "BUMopubAdMarkUpDelegate.h" |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | @class BUSize; |
| | |
| | | Initializes interstitial ad. |
| | | @param slotID : The unique identifier of interstitial ad. |
| | | @param adsize : custom size of ad view. |
| | | @return BUInterstitialAd |
| | | @return BUNativeExpressInterstitialAd |
| | | */ |
| | | - (instancetype)initWithSlotID:(NSString *)slotID adSize:(CGSize)adsize; |
| | | |
| | |
| | | #import <UIKit/UIKit.h> |
| | | #import "BUAdSDKDefines.h" |
| | | #import "BUMaterialMeta.h" |
| | | #import "BUMopubAdMarkUpDelegate.h" |
| | | |
| | | @class BUNativeExpressRewardedVideoAd; |
| | | @class BURewardedVideoModel; |
| | |
| | | @optional |
| | | /** |
| | | This method is called when video ad material loaded successfully. |
| | | And you can call [BUNativeExpressRewardedVideoAd showAdFromRootViewController:]. |
| | | */ |
| | | - (void)nativeExpressRewardedVideoAdDidLoad:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd; |
| | | |
| | |
| | | /** |
| | | This method is called when cached successfully. |
| | | For a better user experience, it is recommended to display video ads at this time. |
| | | And you can call [BUNativeExpressRewardedVideoAd showAdFromRootViewController:]. |
| | | */ |
| | | - (void)nativeExpressRewardedVideoAdDidDownLoadVideo:(BUNativeExpressRewardedVideoAd *)rewardedVideoAd; |
| | | |
| | |
| | | @end |
| | | |
| | | |
| | | @interface BUNativeExpressRewardedVideoAd : NSObject |
| | | @interface BUNativeExpressRewardedVideoAd : NSObject <BUMopubAdMarkUpDelegate> |
| | | @property (nonatomic, strong) BURewardedVideoModel *rewardedVideoModel; |
| | | @property (nonatomic, weak, nullable) id<BUNativeExpressRewardedVideoAdDelegate> delegate; |
| | | /// media configuration parameters. |
| | |
| | | Setted to YES when data is not empty and has not been displayed. |
| | | Repeated display is not billed. |
| | | */ |
| | | @property (nonatomic, getter=isAdValid, readonly) BOOL adValid; |
| | | @property (nonatomic, getter=isAdValid, readonly) BOOL adValid __attribute__((deprecated("Use nativeExpressRewardedVideoAdDidLoad: instead."))); |
| | | |
| | | - (instancetype)initWithSlotID:(NSString *)slotID rewardedVideoModel:(BURewardedVideoModel *)model; |
| | | |
| | | /** |
| | | adload_seqï¼ï¼é对èå广åä½ï¼ä¼ éæ¬æ¬¡è¯·æ±æ¯ä¸ºâèªç¶æ¥å
æè®¾å¤æå¹¿åä½ç½®ç¬¬N次å±ç¤ºæºä¼âååºç广å请æ±ï¼åç©çä½ç½®å¨èªç¶æ¥ä»1å¼å§è®¡æ°ï¼ä¸åç©çä½ç½®ç¬ç«è®¡æ°ï¼exampleï¼æåç广åä½ç½®ï¼å½å¤©ç¬¬5次产çå±ç¤ºæºä¼ï¼è¿æ¬¡å±ç¤ºæºåç©¿å±±ç²åéäº4次广å请æ±ï¼åè¿4次广å请æ±ç"adload_seq"çå¼åºä¸º5ã第äºå¤©éæ°å¼å§è®¡æ°ã |
| | | |
| | | prime_ritï¼ï¼é对èå广åä½ï¼å¹¿åç©çä½ç½®å¯¹åºçåºå®ç©¿å±±ç²å¹¿åä½idï¼å¯ä»¥ä½¿ç¨ç¬¬ä¸å±ç广åä½idä¹å¯ä»¥ä¸ºæä¸å±ç广åä½idï¼ä½è¦æ±åä¸ç©çä½ç½®å¨è¯¥å段åºå®ä¸æ¥åä¸å¹¿åä½idï¼ä¸é¢ç¹æ´æ¢ï¼exampleï¼æåç广åä½ï¼å½å¤©å
±ååºäº1000个请æ±ï¼è¿1000个请æ±ä¸ä½¿ç¨äº5个ä¸åtargetçç©¿å±±ç²ritï¼ç¨æX ritæ¥ä½ä¸ºè¯¥ä½ç½®çæ è®°ritï¼åè¿1000次请æ±çprime_rité½éè¦ä¸æ¥X ritçrit idã |
| | | */ |
| | | |
| | | - (instancetype)initWithSlotID:(NSString *)slotID adloadSeq:(NSInteger)adloadSeq primeRit:(NSString * __nullable)primeRit rewardedVideoModel:(nonnull BURewardedVideoModel *)model; |
| | | |
| | | - (void)loadAdData; |
| | | |
| | | /** |
| | |
| | | |
| | | #import <UIKit/UIKit.h> |
| | | #import "BUMaterialMeta.h" |
| | | #import "BUMopubAdMarkUpDelegate.h" |
| | | |
| | | @class BUNativeExpressSplashView; |
| | | |
| | |
| | | |
| | | |
| | | |
| | | @interface BUNativeExpressSplashView : UIView |
| | | @interface BUNativeExpressSplashView : UIView <BUMopubAdMarkUpDelegate> |
| | | /** |
| | | The delegate for receiving state change messages. |
| | | */ |
| | |
| | | Setted to YES when data is not empty and has not been displayed. |
| | | Repeated display is not billed. |
| | | */ |
| | | @property (nonatomic, getter=isAdValid, readonly) BOOL adValid; |
| | | @property (nonatomic, getter=isAdValid, readonly) BOOL adValid __attribute__((deprecated("Use rewardedVideoAdDidLoad: instead."))); |
| | | |
| | | /// media configuration parameters. |
| | | @property (nonatomic, copy, readonly) NSDictionary *mediaExt; |
| | |
| | | @interface BURewardedVideoModel : NSObject |
| | | |
| | | /** |
| | | required. |
| | | optional. |
| | | Third-party game user_id identity. |
| | | Mainly used in the reward issuance, it is the callback pass-through parameter from server-to-server. |
| | | It is the unique identifier of each user. |
| | |
| | | */ |
| | | @property (nonatomic, copy) NSString *userId; |
| | | |
| | | //optional. reward name. |
| | | @property (nonatomic, copy) NSString *rewardName; |
| | | |
| | | //optional. number of rewards. |
| | | @property (nonatomic, assign) NSInteger rewardAmount; |
| | | |
| | | //optional. serialized string. |
| | | @property (nonatomic, copy) NSString *extra; |
| | | |
| | | //reward name. It will assigned value when the ads back. |
| | | @property (nonatomic, copy) NSString *rewardName; |
| | | |
| | | //number of rewards. It will assigned value when the ads back. |
| | | @property (nonatomic, assign) NSInteger rewardAmount; |
| | | |
| | | @end |
| | |
| | | #import <UIKit/UIKit.h> |
| | | #import "BUMaterialMeta.h" |
| | | #import "BUSplashZoomOutView.h" |
| | | #import "BUMopubAdMarkUpDelegate.h" |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | @protocol BUSplashAdDelegate; |
| | | |
| | | @interface BUSplashAdView : UIView |
| | | @interface BUSplashAdView : UIView <BUMopubAdMarkUpDelegate> |
| | | /** |
| | | The unique identifier of splash ad. |
| | | */ |
| | |
| | | - (void)splashZoomOutViewAdDidClose:(BUSplashZoomOutView *)splashAd; |
| | | |
| | | /** |
| | | This method is called when spalashAd automatically dimiss afte countdown equals to zero |
| | | */ |
| | | - (void)splashZoomOutViewAdDidAutoDimiss:(BUSplashZoomOutView *)splashAd; |
| | | |
| | | /** |
| | | This method is called when another controller has been closed. |
| | | @param interactionType : open appstore in app or open the webpage or view video ad details page. |
| | | */ |
New file |
| | |
| | | // |
| | | // BUVideoAdReportor.h |
| | | // BUAdSDK |
| | | // |
| | | // Created by bytedance on 2020/8/3. |
| | | // Copyright © 2020 bytedance. All rights reserved. |
| | | // |
| | | |
| | | #import <Foundation/Foundation.h> |
| | | #import <UIKit/UIKit.h> |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | /// the reportor of video ad in feed, auto created by system if video ads in feed is customd. |
| | | @protocol BUVideoAdReportor <NSObject> |
| | | |
| | | @required |
| | | |
| | | /// report did start play video |
| | | /// @param duration total duration of video, unit ms |
| | | - (void)didStartPlayVideoWithVideoDuration:(NSTimeInterval)duration; |
| | | |
| | | /// report did start play video auto, designed by developer |
| | | /// @param duration total duration of video, unit ms |
| | | - (void)didAutoStartPlayWithVideoDuration:(NSTimeInterval)duration; |
| | | |
| | | /// report did play to the end of video |
| | | - (void)didFinishVideo; |
| | | |
| | | /// report did pause video |
| | | /// @param duration duration of video that user watched |
| | | - (void)didPauseVideoWithCurrentDuration:(NSTimeInterval)duration; |
| | | |
| | | /// report did resume video from paused |
| | | /// @param duration duration of video that user watched |
| | | - (void)didResumeVideoWithCurrentDuration:(NSTimeInterval)duration; |
| | | |
| | | /// report did break video playing, maybe change another video or disappear from screen and so on |
| | | /// @param duration duration of video that user watched |
| | | - (void)didBreakVideoWithCurrentDuration:(NSTimeInterval)duration; |
| | | |
| | | /// report did click video view, auto implement by Pangle, developers need not call this method |
| | | /// @param duration duration of video that user watched |
| | | - (void)didClickVideoViewWithCurrentDuration:(NSTimeInterval)duration; |
| | | |
| | | /// report sth. wrong with playing |
| | | /// @param error error |
| | | - (void)didPlayFailedWithError:(NSError *)error; |
| | | |
| | | /// report sth. wrong with play start |
| | | /// @param error error |
| | | - (void)didPlayStartFailedWithError:(NSError *)error; |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |
| | |
| | | @property (nonatomic, assign) BOOL drawVideoClickEnable; |
| | | |
| | | /** |
| | | AdType information. |
| | | */ |
| | | @property (nonatomic, assign) NSInteger AdType; |
| | | |
| | | /** |
| | | material information. |
| | | */ |
| | | @property (nonatomic, strong, readwrite, nullable) BUMaterialMeta *materialMeta; |
New file |
| | |
| | | // |
| | | // BUCNAuxiliary.h |
| | | // BUCNAuxiliary |
| | | // |
| | | // Created by bytedance on 2020/8/25. |
| | | // Copyright © 2020 bytedance. All rights reserved. |
| | | // |
| | | |
| | | #import <Foundation/Foundation.h> |
| | | |
| | | /// |
| | | #import "BUCNAuxiliaryManager.h" |
| | | |
| | | //! Project version number for BUCNAuxiliary. |
| | | FOUNDATION_EXPORT double BUCNAuxiliaryVersionNumber; |
| | | |
| | | //! Project version string for BUCNAuxiliary. |
| | | FOUNDATION_EXPORT const unsigned char BUCNAuxiliaryVersionString[]; |
| | | |
| | | // In this header, you should import all the public headers of your framework using statements like #import <BUCNAuxiliary/PublicHeader.h> |
| | | |
| | | |
New file |
| | |
| | | // |
| | | // BUCNAuxiliaryManager.h |
| | | // BUCNAuxiliary |
| | | // |
| | | // Created by bytedance on 2020/8/26. |
| | | // Copyright © 2020 bytedance. All rights reserved. |
| | | // |
| | | |
| | | #import <Foundation/Foundation.h> |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | @interface BUCNAuxiliaryManager : NSObject |
| | | + (instancetype)shareManager; |
| | | ///设置å°åº |
| | | + (void)setTerritory:(NSString *)territory; |
| | | ///è·åå°åº |
| | | + (NSString *)territory; |
| | | |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |
New file |
| | |
| | | // |
| | | // BUCNCommonHeader.h |
| | | // BUCNAuxiliary |
| | | // |
| | | // Created by bytedance on 2020/8/27. |
| | | // Copyright © 2020 bytedance. All rights reserved. |
| | | // |
| | | |
| | | #ifndef BUCNCommonHeader_h |
| | | #define BUCNCommonHeader_h |
| | | |
| | | typedef NS_ENUM(NSUInteger, BUCNAuxiliaryTerritory) { |
| | | BUCNAuxiliaryTerritory_CN = 3, |
| | | }; |
| | | |
| | | #endif /* BUCNCommonHeader_h */ |
New file |
| | |
| | | framework module BUCNAuxiliary { |
| | | umbrella header "BUCNAuxiliary.h" |
| | | |
| | | export * |
| | | module * { export * } |
| | | } |
| | |
| | | @interface BUBundleHelper : NSObject |
| | | |
| | | // è·åèµæºæä»¶ |
| | | + (NSBundle *)resourceBundle; |
| | | + (nullable NSBundle *)resourceBundle; |
| | | |
| | | @end |
| | | |
| | |
| | | |
| | | FOUNDATION_EXPORT NSString * const BUSDKVersion; |
| | | |
| | | /// æ è®°æ¯å¦æ¯å¼åç¶æï¼æ£å¼ä¸çº¿åçæ¶ç½® 0 |
| | | #define DevEnv 0 |
| | | |
| | | /** String **/ |
| | | #define BUEmptyString (@""); |
| | |
| | | #define BUMAXScreenSide MAX([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height) |
| | | #endif |
| | | |
| | | #define BUiPhoneX ((BUMAXScreenSide == 812.0) || (BUMAXScreenSide == 896)) |
| | | #define BUIsNotchScreen bu_is_notch_screen() |
| | | #define BUiPhoneX BUIsNotchScreen |
| | | #define kBUDefaultNavigationBarHeight (BUiPhoneX?88:64) // å¯¼èªæ¡é«åº¦ |
| | | #define kBUSafeTopMargin (BUiPhoneX?24:0) |
| | | #define kBUDefaultStautsBarHeight (BUiPhoneX?44:20) // ç¶ææ é«åº¦ |
| | |
| | | |
| | | FOUNDATION_EXPORT id BU_JSONObjectByRemovingKeysWithNullValues(id JSONObject); |
| | | |
| | | FOUNDATION_EXPORT BOOL bu_is_notch_screen(void); |
| | | |
| | | /** LOG **/ |
| | | #define BU_Log_Foundation(frmt, ...) BU_Log_Base(BUFoundationLog, frmt, ##__VA_ARGS__) |
| | | |
| | | #define BU_Log_Base(BULogTypeString, frmt, ...) BU_LOG_MAYBE(BULogTypeString, BU_LOG_ENABLED, frmt, ##__VA_ARGS__) |
| | | #define BU_Log_Foundation(frmt, ...) BU_LOG_MAYBE(BUFoundationLog, BU_LOG_ENABLED, frmt, ##__VA_ARGS__) |
| | | |
| | | #define BU_LOG_MAYBE(BULogTypeString, flg, frmt, ...) \ |
| | | do { \ |
| | | if(flg) NSLog(@"ãBytedanceUnion V%@ã-ã%@ã%@", BUSDKVersion, BULogTypeString, [NSString stringWithFormat:frmt,##__VA_ARGS__]); \ |
| | | if(flg) NSLog(@"ãPangleUnion V%@ã-ã%@ã%@", BUSDKVersion, BULogTypeString, [NSString stringWithFormat:frmt,##__VA_ARGS__]); \ |
| | | } while(0) |
| | | |
| | | #if DevEnv |
| | | |
| | | #define BU_LogD_Verbose @"ð¡".UTF8String |
| | | #define BU_LogD_Info @"ð¢".UTF8String |
| | | #define BU_LogD_Error @"ð´".UTF8String |
| | | #define BU_LogD(BULogType, nature, format, ...) printf("\nã%sã%s [%s %d] %s\n\n", BULogType.UTF8String, nature, [NSString stringWithUTF8String:__FILE__].lastPathComponent.UTF8String ,__LINE__, [NSString stringWithFormat:format, ##__VA_ARGS__].UTF8String) |
| | | |
| | | #else |
| | | |
| | | #define BU_LogD_Verbose |
| | | #define BU_LogD_Info |
| | | #define BU_LogD_Error |
| | | #define BU_LogD(BULogTypeString, nature, ...) |
| | | |
| | | #endif |
| | | |
| | | |
| | | FOUNDATION_EXPORT NSString * const BUFoundationLog; |
| | | FOUNDATION_EXPORT BOOL BU_LOG_ENABLED; |
| | | |
| | | // 对æä¸¾å¼è¿è¡æ¥å¿å符串转æ¢ï¼ ä¾å¦å¯¹äºä¸ä¸ªæä¸¾å¼ 1表示æ¿å±è§é¢å¹¿åçææï¼ å°è¿åï¼ æ¿å±è§é¢å¹¿å(value:1) |
| | | FOUNDATION_EXPORT NSString *NSStringLogFromBUAdEnumItem(NSInteger enumItem, NSDictionary *dic, NSString *defaultValue); |
| | | // 对æä¸¾å¼è¿è¡åç¬¦ä¸²è½¬æ¢ ä¾å¦å¯¹äºä¸ä¸ªæä¸¾å¼ 1表示rewarded_adçåç¬¦ä¸²ï¼ å°è¿åï¼ rewarded_ad |
| | | FOUNDATION_EXPORT NSString *NSStringFromBUAdEnumItem(NSInteger enumItem, NSDictionary *dic, NSString *defaultValue); |
New file |
| | |
| | | // |
| | | // BUEnvironment.h |
| | | // BUFoundation |
| | | // |
| | | // Created by bytedance on 2020/10/29. |
| | | // Copyright © 2020 Union. All rights reserved. |
| | | // |
| | | |
| | | #ifndef BUEnvironment_h |
| | | #define BUEnvironment_h |
| | | |
| | | #import <Foundation/Foundation.h> |
| | | #import <CoreTelephony/CTTelephonyNetworkInfo.h> |
| | | |
| | | CTTelephonyNetworkInfo *BUDefaultTelephonyNetworkInfo(void); |
| | | |
| | | #endif /* BUEnvironment_h */ |
| | |
| | | #import <BUFoundation/BUPersistence.h> |
| | | #import <BUFoundation/BURouter.h> |
| | | #import <BUFoundation/BUUIResponderHelper.h> |
| | | #import <BUFoundation/BUTLocationService.h> |
| | | #import <BUFoundation/BUBaseRequest.h> |
| | | #import <BUFoundation/BURuntimeUtil.h> |
| | | #import <BUFoundation/BUTimer.h> |
| | | #import <BUFoundation/BUDynamicPlugin.h> |
| | | #import <BUFoundation/BUStaticPlugin.h> |
| | |
| | | #import <BUFoundation/BUGifImage.h> |
| | | #import <BUFoundation/BUThreadSafeDictionary.h> |
| | | #import <BUFoundation/BUThreadSafeMutableArray.h> |
| | | #import <BUFoundation/BUCocoaSecurity.h> |
| | | #import <BUFoundation/BUInfoHelper.h> |
| | | #import <BUFoundation/BUReachability.h> |
| | | #import <BUFoundation/BUNetInfoHelper.h> |
| | | #import <BUFoundation/BUDeviceHelper.h> |
| | | #import <BUFoundation/BUScreenHelper.h> |
| | | #import <BUFoundation/BUCommonMacros.h> |
| | | #import <BUFoundation/BUFoundationAddress.h> |
| | | #import <BUFoundation/BUBundleHelper.h> |
| | | #import <BUFoundation/BUEnvironment.h> |
| | | |
| | | |
| | | /// Category |
| | |
| | | #import <BUFoundation/UIColor+BUTheme.h> |
| | | #import <BUFoundation/UIImage+BUIcon.h> |
| | | #import <BUFoundation/NSObject+BUSafeKVO.h> |
| | | |
| | | #import <BUFoundation/NSUserDefaults+BUCrypt.h> |
| | | #import <BUFoundation/NSJSONSerialization+BUSafeSerializaiton.h> |
| | | #import <BUFoundation/NSObject+BUUtils.h> |
| | | |
| | | /************************************ ThirdParty***********************************/ |
| | | // AFN |
| | |
| | | #import <BUFoundation/UIImageView+BUWebCache.h> |
| | | #import <BUFoundation/BU_SDImageCache.h> |
| | | |
| | | #import <BUFoundation/BUZipArchive.h> |
| | | #import <BUFoundation/BUGeckoPreloadManager.h> |
| | | |
| | | // ByteFinder |
| | | #import <BUFoundation/EBAppLog.h> |
| | | #import <BUFoundation/EBAppLogConfig.h> |
| | | //#import <BUFoundation/EBAppLog.h> |
| | | //#import <BUFoundation/EBAppLogConfig.h> |
| | | //#import <BUFoundation/HMDBUToBCrashTrackerRestrict.h> |
| | | //#import <BUFoundation/HMDBUToBAddressRange.h> |
| | | //#import <BUFoundation/HMDBUToBCrashTracker.h> |
| | |
| | | |
| | | @interface BUFoundationAddress : NSObject |
| | | |
| | | + (int64_t)begainAddress; |
| | | + (int64_t)bu_begainAddress; |
| | | |
| | | + (int64_t)endAddress; |
| | | + (int64_t)bu_endAddress; |
| | | |
| | | @end |
| | | |
New file |
| | |
| | | // |
| | | // BUGeckoPreloadManager.h |
| | | // BUAdSDK |
| | | // |
| | | // Created by wangyanlin on 2020/6/29. |
| | | // Copyright © 2020 bytedance. All rights reserved. |
| | | // |
| | | |
| | | #import <Foundation/Foundation.h> |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | typedef void (^BUPreloadCompletion)(NSData * _Nullable data,NSDictionary * _Nullable respHeader); |
| | | typedef void (^BUPreloadTrackBlock)(NSObject *model,NSString *label,NSDictionary *parameter); |
| | | |
| | | @interface BUGeckoPreloadManager : NSObject |
| | | |
| | | @property (nonatomic, strong) NSMapTable *mapTable; |
| | | |
| | | @property (nonatomic, strong) NSMutableDictionary *geckoDict; |
| | | |
| | | @property (nonatomic, copy) BUPreloadTrackBlock trackBlock; |
| | | |
| | | + (instancetype)sharedInstance; |
| | | |
| | | + (void)setupSDKWithTerritory:(NSString *)territory |
| | | IESGeckoKitAppId:(NSString *)IESGeckoKitAppId |
| | | IESGeckoKit_CACHE_DIRECTORY:(NSString *)IESGeckoKit_CACHE_DIRECTORY |
| | | IESGeckoKitAccessKey:(NSString *)IESGeckoKitAccessKey |
| | | IESGeckoKit_Domains:(NSArray *)IESGeckoKit_Domains |
| | | ZipBlock:(id)zipBlock; |
| | | |
| | | //1.æ¬å°zip å
å·²ç»è¢«å é¤äº,èªå¨å»ä¸è½½ |
| | | //2.妿zipéè¦æ´æ°,ä¼èªå¨æ´æ° |
| | | //3.æ¬å°æzip, å¹¶ä¸ä¸éè¦æ´æ°. ä¸åå¤ç |
| | | + (void)syncResourcesParamsWithChannel:(NSArray <id>*)materialArray hosts:(NSArray *)hosts; |
| | | |
| | | + (void)asyncGetDataWithInfo:(NSDictionary *)info completion:(BUPreloadCompletion)completion; |
| | | |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |
| | |
| | | #import "UIViewController+BUUtilities.h" |
| | | |
| | | @interface BURouter : NSObject |
| | | + (void)pushFromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC; |
| | | + (void)presentFromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC; |
| | | @end |
| | |
| | | // è·åæå®UIResponderçé¾ä¸æ¸¸ç¬¬ä¸ä¸ªUINavigationController对象 |
| | | + (nullable UINavigationController*)nextNavigationControllerFor:(UIResponder* _Nullable)responder; |
| | | |
| | | /** æ¥æ¾å½åæ¾ç¤ºçViewController*/ |
| | | + (UIViewController *)topViewController; |
| | | |
| | | + (UIViewController *)recursiveFindCurrentShowViewControllerFromViewController:(UIViewController *)fromVC; |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |
| | |
| | | |
| | | /// ç½å±æ£æµç¾åæ¯ |
| | | - (void)bu_detectBlankPercentCompleteBlock:(void(^)(CGFloat bgColorPercent, NSError *error))block; |
| | | /// jsbridge ç½å±æ£æµç¾åæ¯ |
| | | - (void)bu_detectBlankPercentWithImageStr:(NSString *)imageStr completeBlock:(void(^)(CGFloat bgColorPercent, NSError *))block; |
| | | @end |
| | |
| | | #import "BURexxarEngine.h" |
| | | #import "BUWebViewDefine.h" |
| | | |
| | | extern NSString *const kBUBytedanceScheme; |
| | | extern NSString *const kBUBytedanceDomReadyHost; |
| | | extern NSString *const kBUPangleScheme; |
| | | extern NSString *const kBUPangleDomReadyHost; |
| | | |
| | | @interface BUWebViewApplication : NSObject |
| | | |
New file |
| | |
| | | // |
| | | // BUZipArchive.h |
| | | // BUZipArchive |
| | | // |
| | | // Created by Sam Soffes on 7/21/10. |
| | | // Copyright (c) Sam Soffes 2010-2015. All rights reserved. |
| | | // |
| | | |
| | | #ifndef _BUZipArchive_H |
| | | #define _BUZipArchive_H |
| | | |
| | | #import <Foundation/Foundation.h> |
| | | #import "BUZipCommon.h" |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | extern NSString *const BUZipArchiveErrorDomain; |
| | | typedef NS_ENUM(NSInteger, BUZipArchiveErrorCode) { |
| | | BUZipArchiveErrorCodeFailedOpenZipFile = -1, |
| | | BUZipArchiveErrorCodeFailedOpenFileInZip = -2, |
| | | BUZipArchiveErrorCodeFileInfoNotLoadable = -3, |
| | | BUZipArchiveErrorCodeFileContentNotReadable = -4, |
| | | BUZipArchiveErrorCodeFailedToWriteFile = -5, |
| | | BUZipArchiveErrorCodeInvalidArguments = -6, |
| | | }; |
| | | |
| | | @protocol BUZipArchiveDelegate; |
| | | |
| | | @interface BUZipArchive : NSObject |
| | | |
| | | |
| | | // Password check |
| | | + (BOOL)isFilePasswordProtectedAtPath:(NSString *)path; |
| | | + (BOOL)isPasswordValidForArchiveAtPath:(NSString *)path password:(NSString *)pw error:(NSError * _Nullable * _Nullable)error NS_SWIFT_NOTHROW; |
| | | |
| | | // Total payload size |
| | | + (NSNumber *)payloadSizeForArchiveAtPath:(NSString *)path error:(NSError **)error; |
| | | |
| | | // Unzip |
| | | + (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination; |
| | | + (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination delegate:(nullable id<BUZipArchiveDelegate>)delegate; |
| | | |
| | | + (BOOL)unzipFileAtPath:(NSString *)path |
| | | toDestination:(NSString *)destination |
| | | overwrite:(BOOL)overwrite |
| | | password:(nullable NSString *)password |
| | | error:(NSError * *)error; |
| | | |
| | | + (BOOL)unzipFileAtPath:(NSString *)path |
| | | toDestination:(NSString *)destination |
| | | overwrite:(BOOL)overwrite |
| | | needRename:(BOOL)needRename |
| | | password:(nullable NSString *)password |
| | | error:(NSError * *)error |
| | | delegate:(nullable id<BUZipArchiveDelegate>)delegate NS_REFINED_FOR_SWIFT; |
| | | |
| | | + (BOOL)unzipFileAtPath:(NSString *)path |
| | | toDestination:(NSString *)destination |
| | | preserveAttributes:(BOOL)preserveAttributes |
| | | overwrite:(BOOL)overwrite |
| | | password:(nullable NSString *)password |
| | | error:(NSError * *)error |
| | | delegate:(nullable id<BUZipArchiveDelegate>)delegate; |
| | | |
| | | + (BOOL)unzipFileAtPath:(NSString *)path |
| | | toDestination:(NSString *)destination |
| | | progressHandler:(void (^_Nullable)(NSString *entry, bu_unz_file_info zipInfo, long entryNumber, long total))progressHandler |
| | | completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler; |
| | | |
| | | + (BOOL)unzipFileAtPath:(NSString *)path |
| | | toDestination:(NSString *)destination |
| | | overwrite:(BOOL)overwrite |
| | | password:(nullable NSString *)password |
| | | progressHandler:(void (^_Nullable)(NSString *entry, bu_unz_file_info zipInfo, long entryNumber, long total))progressHandler |
| | | completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler; |
| | | |
| | | + (BOOL)unzipFileAtPath:(NSString *)path |
| | | toDestination:(NSString *)destination |
| | | preserveAttributes:(BOOL)preserveAttributes |
| | | overwrite:(BOOL)overwrite |
| | | needRename:(BOOL)needRename |
| | | nestedZipLevel:(NSInteger)nestedZipLevel |
| | | password:(nullable NSString *)password |
| | | error:(NSError **)error |
| | | delegate:(nullable id<BUZipArchiveDelegate>)delegate |
| | | progressHandler:(void (^_Nullable)(NSString *entry, bu_unz_file_info zipInfo, long entryNumber, long total))progressHandler |
| | | completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler; |
| | | |
| | | // Zip |
| | | // default compression level is Z_DEFAULT_COMPRESSION (from "zlib.h") |
| | | // keepParentDirectory: if YES, then unzipping will give `directoryName/fileName`. If NO, then unzipping will just give `fileName`. Default is NO. |
| | | |
| | | // without password |
| | | + (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray<NSString *> *)paths; |
| | | + (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath; |
| | | |
| | | + (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirectory; |
| | | |
| | | // with optional password, default encryption is AES |
| | | // don't use AES if you need compatibility with native macOS unzip and Archive Utility |
| | | + (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray<NSString *> *)paths withPassword:(nullable NSString *)password; |
| | | + (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath withPassword:(nullable NSString *)password; |
| | | + (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirectory withPassword:(nullable NSString *)password; |
| | | + (BOOL)createZipFileAtPath:(NSString *)path |
| | | withContentsOfDirectory:(NSString *)directoryPath |
| | | keepParentDirectory:(BOOL)keepParentDirectory |
| | | withPassword:(nullable NSString *)password |
| | | andProgressHandler:(void(^ _Nullable)(NSUInteger entryNumber, NSUInteger total))progressHandler; |
| | | + (BOOL)createZipFileAtPath:(NSString *)path |
| | | withContentsOfDirectory:(NSString *)directoryPath |
| | | keepParentDirectory:(BOOL)keepParentDirectory |
| | | compressionLevel:(int)compressionLevel |
| | | password:(nullable NSString *)password |
| | | AES:(BOOL)aes |
| | | progressHandler:(void(^ _Nullable)(NSUInteger entryNumber, NSUInteger total))progressHandler; |
| | | |
| | | - (instancetype)init NS_UNAVAILABLE; |
| | | - (instancetype)initWithPath:(NSString *)path NS_DESIGNATED_INITIALIZER; |
| | | - (BOOL)open; |
| | | |
| | | /// write empty folder |
| | | - (BOOL)writeFolderAtPath:(NSString *)path withFolderName:(NSString *)folderName withPassword:(nullable NSString *)password; |
| | | /// write file |
| | | - (BOOL)writeFile:(NSString *)path withPassword:(nullable NSString *)password; |
| | | - (BOOL)writeFileAtPath:(NSString *)path withFileName:(nullable NSString *)fileName withPassword:(nullable NSString *)password; |
| | | - (BOOL)writeFileAtPath:(NSString *)path withFileName:(nullable NSString *)fileName compressionLevel:(int)compressionLevel password:(nullable NSString *)password AES:(BOOL)aes; |
| | | /// write data |
| | | - (BOOL)writeData:(NSData *)data filename:(nullable NSString *)filename withPassword:(nullable NSString *)password; |
| | | - (BOOL)writeData:(NSData *)data filename:(nullable NSString *)filename compressionLevel:(int)compressionLevel password:(nullable NSString *)password AES:(BOOL)aes; |
| | | |
| | | - (BOOL)close; |
| | | |
| | | @end |
| | | |
| | | @protocol BUZipArchiveDelegate <NSObject> |
| | | |
| | | @optional |
| | | |
| | | - (void)zipArchiveWillUnzipArchiveAtPath:(NSString *)path zipInfo:(bu_unz_global_info)zipInfo; |
| | | - (void)zipArchiveDidUnzipArchiveAtPath:(NSString *)path zipInfo:(bu_unz_global_info)zipInfo unzippedPath:(NSString *)unzippedPath; |
| | | |
| | | - (BOOL)zipArchiveShouldUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(bu_unz_file_info)fileInfo; |
| | | - (void)zipArchiveWillUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(bu_unz_file_info)fileInfo; |
| | | - (void)zipArchiveDidUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(bu_unz_file_info)fileInfo; |
| | | - (void)zipArchiveDidUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath unzippedFilePath:(NSString *)unzippedFilePath; |
| | | |
| | | - (void)zipArchiveProgressEvent:(unsigned long long)loaded total:(unsigned long long)total; |
| | | |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |
| | | |
| | | #endif /* _BUZipArchive_H */ |
New file |
| | |
| | | #ifndef BUZipCommon |
| | | #define BUZipCommon |
| | | |
| | | // typedefs moved from mz_compat.h to here for public access |
| | | |
| | | /* unz_global_info structure contain global data about the ZIPfile |
| | | These data comes from the end of central dir */ |
| | | typedef struct bu_unz_global_info64_s |
| | | { |
| | | uint64_t number_entry; /* total number of entries in the central dir on this disk */ |
| | | uint32_t number_disk_with_CD; /* number the the disk with central dir, used for spanning ZIP */ |
| | | uint16_t size_comment; /* size of the global comment of the zipfile */ |
| | | } bu_unz_global_info64; |
| | | |
| | | typedef struct bu_unz_global_info_s |
| | | { |
| | | uint32_t number_entry; /* total number of entries in the central dir on this disk */ |
| | | uint32_t number_disk_with_CD; /* number the the disk with central dir, used for spanning ZIP */ |
| | | uint16_t size_comment; /* size of the global comment of the zipfile */ |
| | | } bu_unz_global_info; |
| | | |
| | | /* unz_file_info contain information about a file in the zipfile */ |
| | | /* https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT */ |
| | | typedef struct bu_unz_file_info64_s |
| | | { |
| | | uint16_t version; /* version made by 2 bytes */ |
| | | uint16_t version_needed; /* version needed to extract 2 bytes */ |
| | | uint16_t flag; /* general purpose bit flag 2 bytes */ |
| | | uint16_t compression_method; /* compression method 2 bytes */ |
| | | uint32_t dos_date; /* last mod file date in Dos fmt 4 bytes */ |
| | | uint32_t crc; /* crc-32 4 bytes */ |
| | | uint64_t compressed_size; /* compressed size 8 bytes */ |
| | | uint64_t uncompressed_size; /* uncompressed size 8 bytes */ |
| | | uint16_t size_filename; /* filename length 2 bytes */ |
| | | uint16_t size_file_extra; /* extra field length 2 bytes */ |
| | | uint16_t size_file_comment; /* file comment length 2 bytes */ |
| | | |
| | | uint32_t disk_num_start; /* disk number start 4 bytes */ |
| | | uint16_t internal_fa; /* internal file attributes 2 bytes */ |
| | | uint32_t external_fa; /* external file attributes 4 bytes */ |
| | | |
| | | uint64_t disk_offset; |
| | | |
| | | uint16_t size_file_extra_internal; |
| | | } bu_unz_file_info64; |
| | | |
| | | typedef struct bu_unz_file_info_s |
| | | { |
| | | uint16_t version; /* version made by 2 bytes */ |
| | | uint16_t version_needed; /* version needed to extract 2 bytes */ |
| | | uint16_t flag; /* general purpose bit flag 2 bytes */ |
| | | uint16_t compression_method; /* compression method 2 bytes */ |
| | | uint32_t dos_date; /* last mod file date in Dos fmt 4 bytes */ |
| | | uint32_t crc; /* crc-32 4 bytes */ |
| | | uint32_t compressed_size; /* compressed size 4 bytes */ |
| | | uint32_t uncompressed_size; /* uncompressed size 4 bytes */ |
| | | uint16_t size_filename; /* filename length 2 bytes */ |
| | | uint16_t size_file_extra; /* extra field length 2 bytes */ |
| | | uint16_t size_file_comment; /* file comment length 2 bytes */ |
| | | |
| | | uint16_t disk_num_start; /* disk number start 2 bytes */ |
| | | uint16_t internal_fa; /* internal file attributes 2 bytes */ |
| | | uint32_t external_fa; /* external file attributes 4 bytes */ |
| | | |
| | | uint64_t disk_offset; |
| | | } bu_unz_file_info; |
| | | |
| | | #endif |
| | |
| | | |
| | | - (nonnull instancetype)init NS_UNAVAILABLE; |
| | | |
| | | /** |
| | | Move the cache directory from old location to new location, the old location will be removed after finish. |
| | | If the old location does not exist, does nothing. |
| | | If the new location does not exist, only do a movement of directory. |
| | | If the new location does exist, will move and merge the files from old location. |
| | | If the new location does exist, but is not a directory, will remove it and do a movement of directory. |
| | | |
| | | @param srcPath old location of cache directory |
| | | @param dstPath new location of cache directory |
| | | */ |
| | | - (void)moveCacheDirectoryFromPath:(nonnull NSString *)srcPath toPath:(nonnull NSString *)dstPath; |
| | | |
| | | @end |
| | |
| | | #pragma mark - Safe Value Type From Key |
| | | - (NSString *)bu_stringForKey:(NSString *)key defaultValue:(NSString *)defalutValue; |
| | | - (NSInteger)bu_integerForKey:(NSString *)key defaultValue:(NSInteger)defalutValue; |
| | | - (long)bu_longForKey:(NSString *)key defaultValue:(long)defalutValue; |
| | | - (long long)bu_longLongForKey:(NSString *)key defaultValue:(long long)defalutValue; |
| | | - (NSTimeInterval)bu_timeIntervalForKey:(NSString *)key defaultValue:(NSTimeInterval)defalutValue; |
| | | - (NSTimeInterval)bu_floatForKey:(NSString *)key defaultValue:(float)defalutValue; |
| | | - (NSArray *)bu_arrayForKey:(NSString *)key defaultValue:(NSArray *)defalutValue; |
| | | - (NSDictionary *)bu_dictionaryForKey:(NSString *)key defaultValue:(NSDictionary *)defalutValue; |
| | | |
| | | @end |
| | | |
| | | @interface NSDictionary(BU_JSONValue) |
| | |
| | | + (id)bu_dictionaryWithJSONData:(NSData *)inData error:(NSError **)outError; |
| | | + (id)bu_dictionaryWithJSONString:(NSString *)inJSON error:(NSError **)outError; |
| | | @end |
| | | |
| | | |
| | | @interface NSMutableDictionary (BU_Helper) |
| | | |
| | | #pragma mark - Safe Set Object For Key |
| | | - (void)bu_setObject:(id)object forKey:(id<NSCopying>)key; |
| | | |
| | | @end |
New file |
| | |
| | | // |
| | | // NSJSONSerialization+BUSafeSerializaiton.h |
| | | // BUFoundation |
| | | // |
| | | // Created by bytedance on 2020/10/10. |
| | | // Copyright © 2020 Union. All rights reserved. |
| | | // |
| | | |
| | | #import <Foundation/Foundation.h> |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | @interface NSJSONSerialization (BUSafeSerializaiton) |
| | | + (nonnull NSString *)bu_stringJsonSerializationWithObject:(nullable id)object options:(NSJSONWritingOptions)opt error:(NSError **)error; |
| | | + (nullable NSData *)bu_dataJsonSerializationWithObject:(nullable id)object options:(NSJSONWritingOptions)opt error:(NSError **)error; |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |
New file |
| | |
| | | // |
| | | // NSObject+BUUtils.h |
| | | // BUFoundation |
| | | // |
| | | // Created by wangyanlin on 2020/12/7. |
| | | // Copyright © 2020 Union. All rights reserved. |
| | | // |
| | | |
| | | #import <Foundation/Foundation.h> |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | @interface NSObject (BUUtils) |
| | | |
| | | + (NSString *)bu_convertToStringWithOrignalObj:(id)obj; |
| | | |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |
New file |
| | |
| | | // |
| | | // NSUserDefaults+BUCrypt.h |
| | | // BUFoundation |
| | | // |
| | | // Created by Willie on 2020/9/11. |
| | | // Copyright © 2020 bytedance. All rights reserved. |
| | | // |
| | | |
| | | #import <Foundation/Foundation.h> |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | @interface NSUserDefaults (BUCrypt) |
| | | |
| | | - (void)setValue:(nullable id)value |
| | | forKey:(NSString *)key |
| | | crypt:(BOOL)crypt |
| | | error:(NSError **)error; |
| | | |
| | | - (nullable NSDictionary<NSString *, id> *)dictionaryForKey:(NSString *)defaultName |
| | | crypt:(BOOL)crypt |
| | | error:(NSError **)error; |
| | | |
| | | - (void)removeObjectForKey:(NSString *)defaultName |
| | | crypt:(BOOL)crypt |
| | | error:(NSError **)error; |
| | | |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |
| | |
| | | extern NSString *const kBU_logoAd_oversea; |
| | | extern NSString *const kBU_GDPRBack; |
| | | extern NSString *const kBU_playableLoading; |
| | | extern NSString *const kBU_splashZoomOutClose; |
| | | extern NSString *const kBU_playableLoading_oversea; |
| | | |
| | | @interface UIImage (BU_Icon) |
| | | // 弿¥è·åimage ä¸é»å¡ä¸»çº¿ç¨ |
| | |
| | | |
| | | #import <UIKit/UIKit.h> |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | @interface UIView (BU_Additions) |
| | | |
| | | - (UIImage *)bu_captureView; |
| | |
| | | UIViewBorderOptionAll |
| | | } UIViewBorderOption; |
| | | |
| | | |
| | | typedef struct { |
| | | CGFloat topLeft; |
| | | CGFloat topRight; |
| | | CGFloat bottomLeft; |
| | | CGFloat bottomRight; |
| | | } BUFCornerRadii; |
| | | |
| | | |
| | | @interface UIView (BU_Border) |
| | | |
| | | - (void)bu_setBorder:(UIViewBorderOption)option width:(CGFloat)width color:(UIColor *)color; |
| | | - (void)bu_setDashBorder:(UIViewBorderOption)option width:(CGFloat)width color:(UIColor *)color; |
| | | - (void)bu_roundCornerWithDashBorder:(CGFloat)radius width:(CGFloat)widht color:(UIColor *)color; |
| | | |
| | | - (void)bu_updateClippingForLayer:(CALayer *)layer cornerRadii:(BUFCornerRadii)cornerRadii maxRadius:(CGFloat)maxRadius; |
| | | @end |
| | | |
| | | |
| | |
| | | @property (nonatomic) float bu_y; |
| | | @property (nonatomic) float bu_width; |
| | | @property (nonatomic) float bu_height; |
| | | @property (nonatomic, getter = bu_y,setter = setBu_y:) float top; |
| | | @property (nonatomic, getter = bu_x,setter = setBu_x:) float left; |
| | | @property (nonatomic, getter = bu_y,setter = setBu_y:) float bu_top; // å¢å buåç¼ï¼é²æ¢ä¸å¤é¨å¼åè
çåç±»å±æ§åå²çªï¼https://jira.bytedance.com/browse/UNION-4447 fixed in 3300 by chaors |
| | | @property (nonatomic, getter = bu_x,setter = setBu_x:) float bu_left; |
| | | @property (nonatomic) float bu_bottom; |
| | | @property (nonatomic) float bu_right; |
| | | @property (nonatomic) CGSize bu_size; |
| | |
| | | @end |
| | | |
| | | |
| | | @interface UIView(BU_ScreenShot) |
| | | |
| | | + (UIImage *)bu_screenShot; |
| | | + (UIImage *)bu_screenShotWithoutStatusBar; |
| | | |
| | | - (UIImage *)bu_screenShot; |
| | | |
| | | @end |
| | | |
| | | |
| | | |
| | | @interface UIView (BU_TKCategory) |
| | | |
| | | // DRAW GRADIENT |
| | |
| | | |
| | | // DRAW LINE |
| | | + (void)bu_drawLineInRect:(CGRect)rect red:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha; |
| | | + (void)bu_drawLineInRect:(CGRect)rect colors:(CGFloat[])colors; |
| | | + (void)bu_drawLineInRect:(CGRect)rect colors:(CGFloat[])colors width:(CGFloat)lineWidth cap:(CGLineCap)cap; |
| | | + (void)bu_drawLineInRect:(CGRect)rect colors:(CGFloat[_Nullable])colors; |
| | | + (void)bu_drawLineInRect:(CGRect)rect colors:(CGFloat[_Nullable])colors width:(CGFloat)lineWidth cap:(CGLineCap)cap; |
| | | |
| | | @end |
| | | |
| | |
| | | |
| | | - (UILongPressGestureRecognizer *)bu_addLogPressGestureWithTarget:(id)target selecter:(SEL)aSelector; |
| | | |
| | | @property (nonatomic, strong, nullable) UITapGestureRecognizer *bu_tgr; |
| | | // ä¼ç§»é¤æ§çæå¿ |
| | | - (void)bu_addGestureRecognizerWithTarget:(id)target action:(SEL)action; |
| | | - (void)bu_removeGestureRecognizer; |
| | | @end |
| | | |
| | | @interface UIView (BU_FindFirstResponder) |
| | |
| | | |
| | | @interface UIView (BU_NearestController) |
| | | - (UIViewController *)bu_findNearestController; |
| | | |
| | | |
| | | |
| | | |
| | | @end |
| | | |
| | | @interface UIView (BU_SafeArea) |
| | |
| | | + (UIEdgeInsets)bu_defaultAreaInsets; |
| | | |
| | | @end |
| | | NS_ASSUME_NONNULL_END |
| | |
| | | }else{ |
| | | //æ¶èçè§é¢ |
| | | NSDictionary *dic = _videoData[indexPath.row]; |
| | | XYRDetailViewController *play=[[XYRDetailViewController alloc] init]; |
| | | XYRDetailViewController *play = [[XYRDetailViewController alloc] init]; |
| | | [YTHsharedManger startManger].preController = self; |
| | | play.modalPresentationStyle = 0; |
| | | play.Model = [XYRVideoInfoModel yy_modelWithDictionary:dic]; |
| | | [self presentViewController:play animated:YES completion:^{ |
| | |
| | | #pragma mark -UICollectionViewDataSource |
| | | - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ |
| | | XYRDetailViewController *play=[[XYRDetailViewController alloc] init]; |
| | | [YTHsharedManger startManger].preController = self; |
| | | play.modalPresentationStyle = 0; |
| | | play.Model = [XYRVideoInfoModel yy_modelWithDictionary:_arrDate[indexPath.row]]; |
| | | [self presentViewController:play animated:YES completion:^{ |
| | |
| | | -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ |
| | | NSDictionary * dic = movelist[indexPath.row]; |
| | | XYRDetailViewController *play=[[XYRDetailViewController alloc]init]; |
| | | [YTHsharedManger startManger].preController = self; |
| | | play.modalPresentationStyle = 0; |
| | | play.Model = [XYRVideoInfoModel yy_modelWithDictionary:dic]; |
| | | [self presentViewController:play animated:YES completion:^{ |
| | |
| | | <dict> |
| | | <key>CFBundleDevelopmentRegion</key> |
| | | <string>åæå¸ä¸¸å½±è§å¤§å
¨ä½¿ç¨å°çä¿¡æ¯åï¼</string> |
| | | <key>CFBundleDisplayName</key> |
| | | <string>å½±è§å¤§å
¨</string> |
| | | <key>CFBundleExecutable</key> |
| | | <string>$(EXECUTABLE_NAME)</string> |
| | | <key>CFBundleIdentifier</key> |
| | |
| | | <key>UISupportedInterfaceOrientations</key> |
| | | <array> |
| | | <string>UIInterfaceOrientationPortrait</string> |
| | | <string>UIInterfaceOrientationLandscapeLeft</string> |
| | | <string>UIInterfaceOrientationLandscapeRight</string> |
| | | </array> |
| | | <key>UIViewControllerBasedStatusBarAppearance</key> |
| | | <false/> |
| | |
| | | -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ |
| | | if (mytableview.editing == NO) { |
| | | [tableView deselectRowAtIndexPath:indexPath animated:YES]; |
| | | XYRDetailViewController *play=[[XYRDetailViewController alloc]init]; |
| | | XYRDetailViewController *play = [[XYRDetailViewController alloc]init]; |
| | | [YTHsharedManger startManger].preController = self; |
| | | NSDictionary *dic = historyListDataArray[indexPath.row]; |
| | | play.modalPresentationStyle = 0; |
| | | play.Model = [XYRVideoInfoModel yy_modelWithDictionary:dic]; |
| | |
| | | if([[dic objectForKey:@"PushType"] isEqualToString:@"pushVideoUpdateByAccount"]){//跳转å°è¯¦ç»çé¢ |
| | | NSString *userInfo=[dic objectForKey:@"Params"]; |
| | | NSDictionary *Params = [self dictionaryWithJsonString:userInfo]; |
| | | XYRDetailViewController *play=[[XYRDetailViewController alloc]init]; |
| | | XYRDetailViewController *play = [[XYRDetailViewController alloc]init]; |
| | | [YTHsharedManger startManger].preController = self; |
| | | play.modalPresentationStyle = 0; |
| | | play.Model = [XYRVideoInfoModel yy_modelWithDictionary:Params]; |
| | | [self presentViewController:play animated:YES completion:^{ |
| | |
| | | -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(nonnull NSIndexPath *)indexPath{ |
| | | NSDictionary * dic = [ListDataArray[indexPath.section] objectForKey:@"VideoInfo"]; |
| | | NSLog(@"%ld",(long)indexPath.section); |
| | | XYRDetailViewController *play=[[XYRDetailViewController alloc]init]; |
| | | XYRDetailViewController *play = [[XYRDetailViewController alloc]init]; |
| | | [YTHsharedManger startManger].preController = self; |
| | | play.modalPresentationStyle = 0; |
| | | play.Model = [XYRVideoInfoModel yy_modelWithDictionary:dic]; |
| | | [self presentViewController:play animated:YES completion:^{ |
| | |
| | | if(indexPath.section ==2){ |
| | | NSDictionary * dic = dataarr[indexPath.row]; |
| | | XYRDetailViewController *play=[[XYRDetailViewController alloc]init]; |
| | | [YTHsharedManger startManger].preController = self; |
| | | play.modalPresentationStyle = 0; |
| | | play.Model = [XYRVideoInfoModel yy_modelWithDictionary:dic]; |
| | | [self presentViewController:play animated:YES completion:^{ |
New file |
| | |
| | | // |
| | | // PPTVController.h |
| | | // BuWanVideo2.0 |
| | | // |
| | | // Created by Aeline on 2021/2/27. |
| | | // Copyright © 2021 com.yeshi.buwansheque.ios. All rights reserved. |
| | | // |
| | | |
| | | #import "BaseViewController.h" |
| | | |
| | | NS_ASSUME_NONNULL_BEGIN |
| | | |
| | | @interface PPTVController : UIViewController |
| | | |
| | | @property (nonatomic, nullable, strong) NSDictionary *parms; |
| | | |
| | | @end |
| | | |
| | | NS_ASSUME_NONNULL_END |
New file |
| | |
| | | // |
| | | // PPTVController.m |
| | | // BuWanVideo2.0 |
| | | // |
| | | // Created by Aeline on 2021/2/27. |
| | | // Copyright © 2021 com.yeshi.buwansheque.ios. All rights reserved. |
| | | // |
| | | |
| | | #import "PPTVController.h" |
| | | #import <WebKit/WebKit.h> |
| | | |
| | | @interface PPTVController () <WKNavigationDelegate, WKUIDelegate> |
| | | |
| | | @property (nonatomic, nullable, strong) WKWebView *webView; |
| | | |
| | | @end |
| | | |
| | | @implementation PPTVController |
| | | |
| | | - (void)viewDidLoad { |
| | | [super viewDidLoad]; |
| | | [self loadViewConfig]; |
| | | } |
| | | |
| | | - (void)viewWillAppear:(BOOL)animated { |
| | | [super viewWillAppear:animated]; |
| | | [self.navigationController setNavigationBarHidden:YES animated:animated]; |
| | | } |
| | | |
| | | - (void)viewWillDisappear:(BOOL)animated { |
| | | [super viewWillDisappear:animated]; |
| | | [self.navigationController setNavigationBarHidden:NO animated:animated]; |
| | | } |
| | | |
| | | - (void)loadViewConfig { |
| | | |
| | | [self.view addSubview:self.webView]; |
| | | |
| | | NSString *url = self.parms[@"playUrl"]; |
| | | NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; |
| | | [self.webView loadRequest:request]; |
| | | |
| | | UIButton *backbutton = [UIButton buttonWithType:UIButtonTypeCustom]; |
| | | [backbutton setImage:[UIImage imageNamed:@"详æ
页é¢è¿å"] forState:UIControlStateNormal]; |
| | | [self.view addSubview:backbutton]; |
| | | backbutton.frame = CGRectMake(10, KIsiPhoneX?85:65, 40, 30); |
| | | |
| | | [backbutton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside]; |
| | | |
| | | UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KScreenW, [[UIApplication sharedApplication] statusBarFrame].size.height+1)]; |
| | | view.backgroundColor = [UIColor blackColor]; |
| | | [self.view addSubview:view]; |
| | | |
| | | if (@available(iOS 13, *)) { |
| | | |
| | | |
| | | } else { |
| | | //å°è¦è¿å
¥å
¨å± |
| | | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startFullScreen) name:UIWindowDidResignKeyNotification object:nil]; |
| | | //éåºå
¨å± |
| | | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endFullScreen) name:UIWindowDidBecomeHiddenNotification object:nil]; |
| | | } |
| | | } |
| | | |
| | | -(void)startFullScreen { |
| | | //[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; |
| | | |
| | | UIApplication *application = [UIApplication sharedApplication]; |
| | | [application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight]; |
| | | application.keyWindow.transform=CGAffineTransformMakeRotation(M_PI/2); |
| | | CGRect frame = [UIScreen mainScreen].applicationFrame; |
| | | application.keyWindow.bounds = CGRectMake(0, 0, frame.size.height + 20, frame.size.width); |
| | | } |
| | | |
| | | -(void)endFullScreen { |
| | | [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; |
| | | UIApplication *application = [UIApplication sharedApplication]; |
| | | [application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight]; |
| | | CGRect frame = [UIScreen mainScreen].applicationFrame; |
| | | application.keyWindow.bounds = CGRectMake(0, 0, frame.size.width, frame.size.height + 20); |
| | | [UIView animateWithDuration:0 animations:^{ |
| | | application.keyWindow.transform=CGAffineTransformMakeRotation(M_PI * 2); |
| | | }]; |
| | | } |
| | | |
| | | - (void)back { |
| | | [self.navigationController popViewControllerAnimated:YES]; |
| | | } |
| | | |
| | | // 页é¢å¼å§å è½½æ¶è°ç¨ |
| | | - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation { |
| | | } |
| | | |
| | | // 页é¢å 载失败æ¶è°ç¨ |
| | | - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error { |
| | | |
| | | } |
| | | |
| | | // å½å
容å¼å§è¿åæ¶è°ç¨ |
| | | - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation { |
| | | [self performSelector:@selector(afterDelay) withObject:nil afterDelay:0.5]; |
| | | } |
| | | |
| | | - (void)afterDelay { |
| | | [self.webView evaluateJavaScript:@"javascript:adPlayFinish()" completionHandler:^(id _Nullable object, NSError * _Nullable error) {}]; |
| | | } |
| | | |
| | | - (WKWebView *)webView |
| | | { |
| | | if (!_webView) { |
| | | // 0.ç½é¡µé
置对象 |
| | | WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; |
| | | // 1.åçä¸JS交äºç®¡ç |
| | | WKUserContentController *userContentController = [[WKUserContentController alloc] init]; |
| | | |
| | | /// è§£å³å¾ªç¯å¼ç¨ |
| | | // 0.å¨viewdisAppearæ¹æ³ä¸ |
| | | // [self.wkWebview.configuration.userContentController removeScriptMessageHandlerForName:@"ScanAction"]; |
| | | // [userContentController addScriptMessageHandler:self name:@"ScanAction"]; |
| | | |
| | | // 1.ç»§æ¿ç³»ç»çNSProxy |
| | | // [userContentController addScriptMessageHandler:(id<WKScriptMessageHandler>)[XPZ_Proxy proxyWithTarget:self] name:@"ScanAction"]; |
| | | |
| | | // 2.èªå®ä¹NSProxy |
| | | // [userContentController addScriptMessageHandler:(id<WKScriptMessageHandler>)[XPZ_CustomProxy proxyWithTarget:self] name:@"ScanAction"]; |
| | | // æ·»å |
| | | config.userContentController = userContentController; |
| | | |
| | | // 3.WKWebview设置 |
| | | WKPreferences *prefer = [[WKPreferences alloc] init]; |
| | | //设置æ¯å¦æ¯æjavaScript é»è®¤æ¯æ¯æç |
| | | prefer.javaScriptEnabled = true; |
| | | // // å¨iOSä¸é»è®¤ä¸ºNOï¼è¡¨ç¤ºæ¯å¦å
许ä¸ç»è¿ç¨æ·äº¤äºç±javaScriptèªå¨æå¼çªå£ |
| | | prefer.javaScriptCanOpenWindowsAutomatically = YES; |
| | | // æ·»å |
| | | config.preferences = prefer; |
| | | config.preferences.minimumFontSize = 0.0f; |
| | | // æ¯ä½¿ç¨h5çè§é¢ææ¾å¨å¨çº¿ææ¾, è¿æ¯ä½¿ç¨åçææ¾å¨å
¨å±ææ¾ |
| | | config.allowsInlineMediaPlayback = YES; |
| | | //设置è§é¢æ¯å¦éè¦ç¨æ·æå¨ææ¾ 设置为NOåä¼å
许èªå¨ææ¾ |
| | | config.mediaTypesRequiringUserActionForPlayback = YES; |
| | | //设置æ¯å¦å
许ç»ä¸ç»ææ¯ å¨ç¹å®è®¾å¤ä¸ææ |
| | | config.allowsPictureInPictureMediaPlayback = YES; |
| | | //设置请æ±çUser-Agentä¿¡æ¯ä¸åºç¨ç¨åºåç§° iOS9åå¯ç¨ |
| | | config.applicationNameForUserAgent = @"ChinaDailyForiPad"; |
| | | |
| | | _webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, KScreenW, KScreenH) configuration:config]; |
| | | _webView.UIDelegate = self; |
| | | _webView.navigationDelegate = self; |
| | | // æ¯å¦å
许æå¿å·¦æ»è¿åä¸ä¸çº§, ç±»ä¼¼å¯¼èªæ§å¶çå·¦æ»è¿å |
| | | _webView.allowsBackForwardNavigationGestures = YES; |
| | | //å¯è¿åç页é¢å表, åå¨å·²æå¼è¿çç½é¡µ |
| | | WKBackForwardList * backForwardList = [_webView backForwardList]; |
| | | } |
| | | return _webView; |
| | | } |
| | | |
| | | @end |
| | |
| | | NSString *str=[NSString stringWithFormat:@"ValueX%@Y%ldZ%ld",_Species,(long)SpeciesNumber,(long)typeNumber]; |
| | | NSMutableArray *dataAry=[_dataDic objectForKey:str]; |
| | | XYRDetailViewController *detailVC=[[XYRDetailViewController alloc] init]; |
| | | [YTHsharedManger startManger].preController = self; |
| | | detailVC.modalPresentationStyle = 0; |
| | | if(LoadGoogleAD){//å 载广å |
| | | detailVC.Model=[XYRVideoInfoModel yy_modelWithDictionary:dataAry[indexPath.row-indexPath.row/20]]; |
| | |
| | | return; |
| | | } |
| | | XYRDetailViewController *play=[[XYRDetailViewController alloc]init]; |
| | | [YTHsharedManger startManger].preController = self; |
| | | play.modalPresentationStyle = 0; |
| | | play.Model = [XYRVideoInfoModel yy_modelWithDictionary:_hotListData[indexPath.row]]; |
| | | [self presentViewController:play animated:YES completion:^{ |
| | |
| | | @property (weak, nonatomic) IBOutlet NSLayoutConstraint *topLayout; |
| | | @property (weak, nonatomic) IBOutlet NSLayoutConstraint *backLayout; |
| | | |
| | | @property (nonatomic , strong) UIViewController *viewController; |
| | | //ä¼é
·çä¸¤ä¸ªå±æ§ |
| | | @property (nonatomic, assign) BOOL islocal; |
| | | @property (nonatomic, retain) id videoItem; |
| | |
| | | #import "AppDelegate.h" |
| | | |
| | | #import "XYRDetailViewController.h" |
| | | #import "PPTVController.h" |
| | | #import "XYRVideoDetailModel.h" |
| | | #import "UIImageView+WebCache.h" |
| | | |
| | |
| | | [self addTitleBackView]; |
| | | //å è½½è§é¢è¯¦æ
页é¢çæ°æ® |
| | | [self getVideoDetailViewWithMovieId:self.Model.Id WithThirdType:self.Model.ThirdType WithResourceId:nil]; |
| | | |
| | | if ([YTHsharedManger startManger].ad[@"videoDetailFullVideo"] && [[YTHsharedManger startManger].ad[@"videoDetailFullVideo"] isEqualToString:@"csj"]) { |
| | | [self loadFullscreenVideoAd]; |
| | | } |
| | | } |
| | | |
| | | - (void)loadFullscreenVideoAd { |
| | |
| | | return UIInterfaceOrientationPortrait; |
| | | } |
| | | |
| | | - (UIViewController *)fetchCurrentViewController { |
| | | UIViewController* currentViewController = [UIApplication sharedApplication].keyWindow.rootViewController; |
| | | BOOL runLoopFind = YES; |
| | | while (runLoopFind) { |
| | | if (currentViewController.presentedViewController) { |
| | | currentViewController = currentViewController.presentedViewController; |
| | | } else if ([currentViewController isKindOfClass:[UINavigationController class]]) { |
| | | UINavigationController* navigationController = (UINavigationController* )currentViewController; |
| | | currentViewController = [navigationController.childViewControllers lastObject]; |
| | | } else if ([currentViewController isKindOfClass:[UITabBarController class]]) { |
| | | UITabBarController* tabBarController = (UITabBarController* )currentViewController; |
| | | currentViewController = tabBarController.selectedViewController; |
| | | } else { |
| | | NSUInteger childViewControllerCount = currentViewController.childViewControllers.count; |
| | | if (childViewControllerCount > 0) { |
| | | currentViewController = currentViewController.childViewControllers.lastObject; |
| | | return currentViewController; |
| | | } else { |
| | | return currentViewController; |
| | | } |
| | | } |
| | | } |
| | | return currentViewController; |
| | | } |
| | | |
| | | /***********(以ä¸)æ°æ®ç½è·¯å è½½**************/ |
| | | /** |
| | | * è·åè§é¢ç详ç»ä¿¡æ¯å¹¶å è½½ |
| | |
| | | //ç叿µæ»å¨å°é¡¶é¨ |
| | | [self.collectionView setContentOffset:CGPointMake(0, 0) animated:YES]; |
| | | NSDictionary *dictionaryDta = (NSDictionary *)result; |
| | | _DetailModel=[XYRVideoDetailModel yy_modelWithDictionary:dictionaryDta]; |
| | | |
| | | if ([dictionaryDta[@"Data"][@"pptv"] boolValue]) { |
| | | [SVProgressHUD dismiss]; |
| | | // æ¦æªè·³è½¬çé¢ |
| | | PPTVController *vc = [[PPTVController alloc] init]; |
| | | vc.parms = dictionaryDta[@"Data"]; |
| | | vc.hidesBottomBarWhenPushed = YES; |
| | | [[YTHsharedManger startManger].preController.navigationController pushViewController:vc animated:YES]; |
| | | |
| | | [self dismissViewControllerAnimated:NO completion:^{}]; |
| | | return; |
| | | } |
| | | if ([YTHsharedManger startManger].ad[@"videoDetailFullVideo"] && [[YTHsharedManger startManger].ad[@"videoDetailFullVideo"] isEqualToString:@"csj"]) { |
| | | [self loadFullscreenVideoAd]; |
| | | } |
| | | |
| | | _DetailModel = [XYRVideoDetailModel yy_modelWithDictionary:dictionaryDta]; |
| | | //æ´æ°è¯¦æ
页çè§é¢å¾ç |
| | | [self.image setYthImageWithURL:_DetailModel.Data.PlayPicture placeholderImage:[UIImage imageNamed:@"é»è®¤å è½½å¾ç"]]; |
| | | //å¨è¿é夿䏻æ¼å主è¦å
容æ¯å¦ä¸ºç©ºï¼å¦æåæ¶ä¸ºç©ºï¼å°±éèç®ä» |
| | |
| | | // }]; |
| | | //} |
| | | |
| | | |
| | | |
| | | - (void)dealloc { |
| | | |
| | | |
| | |
| | | #import "AFHTTPSessionManager.h" |
| | | |
| | | //æææ¥å£çåå |
| | | #define iconImageUrl @"http://bwapp.flqapp.com:8089/BuWan" //头åç请æ±å°åï¼å¤ç½ |
| | | #define iconImageUrl @"http://api.ysdq.yeshitv.com:8089/BuWan" //头åç请æ±å°åï¼å¤ç½ |
| | | //#define iconImageUrl @"http://192.168.1.66:8888/BuWan" //头åç请æ±å°åï¼å¤ç½ |
| | | |
| | | #define domainHTTP @"http://bwapp.flqapp.com:8089/BuWan/api/v2" //2016-6-23æ°å¤ç½æ¥å£ |
| | | #define domainHTTP @"http://api.ysdq.yeshitv.com:8089/BuWan/api/v2" //2016-6-23æ°å¤ç½æ¥å£ |
| | | |
| | | //#define domainHTTP @"http://192.168.1.66:8888/BuWan/api/v2" //2016-6-23æ°å¤ç½æ¥å£ |
| | | |
| | |
| | | */ |
| | | @property (nonatomic , assign) NSInteger NetworkStatus; |
| | | @property (nonatomic , strong) NSString *searchTitle; |
| | | |
| | | @property (nonatomic , strong) UIViewController *preController; |
| | | /// é¦é¡µå¹¿åä½é
ç½® |
| | | @property (nonatomic , strong) NSDictionary *ad; |
| | | |
| | |
| | | |
| | | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ |
| | | XYRDetailViewController *play=[[XYRDetailViewController alloc]init]; |
| | | [YTHsharedManger startManger].preController = self; |
| | | play.modalPresentationStyle = 0; |
| | | NSDictionary *dic = [information[indexPath.section]objectForKey:@"VideoInfo"]; |
| | | play.Model = [XYRVideoInfoModel yy_modelWithDictionary:dic]; |
| | |
| | | }else{ |
| | | if ([_type_id integerValue] == 309 || [_type_id integerValue] == 310) { |
| | | NSArray *HomeVideoList=[self.dataHomeType[indexPath.section-1] objectForKey:@"HomeVideoList"]; |
| | | XYRDetailViewController *play=[[XYRDetailViewController alloc]init]; |
| | | XYRDetailViewController *play = [[XYRDetailViewController alloc]init]; |
| | | [YTHsharedManger startManger].preController = [self viewController]; |
| | | play.modalPresentationStyle = 0; |
| | | play.Model = [XYRVideoInfoModel yy_modelWithDictionary:[HomeVideoList[indexPath.row] objectForKey:@"Video"]]; |
| | | [[self viewController] presentViewController:play animated:YES completion:^{ |
| | |
| | | |
| | | } else { |
| | | NSDictionary *HomeVideoList=self.dataHomeType[indexPath.row]; |
| | | XYRDetailViewController *play=[[XYRDetailViewController alloc]init]; |
| | | XYRDetailViewController *play = [[XYRDetailViewController alloc]init]; |
| | | [YTHsharedManger startManger].preController = [self viewController]; |
| | | play.modalPresentationStyle = 0; |
| | | play.Model = [XYRVideoInfoModel yy_modelWithDictionary:HomeVideoList]; |
| | | [[self viewController] presentViewController:play animated:YES completion:^{ |
| | |
| | | if ([_type_id integerValue] == 309 || [_type_id integerValue] == 310) { |
| | | NSArray *HomeVideoList=[self.dataHomeType[indexPath.section-1] objectForKey:@"HomeVideoList"]; |
| | | XYRDetailViewController *play = [[XYRDetailViewController alloc]init]; |
| | | [YTHsharedManger startManger].preController = [self viewController]; |
| | | play.modalPresentationStyle = 0; |
| | | play.Model = [XYRVideoInfoModel yy_modelWithDictionary:[HomeVideoList[indexPath.row] objectForKey:@"Video"]]; |
| | | [[self viewController] presentViewController:play animated:YES completion:^{ |
| | |
| | | |
| | | } else { |
| | | NSDictionary *HomeVideoList=self.dataHomeType[indexPath.row] ; |
| | | XYRDetailViewController *play=[[XYRDetailViewController alloc]init]; |
| | | XYRDetailViewController *play = [[XYRDetailViewController alloc]init]; |
| | | [YTHsharedManger startManger].preController = [self viewController]; |
| | | play.modalPresentationStyle = 0; |
| | | play.Model = [XYRVideoInfoModel yy_modelWithDictionary:HomeVideoList]; |
| | | [[self viewController] presentViewController:play animated:YES completion:^{ |
| | |
| | | NSInteger LinkType = [[self.dataAdverti[index] objectForKey:@"LinkType"] integerValue]; |
| | | if (LinkType == 1) {//æ®éè§é¢è·³è½¬ |
| | | XYRDetailViewController *play=[[XYRDetailViewController alloc]init]; |
| | | [YTHsharedManger startManger].preController = [self viewController]; |
| | | NSString *video = @""; |
| | | if ([_type_id integerValue] == 309 || [_type_id integerValue] == 310) { |
| | | video = @"Video"; |
| | |
| | | |
| | | - (void)playVideo:(XYRVideoInfoModel *)model { |
| | | XYRDetailViewController *detailVC=[[XYRDetailViewController alloc] init]; |
| | | [YTHsharedManger startManger].preController = self; |
| | | detailVC.modalPresentationStyle = 0; |
| | | detailVC.Model = model; |
| | | [self presentViewController:detailVC animated:YES completion:^{}]; |
| | |
| | | return; |
| | | } |
| | | XYRDetailViewController *detailVC=[[XYRDetailViewController alloc] init]; |
| | | [YTHsharedManger startManger].preController = self; |
| | | detailVC.modalPresentationStyle = 0; |
| | | detailVC.Model = model; |
| | | [self presentViewController:detailVC animated:YES completion:^{}]; |
| | |
| | | } |
| | | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ |
| | | XYRDetailViewController *play=[[XYRDetailViewController alloc]init]; |
| | | [YTHsharedManger startManger].preController = self; |
| | | play.modalPresentationStyle = 0; |
| | | play.Model = [XYRVideoInfoModel yy_modelWithDictionary:self.dataSource[indexPath.section] ]; |
| | | [self presentViewController:play animated:YES completion:nil]; |