Skip to main content
페어리 UI를 통해 서비스를 이용하는 경우, 해당 프로젝트의 법적동의 사항이 페어리를 통해 관리됩니다.마케팅 수신동의를 얻은 사용자에게만 광고 알림이 수신되는 방식으로 동작합니다.

사전 준비

Getting Started > Setup 을 먼저 완료하세요.

시작하기

STEP 1) 페어리 제공 권한동의 페이지 이용하여 시작

  • launchUI 함수를 사용하여 권한 동의 페이지에 접속할 수 있습니다.
    • launchUI(config, redirectTo, callback)
  • redirectTo 파라미터로 /basic-sdk/consent 를 입력하여 권한 동의 페이지로 이동합니다.
// NOTE: userId를 설정하지 않으면 launchUI 실패
momentSdk.setUserId("...", object : MomentSDK.ResultCallback {
		override fun onSuccess() {
				momentSdk.launchUI(
						momentSdkConfig,
						"/basic-sdk/consent",
						object : MomentSDK.ResultCallback {
								override fun onSuccess() {}

								override fun onFailure(exception: MomentException) {}
            }
        )
    }
    
    override fun onFailure(exception: MomentException) {}
}

STEP 2) 직접 동의받아 서비스 시작하기

Step 2-1) 법적동의 사항 업데이트

사용자가 법적으로 필요한 동의가 완료된 상황이어야 관련된 알림을 받을 수 있습니다. 법적 동의를 직접 받으시고 아래 API를 이용하여 동의 내역을 업데이트해주세요 사용자 권한 동의 (Consent) API

Step 2-2) 필요 권한 동의 득하기

필요권한 1: 사용정보 접근

  • Moment SDK를 시작하기 위해서는 사용자에게 사용정보 접근 허용 권한을 요청해야 합니다. 아래 예시 코드를 통해 권한을 요청할 수 있습니다. (참고: 스타터 예시)
val appUsagePermissionLauncher =
  registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
      if (MomentSDK.isAppUsagePermissionGranted(requireContext()) {
	      // 권한 획득 성공
      } else {
	      // 권한 획득 실패
      }
  }
  
val intent = Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.data = Uri.fromParts("package", packageName, null)
appUsagePermissionLauncher.launch(intent)

필요권한 2: 알림 권한

Step 2-3) 서비스 시작

  • userId 설정 후 MomentSDK.start(config, callback)을 호출하면 인식 서비스를 시작할 수 있습니다. (참고: 스타터 예시)
// NOTE: userId를 설정하지 않으면 start 실패
momentSdk.setUserId("test-user-id", object : MomentSDK.ResultCallback {
		override fun onSuccess() {
				momentSdk.start(
						momentSdkConfig,
						object : MomentSDK.ResultCallback {
								override fun onSuccess() {}

								override fun onFailure(exception: MomentException) {}
            }
        )
    }
    
    override fun onFailure(exception: MomentException) {}
}

STEP 3) 서비스가 강제 종료되는 경우를 위해, 서비스 재시작 로직 추가

만약 사용자가 앱을 강제종료하게 되면 서비스는 어떻게 될까요? 앱과 함께 서비스도 같이 종료되게 됩니다. 이러한 경우, 사용자가 앱을 켰을 때 서비스 상태를 원래대로 복구할 수 있게, 앱 launch 시점에 아래와 같이 init를 호출해줘야 합니다. (1.3.0 version 보다 낮은 SDK에서는 restartIfNeeded를 호출해야 합니다.)
해당 call을 하였을 때 사용자 관점에서의 차이는 없고, 서비스를 계속적으로 동작하게 하기 위함입니다.
class MyApplication : Application() {
  override fun onCreate() {
      val moment = MomentSDK.getInstance(context)

      // NOTE: userId를 설정하지 않으면 init 실패
      moment.setUserId("user-id", object : MomentSDK.ResultCallback {
          override fun onSuccess() {
              moment.init(
                  config,
                  object : MomentSDK.RestartResultCallback {
                      override fun onSuccess(resultCode: MomentSDK.RestartResultCode) {
                          if (resultCode == MomentSDK.RestartResultCode.SERVICE_RESTARTED) {
                              // restart에 성공했습니다.
                          }
                      }

                      override fun onFailure(exception: MomentException) {
                          // restart에 실패했습니다.
                      }
                  }
              )
          }

          override fun onFailure(exception: MomentException) {}
      })
  }
}
  • restartIfNeeded(config, callback) (v.1.3.0 미만)
class MyApplication : Application() {
	override fun onCreate() {
		MomentSDK.getInstance(context).restartIfNeeded(
			config,
			object : MomentSDK.RestartResultCallback {
				override fun onSuccess(resultCode: MomentSDK.RestartResultCode) {
			    if (resultCode == MomentSDK.RestartResultCode.SERVICE_RESTARTED) {
				    // restart에 성공했습니다.
          }
        }

        override fun onFailure(exception: MomentException) {
				   // restart에 실패했습니다.
        }
    }
}

페어리 UI 동의페이지 변경 값 조회하기

  • 웹뷰가 종료된 시점을 브로캐스트로 수신 할 수 있습니다.
  • AndroidManifest.xml 파일에 receiver 를 추가합니다.
<application
	...>	
	<receiver
	  android:name="..."
	  android:enabled="true"
	  android:exported="false"
	>
	  <intent-filter>
	    <action android:name="ai.fairytech.moment.action.CASHBACK_PAGE_CLOSED" />
	  </intent-filter>
	</receiver>
</application>
  • 법적동의/권한설정 읽기
  • (추가 예정) 필수 법적동의 true 인 경우 성별/연령대 정보를 SDK로 전달하기
  • SDK Reference
class WebViewClosedReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action != "ai.fairytech.moment.action.CASHBACK_PAGE_CLOSED") return

        val moment = MomentSDK.getInstance(context.applicationContext)
        
        // 인식 서비스 실행 여부 - boolean
        val isRunning = moment.isRunning()
        
        // App Usage 권한 설정 여부 - boolean
        // 해당 권한이 없으면 인식 서비스를 실행 할 수 없습니다.
        val isAppUsagePermissionGranted = MomentSDK.isAppUsagePermissionGranted(context.applicationContext)
        
        // Notification 권한 설정 여부 - boolean
        // 해당 권한이 없으면 인식 서비스가 실행 중이어도 알림을 보낼 수 없습니다.
        val isNotificationPermissionGranted = MomentSDK.isNotificationPermissionGranted(context.applicationContext)

        val pendingResult = goAsync()
        moment.getConsent(object : MomentSDK.CallbackWithResult<GetUserConsentResponse> {
            override fun onSuccess(result: GetUserConsentResponse) {
                // result 처리
                // (가이드 추가 예정) 필수 법적동의 on 인 경우 성별/연령대 정보를 SDK로 전달하기
                pendingResult.finish()
            }

            override fun onFailure(exception: MomentException) {
                // exception 처리
                pendingResult.finish()
            }
        })
    }
}