BuzzScreen Migration SDK μ°λ
Introduction
λ°λμ λ²μ¦λΉ BD νκ³Ό νμ ν μ§νν΄μΌ νλ©°, κ°μ΄λλ₯Ό λ°μν Mμ±κ³Ό Lμ±μ APK νμΌμ λ§μΌμ μ λ‘λνκΈ° μ μ λ²μ¦λΉ BD νμ μ λ¬νμ¬ λ°λμ 리뷰λ₯Ό κ±°μ³μΌ ν©λλ€.
κ΅¬κΈ μ μ± λμμ μν΄, κΈ°μ‘΄ λ²μ¦μ€ν¬λ¦°μ μ°λν μ΄ν리μΌμ΄μ μ μ κΈνλ©΄μ μλ‘μ΄ μ κΈνλ©΄ μ μ© μ΄ν리μΌμ΄μ μ μ κΈνλ©΄μΌλ‘ λ§μ΄κ·Έλ μ΄μ νκΈ° μν κ°μ΄λμ λλ€. μλμ μ¬νμ μμ§ν ν μ°λμ μ§νν΄μ£ΌμΈμ.
μ©μ΄ μ μ
μ΄ν κΈ°μ‘΄ λ²μ¦μ€ν¬λ¦°μ μ°λν μ΄ν리μΌμ΄μ μ βM(Main) μ±βμΌλ‘ μ§μΉνκ³ ,
μλ‘μ΄ μ κΈνλ©΄ μ μ© μ΄ν리μΌμ΄μ μ βL(LockScreen) μ±βμΌλ‘ μ§μΉν©λλ€.
μμ½: μ΄ SDK μ μ°λμμ μ ν΅ν΄, Mμ±μ λ²μ¦μ€ν¬λ¦° μ¬μ©μλ₯Ό Lμ±μ λ²μ¦μ€ν¬λ¦° μ¬μ©μλ‘ μμ°μ€λ½κ² & μ΅μνμ μ°λ μ½μ€νΈλ‘ μ ν κ°λ₯ν©λλ€.
μ¬μ© μν©: Lμ± λ΄μ μ체 λ‘κ·ΈμΈ κΈ°λ₯ ꡬνμ΄ μ΄λ ΅κ±°λ / Mμ±μ λ‘κ·ΈμΈ κ΄λ¦¬λ₯Ό κ·Έλλ‘ Lμ±μμ μ¬μ©νκ³ μΆμ κ²½μ°
νμν μ μ μ 보(μ μ μμ΄λ, λμ΄, μ±λ³ λ±) λ° μ κΈνλ©΄ νμ±ν λμ μ¬λΆλ₯Ό Mμ±μμ μμ§νμ¬ Lμ±μΌλ‘ κ°μ Έμ¬ μ μλλ‘ SDKμμ μ§μν©λλ€. λ°λΌμ Lμ±μ μ체 λ‘κ·ΈμΈ μμ€ν μ΄ λΆνμν©λλ€.
보μ: λ€λ₯Έ μ±μμμ μ κ·Όμ λ§κΈ° μν΄ μλλ‘μ΄λμ
protectionLevel="signature"
κΆνμ μ¬μ©ν©λλ€.μ°Έκ³ : Lμ±μ μ€μΉ (APK νμΌ λ€μ΄λ‘λ & μ€μΉ) λ μ μ μ μ‘μ μμ΄ μ§νν μ μκΈ°μ μλνκ° λΆκ°λ₯ν©λλ€.
Migration SDK Workflow
Β
Mμ± λ§μ΄κ·Έλ μ΄μ ꡬν
Basic Usage
λ²μ¦μ€ν¬λ¦° μ°λμ νμν μ μ νλ‘ν μ 보λ κΈ°μ‘΄μ²λΌ Mμ±μμ μμ§νκ³ , λ§μ΄κ·Έλ μ΄μ SDKλ₯Ό ν΅ν΄ Lμ±μΌλ‘ μλμΌλ‘ μ λ¬λ©λλ€.
Mμ±μ λ§μ΄κ·Έλ μ΄μ μ΄νμλ Lμ±μμ μ κΈνλ©΄ νμ±νμ νμν μ 보λ€μ μ 곡ν΄μ£Όλ μν μ ν©λλ€.
Lμ±μ νμ μ€ν μμ Mμ±μ μνλ₯Ό 체ν¬νμ¬ Lμ±μ μ κΈνλ©΄ νμ±ν κ°λ₯ μ¬λΆλ₯Ό νλ¨ν©λλ€.
1. build.gradle
μ€μ
1) manifestPlaceholders
μΆκ°
android {
defaultConfig {
// my_app_key μλ λ²μ¦μ€ν¬λ¦° μ°λ μ λ°κΈλ°μ μ±ν€λ₯Ό μ
λ ₯ν©λλ€.
manifestPlaceholders = [buzzScreenAppKey:"my_app_key"]
}
}
2) dependencies
μ μΆκ°
Mμ±μ μν λ§μ΄κ·Έλ μ΄μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μΆκ°νκ³ , BuzzScreen SDK λ²μ 1.6.3 μ΄μμΌλ‘ μ λ°μ΄νΈν΄μΌ ν©λλ€.
κΈ°μ‘΄ λ²μ¦μ€ν¬λ¦° μ°λ
Mμ±μ μν λ§μ΄κ·Έλ μ΄μ λΌμ΄λΈλ¬λ¦¬
repositories {
maven { url "https://dl.buzzvil.com/public/maven" }
}
...
dependencies {
// λΌμ΄λΈλ¬λ¦¬λͺ
μ΄ Lμ±κ³Ό λ€λ¦μ μ£Όμ!
implementation 'com.buzzvil.buzzscreen.ext:migration-host:1.4.0'
// (optional) migration SDKμμ μ 곡νλ μνΈνλ₯Ό μ¬μ©νλ κ²½μ°, μλμ libraryλ₯Ό μΆκ°ν΄ μ£Όμ΄μΌ ν©λλ€.
// implementation 'com.github.joshjdevl.libsodiumjni:libsodium-jni-aar:1.0.8'
}
Β
2. Application Class μ μ½λ μΆκ°
κΈ°μ‘΄ λ²μ¦μ€ν¬λ¦° μ°λμ μν΄ μΆκ°ν BuzzScreen.init
λ€μμ MigrationHost.init
μ νΈμΆν©λλ€.
MigrationHost.init(Context context, String lockScreenPackageName)
: λ§μ΄κ·Έλ μ΄μ μ μν Mμ±μ μ΄κΈ°ν μ½λParameters
context
: Application context λ₯Ό this λ‘ μ λ¬lockScreenPackageName
: Lμ±μ ν¨ν€μ§λͺ
μ¬μ© μμ
public class App extends Application { @Override public void onCreate() { super.onCreate(); // κΈ°μ‘΄ λ²μ¦μ€ν¬λ¦° μ΄κΈ°ν μ½λ. BuzzScreen.init("app_key", this, SimpleLockerActivity.class, R.drawable.image_on_fail); // λ§μ΄κ·Έλ μ΄μ μ μν μ΄κΈ°ν // Lμ±μ ν¨ν€μ§λͺ μ΄ com.buzzvil.buzzscreen.sample_lock_light μΈ κ²½μ° μ¬μ© μμ MigrationHost.init(this, "com.buzzvil.buzzscreen.sample_lock_light"); // Lμ±μμ λ²μ¦μ€ν¬λ¦°μ΄ νμ±νλμ΄ Mμ±μμ μ κΈνλ©΄μ΄ λΉνμ±ν λλ κ²½μ° νΈμΆλλ 리μ€λ λ±λ‘ μμ MigrationHost.setOnDeactivatedByLockScreenAppListener(new MigrationHost.OnDeactivatedByLockScreenAppListener() { @Override public void onDeactivated() { Log.i("MainApp", "LockScreen is deactivated by LockScreen App"); } }); } }
3. μ κΈνλ©΄ νμ±ν νλ©΄ λ³κ²½
Lμ±μ Mμ±μ μ μ μ λ³΄λ‘ μ κΈνλ©΄μ νμ±ν ν λΏ μ§μ μ μ μκ² μ 보λ λμλ₯Ό λ°λ κ³Όμ μ΄ μμ΅λλ€. μ΄ λλ¬Έμ Lμ±μμλ Mμ±μ μ κΈνλ©΄ νμ±ν νλ©΄ (μ μ νλ‘ν, μ¬μ©λμ, νμ±ν/λΉνμ±ν μ€μ νλ©΄) μ λ³κ²½νμ¬ μ¬μ©νκ² λ©λλ€.
νλͺ© | μ½λ | λ΄μ© | |
---|---|---|---|
1 | Mμ±μ μ κΈνλ©΄ νμ±ν νλ©΄μΌλ‘ μ΄λνλ λ₯λ§ν¬ μ€μ | - |
|
2 | Lμ±μ ν΅ν΄ μ κΈνλ©΄ νμ±ν |
| μ± λ΄μ μ κΈνλ©΄ νμ±ν νλ©΄μμ νμ±ν/λΉνμ±νλ₯Ό μ€μ νλ μ€μμΉλ₯Ό λ°°λ ννλ‘ λ³κ²½ν©λλ€. ν΄λΉ λ°°λ ν΄λ¦ μ, νΉμ μ κΈνλ©΄ μ¬μ© λμλ₯Ό λ°κ³ μ κΈνλ©΄μ νμ±ν νλ κ³³ (κΈ°μ‘΄
|
Lμ± μ κΈνλ©΄ νμ±ν κ³Όμ
Β
4. λ‘κ·Έμμ μ²λ¦¬
Mμ±μμ λ‘κ·Έμμμ΄ μΌμ΄λλ κ²½μ° μλ λ ν¨μλ₯Ό νΈμΆν©λλ€.
Lμ±μμμ μ κΈνλ©΄μ λΉνμ±ννκ³ , λ€μ νμ±ν μμ Lμ±μμ μλ‘μ΄ μ μ μ 보λ₯Ό Mμ±μΌλ‘λΆν° μ 곡λ°κΈ° μν¨μ
λλ€.
BuzzScreen.getInstance().logout()
: Mμ±μμ μ κΈνλ©΄μ λΉνμ±ννκ³ , μ μ μ 보λ₯Ό μ΄κΈ°νν©λλ€.MigrationHost.requestDeactivation()
: Lμ±μμ μ κΈνλ©΄μ΄ νμ±νλμ΄ μλ κ²½μ° ν΄λΉ μ κΈνλ©΄μ λΉνμ±νν©λλ€.
+. λ²μ¦μ€ν¬λ¦° νμ±ν/λΉνμ±ν κ΄λ ¨ μ½λ μ κ±° status:μ ν
Mμ±μμ Lμ±μΌλ‘μ λ§μ΄κ·Έλ μ΄μ
μ΄ν Mμ±μ μ κΈνλ©΄μ μ§μνμ§ μμ κ²½μ°, μ κΈνλ©΄ νμ±ν/λΉνμ±νλ₯Ό μν΄ μ½μ
νλ BuzzScreen.getInstance().activate()
, BuzzScreen.getInstance().deactivate()
μ½λλ₯Ό λͺ¨λ μ κ±°ν©λλ€.
Β
Advanced Usage
κ·Έ μΈ μ μ©ν ν¨μλ€
νλͺ© | μ½λ | λ΄μ© |
---|---|---|
Lμ±μ μ κΈνλ©΄ νμ±ν μ¬λΆ νμΈ |
|
|
Mμ±μμ λ³κ²½λ μ μ μμ΄λλ₯Ό Lμ±μ λκΈ°ν |
| κΈ°μ‘΄ Mμ±μμ μ£ΌκΈ°μ μΌλ‘ μ μ μμ΄λκ° λ³κ²½λλ κ²½μ°μλ,
μ΄ ν¨μλ₯Ό νΈμΆνμ§ μμΌλ©΄ Lμ±μμλ λ€μ |
컀μ€ν λ§μΌ λ§ν¬ μ€μ |
|
|
Lμ±μ μ€ν μμ΄ Lμ±μ μ κΈνλ©΄ νμ±ν |
Mμ±μ | μ κΈνλ©΄μ νμ±ν ν λλ Mμ±μμ μ€μ λ μ μ μ 보λ₯Ό μ¬μ©νκ² λ©λλ€.
|
Β
Β
Lμ± λ§μ΄κ·Έλ μ΄μ ꡬν
νλͺ© | λ΄μ© | |
---|---|---|
1 | μ μ μ 보 μ€μ λ° μ¬μ© λμ |
|
2 | νμ±ν/λΉνμ±ν |
|
3 | Lμ± κ΅¬ν |
|
Basic Usage
1. build.gradle
μ€μ
1) manifestPlaceholders
μΆκ°
android {
defaultConfig {
// my_app_key μλ λ²μ¦μ€ν¬λ¦° μ°λ μ λ°κΈλ°μ μ±ν€λ₯Ό μ
λ ₯ν©λλ€.
manifestPlaceholders = [buzzScreenAppKey:"my_app_key"]
}
}
2) dependencies
μΆκ°
Lμ±μ μν λ§μ΄κ·Έλ μ΄μ λΌμ΄λΈλ¬λ¦¬λΏλ§ μλλΌ λ²μ¦μ€ν¬λ¦° λΌμ΄λΈλ¬λ¦¬λ μΆκ°ν©λλ€. BuzzScreen SDK 1.6.3 λ²μ μ΄μμ΄ νμν©λλ€.
λ²μ¦μ€ν¬λ¦° μ°λ
Lμ±μ μν λ§μ΄κ·Έλ μ΄μ λΌμ΄λΈλ¬λ¦¬
repositories {
maven { url "https://dl.buzzvil.com/public/maven" }
}
...
dependencies {
// migration-host μ λ²μ μ΄ λ°λμ μΌμΉν΄μΌ ν©λλ€.
implementation 'com.buzzvil.buzzscreen.ext:migration-client:1.4.0'
// (optional) migration SDKμμ μ 곡νλ μνΈνλ₯Ό μ¬μ©νλ κ²½μ°, μλμ libraryλ₯Ό μΆκ°ν΄ μ£Όμ΄μΌ ν©λλ€.
// implementation 'com.github.joshjdevl.libsodiumjni:libsodium-jni-aar:1.0.8'
}
2. AndroidManifest.xml
λ³κ²½
λ²μ¦μ€ν¬λ¦° μ°λμ μν΄ app_license
λ μλ‘ λ°κΈ λ°μ Lμ±μ μ μ©ν΄μΌ ν©λλ€. λ²μ¦λΉ BD 맀λμ μκ² λ¬Έμν΄μ£ΌμΈμ.
<manifest>
<application>
...
<!-- Configuration for BuzzScreen-->
<!-- <app_license> λ₯Ό κΈ°μ‘΄ Mμ±κ³Ό λ€λ₯Έ μλ‘μ΄ κ°μΌλ‘ κ΅μ²΄ν©λλ€. -->
<meta-data
android:name="app_license"
android:value="<app_license>" />
<!-- BuzzScreen SDK 1.9.0.7 μ΄μ μ¬μ© μ μλ plist κ΄λ ¨ μ½λλ λΆνμ -->
<!-- <plist> λ₯Ό κΈ°μ‘΄ Mμ±κ³Ό λ€λ₯Έ μλ‘μ΄ κ°μΌλ‘ κ΅μ²΄ν©λλ€. -->
<meta-data
android:name="com.buzzvil.locker.mediation.baidu.plist"
android:value="<plist>" />
</application>
</manifest>
Β
3. Application Class μ μ½λ μΆκ°
λ²μ¦μ€ν¬λ¦° μ°λμ μν BuzzScreen.init
μ λ§μ΄κ·Έλ μ΄μ
μ°λμ μν MigrationClient.init
λ₯Ό μμλλ‘ νΈμΆν©λλ€.
νλͺ© | μ½λ & νΈμΆ μμΉ | μΈλΆλ΄μ© |
---|---|---|
λ§μ΄κ·Έλ μ΄μ μ μν Lμ±μ μ΄κΈ°ν μ½λ status:νμ |
λ²μ¦μ€ν¬λ¦° μ°λμ μν | Parameters
|
Lμ±μμμ μ κΈνλ©΄μ΄ λΉνμ±νλλ κ²½μ°μ 리μ€λ λ±λ‘ status:νμ |
| νΈμΆλλ κ²½μ°
Parameters
|
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
// κΈ°μ‘΄ λ²μ¦μ€ν¬λ¦° μ΄κΈ°ν μ½λ.
BuzzScreen.init("app_key", this, SimpleLockerActivity.class, R.drawable.image_on_fail);
// λ§μ΄κ·Έλ μ΄μ
μ μν μ½λ
// Mμ±μ ν¨ν€μ§λͺ
μ΄ com.buzzvil.buzzscreen.sample_main_light μΈ κ²½μ° μ¬μ© μμ
MigrationClient.init(this, "com.buzzvil.buzzscreen.sample_main_light");
// Mμ±μ μν΄ Lμ±μμμ μ κΈνλ©΄μ΄ λΉνμ±νλλ κ²½μ° νΈμΆλλ 리μ€λλ₯Ό λ±λ‘ μμ
MigrationClient.setOnDeactivatedByMainAppListener(new MigrationClient.OnDeactivatedByMainAppListener() {
@Override
public void onDeactivated() {
Toast.makeText(App.this, "Main Appμ μνκ° λ³κ²½(μ± μμ , λ‘κ·Έμμ, νν΄ λ±)λμ΄ μ κΈνλ©΄μ λΉνμ±νν©λλ€.", Toast.LENGTH_LONG).show();
}
});
}
}
4. μ κΈνλ©΄ νμ±νμ λ§μ΄κ·Έλ μ΄μ
Lμ±μμμ μ κΈνλ©΄ νμ±νλ 1) Mμ±μμ μ 보 κ°μ Έμ€κΈ° β 2) λ²μ¦μ€ν¬λ¦° νμ±ν κ³Όμ μΌλ‘ μ§νλ©λλ€.
Lμ±μ΄ μ€νλ λ μ΄ κ³Όμ μ΄ μ§νλλ©΄μ λ§μ΄κ·Έλ μ΄μ μ΄ λκ³ , μ΄νμλ Mμ±μ μ 보λ₯Ό ν΅ν΄ Lμ±μ μ κΈνλ©΄μ νμ±νμν€κ² λ©λλ€.
Lμ±μ μ κΈνλ©΄μ΄ νμ±νλλ©΄ μλμΌλ‘ Mμ±μ μ κΈνλ©΄μ΄ λΉνμ±ν λ©λλ€.
λ²μ¦μ€ν¬λ¦° νμ±ν κ³Όμ μμλ κΈ°μ‘΄ λ²μ¦μ€ν¬λ¦° μ°λμ²λΌ BuzzScreen.getInstance().launch()
μBuzzScreen.getInstance().activate()
λ₯Ό κ·Έλλ‘ μ¬μ©ν©λλ€. (κΈ°λ³Έ μ€μ μ°Έκ³ )
Mμ±μ μ 보λ₯Ό κ°μ Έμ€κΈ° μν΄ MigrationClient
μμ λ€μ ν¨μλ₯Ό μ 곡ν©λλ€.
checkAvailability(OnCheckAvailabilityListener listener, boolean encrypt)
νΈμΆ μμΉ: Lμ± μ§μ νλ©΄μ
onResume
μμ νΈμΆνμ¬ Lμ± μ§μ μ νμ μνλλλ‘ ν©λλ€.λΉλκΈ°λ‘ Mμ±μμ λ²μ¦μ€ν¬λ¦° νμ±νμ νμν μ 보λ€μ κ°μ Έμ€κ³ , Mμ±μ μνμ λ°λΌ μλμΌλ‘ μ κΈνλ©΄μ νμ±νν©λλ€.
μλμΌλ‘ μ κΈνλ©΄ νμ±ν λλ 쑰건
Mμ±μμ μ κΈνλ©΄μ μ¬μ© μ€μΈ κ²½μ°
MigrationHost.requestActivationWithLaunch()
λ₯Ό νΈμΆνμ¬ Lμ±μ μ€νν κ²½μ°
νλΌλ―Έν° | 리μ€ν°μ€ | μΈλΆλ΄μ© | |
---|---|---|---|
|
|
|
|
|
| Mμ±μ΄ μ€μΉλμ§ μμ κ²½μ° β Mμ±μ μ€μΉλ₯Ό μ λ | |
| Mμ±μ΄ λ§μ΄κ·Έλ μ΄μ μ μ§μνμ§ μλ λ²μ β Mμ±μ μ λ°μ΄νΈλ₯Ό μ λ | ||
| λ²μ¦μ€ν¬λ¦°μ νμ±ννλλ° νμν μ λ³΄κ° μΆ©λΆνμ§ μμ κ²½μ° β Mμ±μ μ κΈνλ©΄ νμ±ν νμ΄μ§λ‘ μ΄λ | ||
| μλͺ»λ μ°λ νΉμ μΌμμ μΈ μλ¬λ‘ λ°μ
migration-client 1.0.1 μ΄μ λ²μ μ¬μ©μμλ | ||
| - |
v1.0.2.0 μ΄μμμ μ¬μ© κ°λ₯ |
checkAvailability Error Flow
Β
Advanced Usage
Mμ±κ³Ό Lμ± κ°μ ν΅μ μ νΈ
λ§μ΄κ·Έλ μ΄μ
SDKμμ μ 곡νλ κΈ°λ₯ μ΄μΈμλ Mμ±κ³Ό Lμ± κ°μ ν΅μ μ΄ νμνλ€λ©΄ μ¬κΈ°μ μ 곡νλ ν΅μ λͺ¨λμ μ¬μ©νμ¬ κ°λ°ν μ μμ΅λλ€. μμΈν λ΄μ©μ ν΅μ μ νΈλ¦¬ν°archived λ¬Έμλ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ.
Appendix
κ°λ¨ν λ°©λ²μΌλ‘ Lμ± λΉλνκΈ°
sample_lock_light
μμ νμΈν μ μλ μν μ κΈνλ©΄ μ±μ μ κ°μ΄λμ ꡬνμ λ΄μμ λΏλ§ μλλΌ μ΅μνμ κΈ°λ₯λ ꡬνλμ΄μμ΅λλ€. λ°λΌμ sample_lock_light
μ λ€μ΄λ°κ³ λ€μ κ³Όμ λ§ μ§νν΄λ μ κΈνλ©΄ μ±μ΄ μμ±λ©λλ€.
κΈ°λ₯ ꡬν
build.gradle
λ³κ²½ :my_app_key
λ κΈ°μ‘΄μ λ°κΈλ°μλ λ²μ¦μ€ν¬λ¦° μ±ν€λ‘ λ³κ²½νκ³ ,applicationId
λ μλ‘κ² λ§λλ μ κΈνλ©΄ μ±μ ν¨ν€μ§λͺ μΌλ‘ λ³κ²½ν©λλ€.BuzzScreen.init()
μμ μ¬μ©λλappKey
λ₯Ό μ κ· κ°μΌλ‘ λ³κ²½ν©λλ€.AndroidManifest.xml
λ³κ²½ :<app_license>
λ₯Ό μλ‘κ² λ°κΈλ°μ κ°μΌλ‘ λ³κ²½ν©λλ€.Mμ± μ κΈνλ©΄ νμ±ν νμ΄μ§ λ₯λ§ν¬ μ€μ :
App.java
νμΌ λ΄μDEEP_LINK_ONBOARDING
λ₯Ό Mμ± μ κΈνλ©΄ νμ±ν νλ©΄ λ₯λ§ν¬λ‘ μ€μ ν©λλ€.
λμμΈ λ³κ²½
μμ΄μ½ :
ic_launcher.png
λ³κ²½μμ :
res/colors.xml
λ³κ²½λ§μΌλ‘ λ©μΈ μμ μ μ© κ°λ₯λ‘κ³ :
activity_main.xml
μμ ν΄λ°μ λ‘κ³ λ³κ²½
μ΄ μΈμ μ κΈνλ©΄ UI λ° κΈ°λ₯ 컀μ€ν μ κ³ κΈ μ€μ λ¬Έμλ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ.
μνμ±μ λν΄ κΆκΈν μ¬νμ΄λ μ§μμ΄ νμνλ€λ©΄ μΈμ λ μ§ λ²μ¦λΉμ λ¬Έμμ£ΌμΈμ.
λ²μ¦λΉ κΈ°μ μ§μν λ©μΌ: tech-support@buzzvil.com