검증게시판 단계 추가
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
# Android FCM 설정 (goldenApp / goldenanalysisapp)
|
||||
|
||||
기존 **goldenApp** (`~/dev/goldenAnalysis/goldenApp`) 과 동일 Firebase 프로젝트를 사용합니다.
|
||||
|
||||
## 1. Firebase Console
|
||||
|
||||
1. [Firebase Console](https://console.firebase.google.com/) → 프로젝트 **goldenanalysisapp**
|
||||
2. **앱 추가** → Android
|
||||
3. 패키지 이름: `com.goldenchart.app` (Capacitor `applicationId` 와 동일)
|
||||
4. `google-services.json` 다운로드
|
||||
|
||||
## 2. 프로젝트에 배치
|
||||
|
||||
```bash
|
||||
./scripts/setup-android-fcm.sh ~/Downloads/google-services.json
|
||||
# 또는
|
||||
cp ~/Downloads/google-services.json app/android/app/google-services.json
|
||||
```
|
||||
|
||||
## 3. 빌드
|
||||
|
||||
```bash
|
||||
npm run cap:sync
|
||||
cd app/android && ./gradlew assembleRelease
|
||||
```
|
||||
|
||||
`google-services.json` 이 없으면 Gradle 로그에
|
||||
`google-services plugin not applied` 가 나오며 **푸시가 동작하지 않습니다**.
|
||||
|
||||
## 4. 서버 (exdev)
|
||||
|
||||
- `FIREBASE_ENABLED=true`
|
||||
- `firebase-service-account.json` (goldenanalysisapp 서비스 계정)
|
||||
- 앱 설정에서 **FCM 푸시** ON (`fcm_push_enabled`)
|
||||
|
||||
## 5. 앱에서 확인
|
||||
|
||||
1. 로그인 후 **설정 → FCM 푸시** ON
|
||||
2. 알림 권한 허용
|
||||
3. **테스트 발송** 버튼
|
||||
4. 전략 시그널 발생 시 푸시 수신
|
||||
|
||||
## goldenApp 과의 차이
|
||||
|
||||
| 항목 | goldenApp | GoldenChart (Capacitor) |
|
||||
|------|-----------|-------------------------|
|
||||
| 패키지 | `com.golden.app` | `com.goldenchart.app` |
|
||||
| FCM SDK | 직접 Firebase Messaging | `@capacitor/push-notifications` |
|
||||
| 토큰 등록 | `POST /api/fcm/token` | 동일 (`registerFcmToken`) |
|
||||
| 알림 채널 | `golden_alerts` | `goldenchart_trade_signals` |
|
||||
|
||||
로그인 사용자는 **userId** 기준으로 FCM 토큰을 조회하므로, 웹·모바일 deviceId 가 달라도 푸시를 받을 수 있습니다.
|
||||
@@ -7,8 +7,8 @@ android {
|
||||
applicationId "com.goldenchart.app"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 2
|
||||
versionName "1.1"
|
||||
versionCode 7
|
||||
versionName "1.6"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
aaptOptions {
|
||||
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"project_info": {
|
||||
"project_number": "353782909389",
|
||||
"project_id": "goldenanalysisapp",
|
||||
"storage_bucket": "goldenanalysisapp.firebasestorage.app"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:353782909389:android:45e0218e69611efcc75c84",
|
||||
"android_client_info": {
|
||||
"package_name": "com.golden.app"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyBZWkVrPvG88_bYnIG94yiml3VXzht157Y"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": []
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
||||
@@ -1,6 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
@@ -10,6 +15,10 @@
|
||||
android:usesCleartextTraffic="true"
|
||||
android:theme="@style/AppTheme">
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||
android:value="@string/default_notification_channel_id" />
|
||||
|
||||
<activity
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode|navigation"
|
||||
android:name=".MainActivity"
|
||||
@@ -35,8 +44,4 @@
|
||||
android:resource="@xml/file_paths"></meta-data>
|
||||
</provider>
|
||||
</application>
|
||||
|
||||
<!-- Permissions -->
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
</manifest>
|
||||
|
||||
@@ -1,5 +1,41 @@
|
||||
package com.goldenchart.app;
|
||||
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.getcapacitor.BridgeActivity;
|
||||
|
||||
public class MainActivity extends BridgeActivity {}
|
||||
/**
|
||||
* Capacitor 메인 액티비티 — FCM 알림 채널 생성 (goldenApp / Android 8+)
|
||||
*/
|
||||
public class MainActivity extends BridgeActivity {
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
createNotificationChannel();
|
||||
}
|
||||
|
||||
private void createNotificationChannel() {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return;
|
||||
String channelId = getString(R.string.default_notification_channel_id);
|
||||
String channelName = getString(R.string.default_notification_channel_name);
|
||||
String channelDescription = getString(R.string.default_notification_channel_description);
|
||||
|
||||
NotificationChannel channel = new NotificationChannel(
|
||||
channelId,
|
||||
channelName,
|
||||
NotificationManager.IMPORTANCE_HIGH
|
||||
);
|
||||
channel.setDescription(channelDescription);
|
||||
channel.enableVibration(true);
|
||||
channel.enableLights(true);
|
||||
|
||||
NotificationManager manager = getSystemService(NotificationManager.class);
|
||||
if (manager != null) {
|
||||
manager.createNotificationChannel(channel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">GoldenChart</string>
|
||||
<string name="title_activity_main">GoldenChart</string>
|
||||
<string name="package_name">com.goldenchart.app</string>
|
||||
<string name="custom_url_scheme">com.goldenchart.app</string>
|
||||
<string name="default_notification_channel_id">goldenchart_trade_signals</string>
|
||||
<string name="default_notification_channel_name">매매 시그널 알림</string>
|
||||
<string name="default_notification_channel_description">전략 조건 일치 시 매수·매도 푸시 알림</string>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user