앱 공통 계층 — 데이터 저장소 · 서버 시계 · 푸시 · 결제·광고 · 다국어 5종 · 행성 표현 · 공통 UI · 화면 자산
This commit is contained in:
@@ -1,4 +1,14 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- 만보기 퀘스트(S-H-WALK). Android 10(API 29)부터 런타임 권한이고 minSdk 가 29 라
|
||||
분기 없이 항상 요청한다. 거부하면 인증만 막히고 목록·상세는 그대로 열린다. -->
|
||||
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
|
||||
|
||||
<!-- 위치 퀘스트(S-H-PLACE). 별첨 B **B-27** 「탐색은 가능하나 보상 인증은
|
||||
GPS/Geofence 필수」 — 상시 추적이 아니라 인증 시점에만 쓴다(v1.6.1 13장).
|
||||
그래서 ACCESS_BACKGROUND_LOCATION 은 요청하지 않는다. -->
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
|
||||
<application
|
||||
android:label="FANUZU"
|
||||
android:name="${applicationName}"
|
||||
@@ -38,6 +48,23 @@
|
||||
<data android:path="callback" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<!-- AdMob 앱 ID — Google 공식 **테스트** 앱 ID(9주차 샌드박스). 발주사 AdMob 계정의
|
||||
실 앱 ID 로 바꿀 때 lib/core/monetization/rewarded_ad.dart 의 AdUnits 광고 단위도 함께 바꾼다. -->
|
||||
<meta-data
|
||||
android:name="com.google.android.gms.ads.APPLICATION_ID"
|
||||
android:value="ca-app-pub-3940256099942544~3347511713" />
|
||||
<!-- FCM 알림 표시 기본값 — Android 가 유일한 실동작 플랫폼이다(iOS 는 APNs 키
|
||||
대기). 둘 다 없으면 백그라운드 알림이 「Miscellaneous」 채널로 흘러가고
|
||||
흰 사각형 아이콘으로 뜬다. 사용자가 채널을 끄면 5개 구분 설정과 무관하게
|
||||
전부 막히므로, 정책 원장 B-77 의 구분 설정이 유일한 제어면이 되도록
|
||||
앱이 채널을 직접 만든다(MainActivity.kt). -->
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||
android:value="@string/default_notification_channel_id" />
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_icon"
|
||||
android:resource="@mipmap/ic_launcher" />
|
||||
|
||||
<!-- Don't delete the meta-data below.
|
||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
||||
<meta-data
|
||||
|
||||
@@ -1,5 +1,31 @@
|
||||
package kr.co.fanuzu.app
|
||||
|
||||
import android.app.NotificationChannel
|
||||
import android.app.NotificationManager
|
||||
import android.os.Bundle
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
|
||||
class MainActivity : FlutterActivity()
|
||||
class MainActivity : FlutterActivity() {
|
||||
/**
|
||||
* FCM 기본 알림 채널을 만든다.
|
||||
*
|
||||
* AndroidManifest 의 `default_notification_channel_id` 는 **가리키기만 한다.**
|
||||
* 채널을 만들지 않으면 Android 가 「Miscellaneous」로 대체하고, 사용자는 그
|
||||
* 채널을 끄는 것 말고 조절할 수 없다. 정책 원장 B-77 의 5개 구분이 유일한
|
||||
* 제어면이어야 하므로 채널을 하나만 두고 구분은 토픽 구독으로 가른다.
|
||||
*
|
||||
* 채널 생성은 멱등이다 — 같은 ID 로 다시 만들어도 사용자가 바꾼 설정을
|
||||
* 덮지 않는다. minSdk 가 29 라 버전 분기가 필요 없다.
|
||||
*/
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
val manager = getSystemService(NotificationManager::class.java)
|
||||
manager.createNotificationChannel(
|
||||
NotificationChannel(
|
||||
getString(R.string.default_notification_channel_id),
|
||||
getString(R.string.default_notification_channel_name),
|
||||
NotificationManager.IMPORTANCE_DEFAULT,
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- FCM 기본 알림 채널. AndroidManifest 의 default_notification_channel_id 와
|
||||
MainActivity 의 채널 생성이 같은 값을 봐야 한다. -->
|
||||
<string name="default_notification_channel_id" translatable="false">fanuzu_default</string>
|
||||
<!-- 기기 알림 설정에 보이는 채널 이름이라 사용자 노출 문자열이다. -->
|
||||
<string name="default_notification_channel_name">FANUZU 알림</string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user