Leo
[Branch] App Link (2) 본문
이번엔 Flutter Branch 설정 방법을 간단하게 적어보겠다.
Branch Flutter SDK
[iOS 설정]
1. Branch 설정
- 왼쪽 상단 LIVE <-> TEST mode 선택
- CONFIGURE > Configuration > GENERAL 선택
- Store에 App이 등록된 경우 선택 후, 사용자 클릭 event 경로를 설정한다.
- 앱 설치: URI Scheme 지정
- 앱 미설치: App Store 경로 지정 or Custom URI 지정
- *아직 배포 전인 App은 상단 default URI 경로로 이동한다.
- Enable Universal Links 설정
- Bundle Identifiers 등록
- App Prefix 등록
2. Xcode 설정
- Associated Domains 추가
- Runner > Signing&Capabilities > +Capability 선택
- Branch > Configuration 하단으로 내리면 Link Domain 탭이 있다.
- Default Link와 Alterante Link 주소를 Associated Domains에 applinks: 형식으로 추가한다.
- info.plist 설정 추가
- info - URL Types
- Identifier > io.Branch.Branchsters 추가
- URL Schemes > branchsters 추가
- branch_key 등록 (key는 항상 노출 금지!)
- info - URL Types
3. Project > AppDelegate.swift 설정
- project > ios > runner > AppDelegate.swift 에 아래 코드를 추가한다.
- 해당 코드들은 Branch Link를 통해 들어오는 URL을 받아주는 부분이라고 하는데, 해당 설정을 하면 카카오 로그인에 대한 event도 branch를 통해 들어와서 로그인이 불가능한 오류를 마주했다. 들어오는 URL이 카카오인 경우 event에 적용되지 않게 해보려고 했지만, 특정 URL을 걸러내지 못했다. 결국 1번 항목을 주석 처리하고 수신 테스트를 한 결과 문제가 없어서 일단은 주석을 한 상태로 진행하고 있다. 이 부분은 추후 조금 더 테스트를 해봐야 할 것 같다.
import BranchSDK
import Flutter
import UIKit
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
setupBranchSDK(launchOptions: launchOptions)
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
}
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
/// 1.추가
override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
Branch.getInstance().application(app, open: url, options: options)
return true
}
/// 2.추가
override func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
Branch.getInstance().continue(userActivity)
return true
}
/// 3.추가
override func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
Branch.getInstance().handlePushNotification(userInfo)
}
// Branch Settings
private func setupBranchSDK(launchOptions: [UIApplication.LaunchOptionsKey: Any]?) {
#if DEBUG
Branch.setUseTestBranchKey(true)
#endif
Branch.getInstance().initSession(launchOptions: launchOptions) { params, _ in
print(params as? [String: AnyObject] ?? {})
// Access and use Branch Deep Link data here (nav to page, display content, etc.)
}
}
}
[Android 설정]
1. AndroidManifest.xml 추가
- 공식문서에 나와있는 코드 중 아래 <intent-filter>가 이미 존재하면 삭제하기
- 중복으로 선언되어 있을 경우, 앱 빌드 시 2개가 생성되는 오류가 발생한다. 처음 설정 할 때 이 부분을 놓쳤다.
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
- Branch Dashboard에 나와있는 live, test domain 과 app key를 등록한다.
<!-- Launcher Activity to handle incoming Branch intents -->
<activity
android:name=".LauncherActivity"
android:label="@string/app_name" //strings.xml 파일있는지 확인
android:launchMode="singleTask"
android:exported="true">
<!-- Branch URI Scheme -->
<intent-filter>
<!-- If utilizing $deeplink_path please explicitly declare your hosts, or utilize a wildcard(*) -->
<!-- REPLACE `android:scheme` with your Android URI scheme -->
<data android:scheme="vukajobs" android:host="open" /> // android:scheme 패키지명으로 수정
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
<!-- Branch App Links - Live App -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- REPLACE `android:host` with your `app.link` domain -->
<data android:scheme="https" android:host="your.app.link" /> // Live 링크
<!-- REPLACE `android:host` with your `-alternate` domain (required for proper functioning of App Links and Deepviews) -->
<data android:scheme="https" android:host="your-alternate.app.link" />
</intent-filter>
<!-- Branch App Links - Test App -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="your.test-app.link" /> // Test 링크
<!-- REPLACE `android:host` with your `-alternate` domain (required for proper functioning of App Links and Deepviews) -->
<data android:scheme="https" android:host="your-alternate.test-app.link" />
</intent-filter>
</activity>
<!-- Branch init -->
<!-- REPLACE `BranchKey` with the value from your Branch Dashboard -->
<meta-data android:name="io.branch.sdk.BranchKey" android:value="${branchLiveKey}" /> //live key 등록
<!-- REPLACE `BranchKey.test` with the value from your Branch Dashboard -->
<meta-data android:name="io.branch.sdk.BranchKey.test" android:value="${branchTKey}" /> //test key 등록
<!-- Set to `true` to use `BranchKey.test` -->
<meta-data android:name="io.branch.sdk.TestMode" android:value="false" />
2. proguardrules.pro 추가
-keep class com.google.android.gms.** { *; }
여기까지 하면 기본적인 Branch 설정이 끝난다.
다음에는 발신과 수신 그리고 Dashboard 사용에 대한 전체적인 사용법을 코드를 통해 자세히 알아보겠다.
'개발 정리 > Flutter' 카테고리의 다른 글
[Branch] App Link (1) (0) | 2024.11.16 |
---|---|
In App Purchase (4) (0) | 2024.11.15 |
In App Purchase (3) (2) | 2024.11.14 |
In App Purchase (2) (1) | 2024.11.13 |
In App Purchase (1) (10) | 2024.11.13 |