tgyuuAn / BaekyoungE

์ž์—ฐ์–ด ์ฒ˜๋ฆฌ ๊ธฐ๋ฐ˜ ์ง„๋กœ ์ƒ๋‹ด chat bot ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜
5 stars 0 forks source link

Feature/#55 #56

Closed tgyuuAn closed 1 week ago

tgyuuAn commented 1 week ago

1. ๐Ÿ“„ ๊ด€๋ จ๋œ ์ด์Šˆ ๋ฐ ์†Œ๊ฐœ

2. ๐Ÿ”ฅ๋ณ€๊ฒฝ๋œ ์ 

3. ๐Ÿ“ธ ์Šคํฌ๋ฆฐ์ƒท(์„ ํƒ)

4. ๐Ÿ’ก์•Œ๊ฒŒ๋œ ํ˜น์€ ๊ถ๊ธˆํ•œ ์‚ฌํ•ญ๋“ค

์•Œ๋ฆผ ๊ถŒํ•œ ์„ค์ • ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋กœ์ง

startActivity(
    Intent(ACTION_APP_NOTIFICATION_SETTINGS)
        .putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
        .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK),
)

๋‚˜๋Š” ์˜ค๋ž˜์˜ค ์ด์ƒ์˜ ๋ฒ„์ „๋งŒ minSDK๋กœ ์„ค์ •ํ•ด์„œ ์ƒ๊ด€์—†์ง€๋งŒ,

๋” ์ด์ „์˜ ๋ฒ„์ „์„ ํ˜ธํ™˜ํ•˜๊ณ  ์‹ถ์œผ๋ฉด

fun presentNotificationSetting(context: Context) {
    val intent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        notificationSettingOreo(context)
    } else {
        notificationSettingOreoLess(context)
    }
    try {
        context.startActivity(intent)
    }catch (e: ActivityNotFoundException) {
        e.printStackTrace()
    }
}

@RequiresApi(Build.VERSION_CODES.O)
fun notificationSettingOreo(context: Context): Intent {
    return Intent().also { intent ->
        intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
        intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName)
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
    }
}

fun notificationSettingOreoLess(context: Context): Intent {
    return Intent().also { intent ->
        intent.action = "android.settings.APP_NOTIFICATION_SETTINGS"
        intent.putExtra("app_package", context.packageName)
        intent.putExtra("app_uid", context.applicationInfo?.uid)
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
    }
}

์ฒ˜๋Ÿผ ๋ถ„๊ธฐ๋ฅผ ๋‚˜๋ˆ ์ฃผ์–ด์•ผ ํ•จ.

๋ ˆํผ๋Ÿฐ์Šค




์ถ”๊ฐ€์ ์œผ๋กœ, ์•ˆ๋“œ๋กœ์ด๋“œ 13(ํ‹ฐ๋ผ๋ฏธ์ˆ˜) ์ด์ƒ ๋ถ€ํ„ฐ๋Š” ์•Œ๋ฆผ์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ์–ป์–ด์™€์•ผ ํ•จ!

    private val requestPermissionLauncher = registerForActivityResult(
        ActivityResultContracts.RequestPermission(),
    ) { isGranted: Boolean ->
        if (!isGranted) {
            showPermissionDeniedSnackbar = true
        }
    }

    private fun askNotificationPermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) !=
                PackageManager.PERMISSION_GRANTED
            ) {
                requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
            }
        }
    }




์Šค๋‚ต๋ฐ”์— Action ๋ฒ„ํŠผ ๋งŒ๋“ค๊ณ , Action ์„ค์ •ํ•˜๊ธฐ

if (showPermissionDeniedSnackbar) {
    coroutineScope.launch {
        val result = snackbarHostState.showSnackbar(
            message = "๋” ๋‚˜์€ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด ์•Œ๋ฆผ ๊ถŒํ•œ์„ ์„ค์ •ํ•ด ์ฃผ์„ธ์š”.",
            actionLabel = "์„ค์ •",
            duration = SnackbarDuration.Short,
        )

        if (result == SnackbarResult.ActionPerformed) {
            startActivity(
                Intent(ACTION_APP_NOTIFICATION_SETTINGS)
                    .putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
                    .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK),
            )
        }
    }
}

์Šค๋‚ต๋ฐ” ๋งŒ๋“ค ๋•Œ, actionLabel์„ค์ •ํ•˜๋ฉด ๋ฒ„ํŠผ์ด ์ƒ๊น€.

์ด ๋•Œ ํด๋ฆญํ•  ๋•Œ ์•ก์…˜์€ ํ•ด๋‹น showSnackBar ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ์˜ ๊ฒฐ๊ณผ๋ฅผ ์•„๋ž˜ if๋ฌธ ํ˜น์€ when์—์„œ ๋ถ„๊ธฐ๋กœ ๋‚˜๋ˆ ์ฃผ๋ฉด ๋œ๋‹ค.

๋ ˆํผ๋Ÿฐ์Šค




์•„๋‹ˆ Notification Icon์ด ์ž๊พธ ์ž‘๊ฒŒ ๋‚˜์˜ค๋Š”๋ฐ์š”?

image

๋ ˆํผ๋Ÿฐ์Šค

...

์•ˆ๋“œ๋กœ์ด๋“œ 5.0(๋กค๋ฆฌํŒ) ๋ถ€ํ„ฐ ๊ณต์‹์ ์œผ๋กœ ์œ ์ฑ„์ƒ‰ ์•Œ๋ฆผ ์•„์ด์ฝ˜์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ๊ธฐ์ข…์— ๋”ฐ๋ผ ์œ ์ฑ„์ƒ‰์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋‚˜, ์ตœ์‹  ๊ธฐ๊ธฐ์ผ์ˆ˜๋ก ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ญ…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์•ฑ ์•Œ๋ฆผ ์•„์ด์ฝ˜์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜์‹ค ๋• ๋ฐฐ๊ฒฝ์ด ํˆฌ๋ช…์ด๋ฉฐ ํฐ์ƒ‰์œผ๋กœ ๋œ ์•„์ด์ฝ˜์„ ์˜ฌ๋ ค ์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํˆฌ๋ช… ๋ฐฐ๊ฒฝ์— ํฐ์ƒ‰ ์•„์ด์ฝ˜์„ ์‚ฌ์šฉํ•˜๊ณ , ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ƒ‰์ƒ์„ ์ง€์ •ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค..




Firebase Cloud Functions ์€ Node.js ์ฝ”๋“œ์ธ๋ฐ ์–ด๋–ป๊ฒŒ ์งœ์…จ์–ด์š” ?

-> Chat GPT 4.0 ๊ณผ ํ•จ๊ป˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

image




ES Lint์—์„œ ๊ณ„์† ๊ฑธ๋ฆฌ๋Š”๋ฐ์š”?

package.json ํŒŒ์ผ ์—์„œ,

Easy fix. Inside your package.json change

"lint": "eslint ." ๋ฅผ "lint": "eslint", ๋กœ ๋ฐ”๊ฟ”์„œ ํ•ด๊ฒฐํ•ด์ฃผ๋ฉด ๋.

๋ ˆํผ๋Ÿฐ์Šค




image

์„ฑ๊ณต!!!!!!

jeongjaino commented 1 week ago

@tgyuuAn ๋”ฐ๋ด‰~ ๋”ฐ๋ด‰ ~ ์Ž„๋ด‰~ (์ œ๊ฐ€ ๊ฐ€๋Š” ๋ฏธ์šฉ์‹ค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.)

tgyuuAn commented 1 week ago

@tgyuuAn ๋”ฐ๋ด‰~ ๋”ฐ๋ด‰ ~ ์Ž„๋ด‰~ (์ œ๊ฐ€ ๊ฐ€๋Š” ๋ฏธ์šฉ์‹ค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.)

์ €๋Š” ๋ฒ„๋ฅด์žฅ๋จธ๋ฆฌ ๋ฏธ์šฉ์‹ค ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค~