앱보이키트 (Objective-C 소프트웨어 개발 키트라고도 함)는 더 이상 지원되지 않으며 Swift SDK. 새로운 기능, 버그 수정, 보안 업데이트 또는 기술 지원은 더 이상 제공되지 않지만 메시징 및 분석은 정상적으로 계속 작동합니다. 자세한 내용은 새로운 Braze Swift 소프트웨어 개발 키트 소개 를 참조하세요.
iOS용 딥링킹
딥링크에 대한 소개 정보는 사용 설명서 문서를 참조하세요. Braze 앱에서 처음으로 딥링크를 구현하려는 경우, 아래 단계를 따라 시작하세요.
1단계: 스키마 등록
Info.plist 파일에 커스텀 스키마를 명시해야 합니다. 탐색 구조는 여러 사전 배열로 정의됩니다. 이러한 각 사전에는 문자열 배열이 포함되어 있습니다.
Xcode를 사용하여 Info.plist 파일을 편집합니다:
- 새 키(
URL types)를 추가합니다. Xcode는 자동으로Item 0사전을 포함하는 배열로 만듭니다. Item 0에서URL identifier키를 추가합니다. 값을 커스텀 스키마로 설정합니다.Item 0에서URL Schemes키를 추가합니다. 그러면 자동으로Item 0문자열을 포함하는 배열이 됩니다.URL Schemes»Item 0을 사용자 지정 구성표로 설정합니다.
또는 Info.plist 파일을 직접 편집하려면 다음 사양을 따를 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>{YOUR.SCHEME}</string>
<key>CFBundleURLSchemes</key>
<array>
<string>{YOUR.SCHEME}</string>
</array>
</dict>
</array>
2단계: 사용자 지정 구성표 허용 목록(iOS 9+)
iOS 9부터 앱에는 앱이 열 수 있도록 허용되는 커스텀 스키마의 허용 목록이 있어야 합니다. 이 목록에 없는 스키마를 호출하려고 시도하면 시스템에서 기기 로그에 오류를 기록하고 딥링크가 열리지 않습니다. 이 오류의 예는 다음과 같습니다:
1
<Warning>: -canOpenURL: failed for URL: "yourapp://deeplink" – error: "This app is not allowed to query for scheme yourapp"
예를 들어, 인앱 메시지에서 Facebook 앱을 탭하여 열려면 앱의 허용 목록에 Facebook 커스텀 스키마(fb)가 있어야 합니다. 그렇지 않으면 시스템이 딥 링크를 거부합니다. 앱 내부의 페이지나 보기로 연결되는 딥링크는 여전히 앱의 Info.plist에 앱의 커스텀 스키마가 나열되어야 합니다.
앱이 LSApplicationQueriesSchemes 키를 사용해 앱의 Info.plist에서 허용 목록에 앱이 딥링킹해야 하는 모든 스키마를 추가해야 합니다. 예를 들어, 다음과 같습니다.
1
2
3
4
5
6
<key>LSApplicationQueriesSchemes</key>
<array>
<string>myapp</string>
<string>facebook</string>
<string>twitter</string>
</array>
자세한 내용은 Apple 설명서에서 LSApplicationQueriesSchemes 키를 참조하세요.
3단계: 핸들러 구현
앱을 활성화한 후 iOS는 application:openURL:options: 메서드를 호출합니다. 중요한 인수는 NSURL 객체입니다.
1
2
3
4
5
6
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
NSString *path = [url path];
NSString *query = [url query];
// Here you should insert code to take some action based upon the path and query.
return YES;
}
1
2
3
4
5
6
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
let path = url.path
let query = url.query
// Here you should insert code to take some action based upon the path and query.
return true
}

유니버설 링크
유니버설 링크를 사용하려면 앱의 기능에 등록된 도메인을 추가하고 apple-app-site-association 파일을 업로드했는지 확인합니다. 그런 다음, AppDelegate에서 application:continueUserActivity:restorationHandler: 메서드를 구현합니다. For example:
1
2
3
4
5
6
7
8
9
- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler {
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *url = userActivity.webpageURL;
// Handle url
}
return YES;
}
1
2
3
4
5
6
7
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if (userActivity.activityType == NSUserActivityTypeBrowsingWeb) {
let url = userActivity.webpageURL
// Handle url
}
return true
}
자세한 내용은 Apple을 참조하세요.
기본 유니버설 링크 통합은 Braze 푸시 알림 또는 인앱 메시지와 호환되지 않습니다. 애플리케이션 내에서 유니버설 링크를 처리하기 위한 링크 사용자 지정을 참조하세요. 또는 푸시 알림 및 인앱 메시지와 함께 스키마 기반 딥링크를 사용하는 것이 좋습니다.
앱 전송 보안(ATS)
iOS 9에서는 인앱 메시지에 포함된 웹 URL과 푸시 알림에 영향을 미치는 획기적인 변경 사항이 도입되었습니다.
ATS 요구 사항
Apple의 문서에서 발췌한 내용입니다: “앱 전송 보안은 앱과 웹 서비스 간의 연결 보안을 강화하는 기능입니다. 이 기능은 보안 연결을 위한 모범 사례를 준수하는 기본 연결 요구 사항으로 구성되어 있습니다. 앱은 이 기본 동작을 재정의하고 전송 보안을 해제할 수 있습니다.”
ATS는 iOS 9 이상에서 기본적으로 적용됩니다. 모든 연결은 HTTPS를 사용해야 하며, 순방향 비밀성을 지원하는 TLS 1.2를 사용하여 암호화해야 합니다. 자세한 내용은 ATS를 사용하여 연결하기 위한 요구 사항을 참조하세요. Braze가 최종 기기에 제공하는 모든 이미지는 TLS 1.2를 지원하고 ATS와 호환되는 콘텐츠 전송 네트워크(“CDN”)에서 처리됩니다.
애플리케이션의 Info.plist에서 예외로 지정하지 않는 한, 이러한 요구 사항을 따르지 않는 연결은 다음과 같은 오류와 함께 실패합니다.
1
2
CFNetwork SSLHandshake failed (-9801)
Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred, and a secure connection to the server cannot be made."
1
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
ATS 규정 준수는 모바일 앱 내에서 열린 링크(클릭된 링크에 대한 기본 처리)에 대해 적용되며 웹 브라우저를 통해 외부에서 열린 사이트에는 적용되지 않습니다.
ATS 요구 사항 처리
다음 세 가지 방법 중 하나로 ATS를 처리할 수 있습니다:
모든 링크가 ATS를 준수하는지 확인(권장)
Braze 통합은 인앱 메시지 및 푸시 캠페인을 통해 사용자를 유도하는 모든 기존 링크가 ATS 요건을 충족하도록 함으로써 ATS 요건을 충족할 수 있습니다. ATS 제한을 우회하는 방법이 있지만, 링크된 모든 URL이 ATS 규정을 준수하는지 확인하는 것이 좋습니다. Apple은 애플리케이션 보안을 점점 더 강조하고 있기 때문에 다음과 같은 ATS 예외 허용에 관한 접근 방식은 Apple에서 지원되지 않습니다.
SSL 도구는 웹 서버 보안 문제를 정확히 파악하는 데 도움이 될 수 있습니다. 의 이 SSL 서버 테스트는 Apple ATS 9 및 iOS 9 규정 준수를 위한 항목을 제공합니다.
ATS 부분 비활성화
특정 도메인 또는 스키마가 있는 링크의 하위 집합을 ATS 규칙의 예외로 취급하도록 허용할 수 있습니다. Braze 메시징 채널에서 사용하는 모든 링크가 ATS를 준수하거나 예외를 통해 처리되는 경우, Braze 통합은 ATS 요구 사항을 충족합니다.
ATS의 예외로 도메인을 추가하려면 앱의 Info.plist 파일에 다음을 추가합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
자세한 내용은 Apple의 앱 전송 보안 키 관련 문서를 참조하세요.
ATS를 완전히 비활성화
ATS를 완전히 끌 수 있습니다. 보안 보호 기능이 손실되고 향후 iOS 호환성이 저하될 수 있으므로 권장되지 않는 방법입니다. ATS를 비활성화하려면 앱의 Info.plist 파일에 다음을 삽입하세요:
1
2
3
4
5
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
ATS 오류를 디버깅하는 방법에 대한 자세한 내용은 앱 전송 보안을 사용하여 앱 배포하기를 참조하세요.
URL 인코딩
Braze iOS SDK v2.21.0부터 SDK는 링크를 퍼센트 인코딩하여 유효한 NSURL을 생성합니다. 유니코드 문자와 같이 올바르게 형성된 URL에서 허용되지 않는 모든 링크 문자는 퍼센트 기호로 이스케이프 처리됩니다.
인코딩된 링크를 디코딩하려면 NSString 메서드 stringByRemovingPercentEncoding을 사용합니다. 또한 ABKURLDelegate에서 YES를 반환해야 하며 앱에서 URL 처리를 트리거하려면 실행 유도 작업이 필요합니다. For example:
1
2
3
4
5
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *, id> *)options {
NSString *urlString = url.absoluteString.stringByRemovingPercentEncoding;
// Handle urlString
return YES;
}
1
2
3
4
5
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
let urlString = url.absoluteString.removingPercentEncoding
// Handle urlString
return true
}
사용자 지정
기본 WebView 사용자 지정
사용자 지정 가능한 ABKModalWebViewController 클래스는 일반적으로 웹 딥링크에 대해 ‘앱 내에서 웹 URL 열기’를 선택한 경우 SDK에 의해 열린 웹 URL을 표시합니다.
ABKModalWebViewController 클래스에 대한 카테고리를 선언하거나 직접 수정하여 웹 보기에 사용자 지정을 적용할 수 있습니다. 자세한 내용은 클래스의 .h 파일 및 .m 파일을 확인하세요.
링크 처리 사용자 지정
ABKURLDelegate 프로토콜을 사용하여 딥링크, 웹 URL, 유니버설 링크 등의 URL 처리를 사용자 지정할 수 있습니다. 브레이즈 초기화 중에 델리게이트를 설정하려면 appboyOptions 의 ABKURLDelegateKey 에 델리게이트 객체를 전달합니다. startWithApiKey:inApplication:withAppboyOptions:. 그러면 Braze는 URI를 처리하기 전에 위임의 handleAppboyURL:fromChannel:withExtras: 구현을 호출합니다.
통합 예제: ABKURLDelegate
1
2
3
4
5
6
7
8
- (BOOL)handleAppboyURL:(NSURL *)url fromChannel:(ABKChannel)channel withExtras:(NSDictionary *)extras {
if ([[url.host lowercaseString] isEqualToString:@"MY-DOMAIN.com"]) {
// Custom handle link here
return YES;
}
// Let Braze handle links otherwise
return NO;
}
1
2
3
4
5
6
7
8
func handleAppboyURL(_ url: URL?, from channel: ABKChannel, withExtras extras: [AnyHashable : Any]?) -> Bool {
if (url.host == "MY-DOMAIN.com") {
// Custom handle link here
return true;
}
// Let Braze handle links otherwise
return false;
}
자세한 내용은 ABKURLDelegate.h를 참조하세요.
자주 사용하는 사용 사례
앱 설정에 대한 딥링킹
iOS는 앱에서 iOS 설정 애플리케이션의 해당 페이지로 사용자를 유도할 수 있습니다. UIApplicationOpenSettingsURLString 을 활용하여 푸시 알림 및 인앱 메시지에서 설정으로 사용자를 딥링킹할 수 있습니다.
- 먼저, 애플리케이션이 스키마 기반 딥링크 또는 유니버설 링크를 사용하도록 설정되어 있는지 확인합니다.
- 설정 페이지로 딥링킹할 URI를 결정합니다(예:
myapp://settings또는https://www.braze.com/settings). - 사용자 정의 구성표 기반 딥링크를 사용하는 경우
application:openURL:options:메서드에 다음 코드를 추가하세요:
1
2
3
4
5
6
7
8
9
10
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
NSString *path = [url path];
if ([path isEqualToString:@"settings"]) {
NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:settingsURL];
}
return YES;
}
1
2
3
4
5
6
7
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let path = url.path
if (path == "settings") {
UIApplication.shared.openURL(URL(string:UIApplicationOpenSettingsURLString)!)
}
return true
}
GitHub 에서 이 페이지를 편집합니다.