개별 공유 플랫폼의 SDK 통합 방법
당면 과제:
첫 번째 문제에 대한 우리의 해결 방안
라이프 사이클 관리 모듈을 작성하는 관리자는 분배
Appdelegate
안의 각종 라이프 사이클을 책임지는 방법부터 분배 모듈에 이르기까지 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
- (void)applicationDidBecomeActive:(UIApplication *)application;
- (void)applicationWillResignActive:(UIApplication *)application;
와 같은 방법으로 우리는 모든 방법을 분배했다.그럼 어디서 나눠줬는지는 Appdelegate
의 부류를 정해 상속 관계를 통해 나눠준다.우리는 공유 모듈을 이 생명주기 모듈에 등록하고 각 공유 플랫폼의 매개 변수를 앱키, 시크릿 등 등록해야 한다.우리는 +load () 방법으로 모듈을 신속하게 등록했는데 대체로 이렇다+(void)load {
[XYAppLifecycleManager registerModuleClass:[CMShareLifeCycle class] config:@{
@"QQ":@{
@"appscheme":@"xx",
@"appkey":@"xx"
},
@"Weibo":@{
@"appscheme":@"xx",
@"appkey":@"xx"
},
@"Wechat":@{
@"appscheme":@"xx",
@"appkey":@"xx",
@"secret":@"xx"
}
} priority:100];
}
공유 모듈에 설정된 공유 플랫폼을 가지고 있는runtime를 통해 실례를 생성할 수 있는 집합이 있습니다
[servers enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString *server = [NSString stringWithFormat:@"XY%@Adapter",obj];
id shareClass = [[NSClassFromString(server) alloc] init];
if (shareClass) {
[self.shareServers addObject:shareClass];
}
}];
이곳의 아담터는 모든 공유 플랫폼에 적합한 것인데 왜 이렇게 말합니까?각 플랫폼은 약간의 차이가 있을 수 있는데 이것은 두 가지 측면에 나타난다. 1.설정된 매개 변수는 위의 configure에서 볼 수 있습니다.리셋 방법은 모두 아래 몇 가지가 있지만 공유마다 다 가는 것은 아니다.
1.-(void)applicationDidBecomeActive:(UIApplication *)application
2.-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
3.-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options
4.-(void)didFinishLaunchingWithOptions:(NSDictionary *)launchOptions params:(NSDictionary *)params
우리는 매번Appdelegate
에서 위의 방법이 호출될 때 생명주기 모듈에서 나누어 주고 공유 모듈에서 각 공유 플랫폼의 adapter에게 나누어 준다. 예를 들어 QQAdapter의 종류는 하나의 프로토콜XYShareProtocol
을 따른다. 이 프로토콜에는 위와 같은 네 가지 방법이 있는데 그 중에서 선택할 수 있는 방법이 있다.이와 같은 실현-(void)xy_didFinishLaunchingWithOptions:(NSDictionary *)launchOptions params:(NSDictionary *)params {
XYSNSRegisterParam * registerParam = [[XYSNSRegisterParam alloc] init];
XYSNSQQ *qq = [XYSNSQQ sharedInstance];
NSString *appscheme = params[@"QQ"][@"appscheme"];
NSString *appkey = params[@"QQ"][@"appkey"];
[qq setAppScheme:appscheme];
[registerParam setAppKey:appkey];
[qq registerApp:registerParam];
}
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options {
return [XYSNSHelper application:application openURL:url sourceApplication:options[@"UIApplicationOpenURLOptionsOpenInPlaceKey"] annotation:options[@"UIApplicationOpenURLOptionsOpenInPlaceKey"] snsArray:@[[XYSNSQQ sharedInstance]]];
}
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [XYSNSHelper application:application openURL:url sourceApplication:sourceApplication annotation:annotation snsArray:@[[XYSNSQQ sharedInstance]]];
}
여기에 하나의 공장 방법을 사용했다. 공유 모듈은 하나의 공장에 있는 것처럼 각 공유 플랫폼을runtime를 통해 실례화한 즉adapter이고 각adapter는 추상적인 인터페이스
XYShareProtocol
를 따라 최종적으로 각 공유 플랫폼을 고도로 추상화시켰다.두 번째 문제에 대한 우리의 해결 방안
사실 이 임무를 완성하는 것은 지난 임무를 바탕으로 공유 모듈의 추상적인 정도가 충분해야만 마음대로 설정할 수 있다.우리는pod로 관리하는 것이다
podspec
파일의 일부 내용은 다음과 같다.s.default_subspec = 'Core'
s.subspec 'Core' do |cr|
cr.name = 'Core'
cr.platform = :ios,'8.0'
cr.source_files = 'XYShareSDK/Core/**/*.{h,m}'
end
s.subspec 'Twitter' do |tt|
tt.name = 'Twitter'
tt.platform = :ios,'8.0'
tt.source_files = 'XYShareSDK/Twitter/*.{h,m}'
tt.dependency 'Fabric','1.6.11'
tt.dependency 'XYShareSDK/Core'
tt.dependency 'TwitterCore','1.11.3'
tt.dependency 'TwitterKit','1.11.3'
end
s.subspec 'Google' do |google|
google.name = 'Google'
google.platform = :ios,'8.0'
google.source_files = 'XYShareSDK/Google/*.{h,m}'
google.vendored_frameworks = 'XYShareSDK/Google/Library/*.framework'
google.resource = 'XYShareSDK/Google/Library/*.bundle'
google.dependency 'GoogleSymbolUtilities'
google.dependency 'XYShareSDK/Core'
# google.dependency 'XYShareSDK/GoogleSymbolUtilities'
end
Core
폴더 안은 모두 고도의 추상적인 코드이고 다른 Twitter
,Google
에는 구체적인 공유가 있다.저희가 사용할 때podfile
이렇게.pod 'XYShareSDK/QQ', :git => 'http://xxx.xxx.xxx0/ioscomponentgroup/xysharesdk.git',:branch => 'branchForSubSpec'
pod 'XYShareSDK/WeChat', :git => 'http://xxx.xxx.xxx/ioscomponentgroup/xysharesdk.git',:branch => 'branchForSubSpec'
pod 'XYShareSDK/Weibo', :git => 'http://xxx.xxx.xxx/ioscomponentgroup/xysharesdk.git',:branch => 'branchForSubSpec'
비록 이렇게 많이 썼지만 중간의 우여곡절은 정말 적지 않다.본고는 재구성 또는 조립화 중인 아동화에 도움이 되길 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.