Chrome 브라우저 알림 기록을 볼 수있는 방법이 있습니까?


55

여러 웹 사이트에서 Chrome 알림을 받고 해당 사이트에 탭이 열려 있지 않은 경우에도 작동합니다.

그러나 때로는 책상에 없거나 랩톱을 볼 때 이러한 Chrome 알림을받습니다.

이 알림 중 일부가 저에게 유용하기 때문에 놓친 내용에 액세스하고 싶습니다.

알림 기록을 볼 수있는 방법이 있습니까?


1
그렇지 않은 것 같습니다. 이 게시물 ( theverge.com/2015/10/14/9531133/… )을보고 알림 정책을 재정렬하고 데스크톱에서 제거하여 개별 웹 페이지에 배치했습니다. 새 알림에 액세스 할 수있는 유일한 방법은 Google 페이지에서 종을 클릭하는 것입니다.
Terry

1
nope : productforums.google.com/forum/#!msg/chrome/xs9PflHTfho/… 와 같은 것 -매우 불행합니다.
LB--

내가 알림을 목록으로 찾은 유일한 곳은 알림을 발생시키는 웹 사이트가 웹 사이트를 통해 알림을받는 경우입니다. 크롬은 그것들을 비슷한 것으로 수집 chrome://notifications하지 않으며 OS로 만들지 않습니다.
Jason Lydon

유효한 답변 수락 @paradroid
Satheesh

답변:


31

Mac이 있다면 방법이 있습니다! 😄

알림 목록은 다음과 같습니다.

알림 목록의 모양은 다음과 같습니다.

당신이해야 할 모든입니다 :

크롬 1. 다음으로 이동 :

chrome://flags/

2. 다음을 찾으십시오.

Enable native notifications. Mac

3. 활성화하고 크롬을 다시 시작하면 완료됩니다. 즐겨!

편집하다:

  • 더 이상 위의 작업을 수행하지 않아도됩니다.

Chrome 59부터 Notifications API 또는 chrome.notifications 확장 API를 통해 전송 된 알림은 Chrome 자체 시스템 대신 macOS 기본 알림 시스템에서 직접 표시됩니다. [ 출처 ]


2
이것은 알림 기록을 보는 문제에 대한 답변이 아니라 알림을 보는 것에 만 해당됩니다.
Bjorn

6
@BjornTipling 그것은 대답합니다. 그는 멀리있는 동안 놓친 알림을 볼 수 있는지 묻고 있으며 내 방법은 정확하게 수행합니다.
Esdras Lopez

1
댓글로 링크를 넣으면 귀하의 게시물에 해당 링크를 추가합니다. @EsdrasLopez
user418150

1
@ user418150 고맙지 만 지금 명성을 얻었습니다. :) 편집 내용을 확인하십시오.
Esdras Lopez

2
여기서 주요 문제는 알림을 클릭 하지 않으면 알림 만 저장한다는 것입니다. 흥미로운 기사 제목을 여러 번 클릭했지만로드하지 못했지만 알림 목록에서 여전히 제거되었습니다. 일반적으로 기사가 Google에 게시하기에는 너무 새롭고 알림 제목이 기사 제목과 일치하지 않아 웹 창에서 사라집니다.
iBorg

11

MacOSX에서는 라이브러리 / 응용 프로그램 지원에 Chrome 디렉토리가 있습니다. 터미널 응용 프로그램을 열고 다음 명령을 실행하십시오.

cd ~/Library/Application\ Support/Google/Chrome/Default/Platform\ Notifications/
ls -la

이제 다음과 같은 파일이 나타납니다.

drwx------@  7 visi  staff   224 Jul 13 18:16 .
drwx------  75 visi  staff  2400 Jul 15 11:05 ..
-rw-------@  1 visi  staff   759 Jul 15 10:57 000003.log
-rw-------@  1 visi  staff    16 Jul 13 18:16 CURRENT
-rw-------@  1 visi  staff     0 Jul 13 18:16 LOCK
-rw-------@  1 visi  staff   147 Jul 13 18:16 LOG
-rw-------@  1 visi  staff    41 Jul 13 18:16 MANIFEST-000001

가장 최근의 것이 000003.log임을 알 수 있으므로 다음 명령으로 확인하십시오.

tail -n 100 000003.log

이 로그에서 마지막 100 개 항목을 볼 수 있습니다. 그런 다음 크롬 설정을 열고 해당 웹 사이트 알림을 비활성화 할 수 있습니다.

참고 당신은 크롬에서 여러 프로필이있는 경우, 귀하의 경로 (Profile1 대신 기본의)과 같이 다를 수 :

cd ~/Library/Application\ Support/Google/Chrome/Profile\ 1/Platform\ Notifications/

3
이것이 정답입니다. :)
Cody A. Ray

1
2019 년에도 여전히 작동합니다 (로그는 약간의 해석이 필요하지만). 큰 답변 감사합니다
carpii

11

로 이동하면 %LocalAppData%\Google\Chrome\User Data\Default\Platform Notifications과거 알림의 로그 파일이 있습니다.


4
좋지만 경로를 하드 코드 대신 "% LocalAppData % \ Google \ Chrome \ User Data \ Default \ Platform Notifications"로 지정하십시오. 모든 PC에서 완벽하게 작동합니다.
Dmitry Gusarov

UserData / 폴더에서 "C : \ Users \ username \ AppData \ Local \ Google \ Chrome \ UserData \ Profile 1 \ Platform Notifications"와 같은 프로필 폴더를 먼저 찾아야 할 수도 있습니다.
Maffelu

1
이 데이터는 이진입니다. 읽는 방법?
Gaia

Chrome 71에서 로그 파일이 비어 있습니다. 어느 시점에서이 기능이 비활성화 되었습니까?
제임스

2
@ Gaia 나는 똑같은 것을 궁금해하고 그것을 해독 할 때 받아 들일만한 자바 코드를 채찍질했다. 아래에 게시했습니다 : superuser.com/a/1410742/778383
Dreamspace President

3

알림을 직접 기록 할 수없는 것 같습니다. 같은 문제가 발생하면 Pushbullet을 추천 한 사용자와 같은 Android 폰 에뮬레이터 또는 전화기를 사용하여 부정 행위를합니다. 그러나 Pushbullet뿐만 아니라 다른 응용 프로그램도 있습니다. 알림을 듣고 기록하는 안드로이드 트릭을 별도의 스레드에서 논의 할 수 있습니다.

프로그래머라면 집에서 만든 확장 프로그램을 통해 문제를 해결할 수 있습니다.

https://stackoverflow.com/questions/15949606/how-can-i-listen-to-notifications

"알림이 작성 될 때마다 특정 코드를 실행하도록 webkitNotifications.createNotification 함수를 연결할 수 있습니다."


2

푸시 알림 기록을 볼 수 있습니다. 작업 표시 줄의 PC 화면 오른쪽 하단에 말풍선이 표시되어 있으며 마우스를 올려 놓으면 실제로 "알림"이라고 표시됩니다. 해당 풍선을 클릭하면 읽지 않은 / 새 이메일과 취소하지 않은 푸시 알림이 표시됩니다. 나는이 대답을 찾기 위해 여기에 왔고 그것을 찾지 못했지만이 문제를 해결했습니다. Windows 10을 사용하고 있습니다.


예, 이것은 Win10에서 최근에 이루어졌지만 Windows에 대한 최종 답변입니다.
paradroid

1

위에서 언급되었지만 OSX에서 알림이 누락되지 않도록 비틀어 놓은 것을 만지면 다음과 같습니다.

  1. 메인 상단 바의 오른쪽에서 알림 아이콘을 클릭하십시오.

  2. 톱니 바퀴를 클릭합니다 (알림 표시의 오른쪽 아래)

  3. 알림 표시 방법을 설정하려면 Chrome을 선택하십시오.

  4. 기본적으로 "배너"가 선택되고 자동으로 사라질 수 있습니다. 대신 "경고"유형을 선택하면 승인하지 않는 한 그대로 유지됩니다.

천만에요 :)


-1

Pushbullet이 문제를 해결할 수있는 것처럼 보입니다. Chrome 확장 프로그램을 사용하여 누락 된 알림을 볼 수 있다고 주장합니다.

https://blog.pushbullet.com/2014/10/23/easily-access-your-recent-notifications-in-chrome/


읽어 보시기 바랍니다 소프트웨어 권장하는 방법 에 대한 최소한의 필요한 정보를 슈퍼 사용자에 소프트웨어를 추천하는 방법과 제안을. 제공된 링크가 깨져도 답변을 유용하게 유지하려면 이러한 세부 정보를 답변으로 편집해야합니다.
나는

안녕 나는 그것을 시도 할 것이다. 실제로 Pushbullet을 사용하고 있지만이 Chrome 확장 프로그램을 알지 못했습니다.
paradroid

이 기능을 찾을 수 없습니다. 알림이 팝업되어 알림 기록에 추적이 없습니다.
madprops

나는 질문을 다시 생각했고 캐치가 이것입니다. 휴대 전화에 알림이 수신되면 pushbullet이이를 바탕 화면으로 전달하고 읽지 않은 알림이있을 수 있음을 알려줍니다 (휴대폰에서 보았거나 무엇을 보았는지). 어떤 사이트에 크롬 알림이 표시됩니까? 앱이 있으면 언제든지 설치할 수 있으며 푸시 글렛에서 데스크탑 / 노트북 / 무엇으로 알림을받을 수 있습니다.
Socialorganix Contentbrandmgmt

1
Pushbullet의 "알림"기능은 데스크탑에서 Android 폰의 알림을 볼 수 있으며 Mac 데스크탑이있는 경우 iPhone과 동일합니다. Chrome 알림과는 아무런 관련이 없습니다.
보아스

-1

위 의 Corey답변 과 너무 많은 시간을 보낸 게으른 토요일 덕분에 이제 IDE 콘솔에서 URL을 클릭 할 수있는 최신 Chrome 알림 목록을 볼 수 있습니다.

이진 데이터를 해석하는 올바른 방법에 대한 단서가 없기 때문에 코드는 엉뚱하고 조잡한 휴리스틱을 사용합니다.

그러나 그건 더 나은없는 것보다는. 출력 예 (발췌) :

https://www.finanzen.net/nachricht/aktien/kw-9-tops-und-flops-der-tecdax-aktien-in-der-vergangenen-woche-7195100
https://images.finanzen.net/mediacenter/unsortiert/TecDAX_boerse_frankfurt0016_kl.jpg
So bewegten sich die Einzelwerte des TecDAX in der zurückliegenden Handelswoche.*
KW 9: Tops und Flops der TecDAX-Aktien in der vergangenen Woche
So bewegten sich die Einzelwerte des TecDAX in der zurückliegenden Handelswoche.
HideOnTheseRoutes
Home/Index;Article/News/Index
tag-7195100
NotificationIdentifier
1061622960{


https://www.youtube.com/watch?v=W-mlD_bYKdU&feature=push-u-sub&attr_tag=0SL8UpnrTOnTECxr%3A6
https://lh5.googleusercontent.com/-raJM5SITO34/AAAAAAAAAAI/AAAAAAAAAAA/UtLljlL4Wpc/s96-c-mo/photo.jpg
New from Market Moves
Trade Recap: $1,500 in PROFITS*˜
COuAyJGY4uACEAY=
attributionTag
0SL8UpnrTOnTECxr:6{
 from Market MovesTrade Recap: $1,500 in PROFITS

십자가에 못 박히는 Java 코드 :

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;




/**
 * v[1, 2019-03-02 13:00 UTC]
 *
 * by dreamspace-president.com
 */
final public class CrappyChromeNotificationHistoryReader {


    public static void main(final String[] args) {

        final File file = new File(
                "C:\\Users\\[YOUR_NAME_HERE]\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Platform Notifications\\000003.log");

        final List<ChromeNotificationStuff> notifications = obtainChromeNotificationStuff(file);
        for (ChromeNotificationStuff notification : notifications) {
            System.err.println();
            System.err.println(notification);
        }
        System.exit(0);
    }


    public static List<ChromeNotificationStuff> obtainChromeNotificationStuff(final File file) {

        final List<ChromeNotificationStuff> ret = new ArrayList<>();

        final List<DumbTokenList> listOfDumbTokenLists = doTheInsaneParsingThing(file);
        int instanceCounter = 0;
        for (DumbTokenList dtl : listOfDumbTokenLists) {

            final List<String> urls = new ArrayList<>();
            final List<String> texts = new ArrayList<>();

            for (String token : dtl.tokens) {
                if (token.startsWith("https://") || token.startsWith("http://")) {
                    urls.add(token);
                } else {
                    texts.add(token);
                }
            }


            // Remove unimportant URLs.
            for (int i = urls.size() - 1; i > 0; i--) {
                final String urlThis = urls.get(i);
                final int lenThis = urlThis.length();
                for (int ii = i - 1; ii >= 0; ii--) {
                    final String urlThat = urls.get(ii);
                    final int lenThat = urlThat.length();

                    if (lenThis > lenThat) {
                        if (urlThis.startsWith(urlThat)) {
                            final String removed = urls.remove(ii);
                            //                            System.err.println("\nREMOVED: " + removed + "\nKEPT   : " + urlThis); // because was better or equal
                            break;
                        }
                    } else {
                        if (urlThat.startsWith(urlThis)) {
                            final String removed = urls.remove(i);
                            //                            System.err.println("\nREMOVED: " + removed + "\nKEPT   : " + urlThat); // because was better or equal
                            break;
                        }
                    }

                }
            }

            ret.add(new ChromeNotificationStuff(instanceCounter, urls, texts));
            instanceCounter++;
        }

        ret.sort(null);

        return ret;
    }


    final public static class ChromeNotificationStuff implements Comparable<ChromeNotificationStuff> {


        private final int instanceCounter;
        final public List<String> urls;
        final public List<String> texts;


        private ChromeNotificationStuff(final int instanceCounter,
                                        final List<String> urls,
                                        final List<String> texts) {

            this.instanceCounter = instanceCounter;

            this.urls = Collections.unmodifiableList(urls);
            this.texts = Collections.unmodifiableList(texts);
        }


        public String toString() {

            final StringBuilder sb = new StringBuilder();
            for (String url : urls) {
                sb.append(url).append('\n');
            }
            for (String text : texts) {
                sb.append(text).append('\n');
            }
            return sb.toString();
        }


        @Override
        public int compareTo(final ChromeNotificationStuff o) { // Newest (= last) notifications first, please.

            return Integer.compare(o.instanceCounter, instanceCounter);
        }
    }




    final private static double MIN_LENGTH_DIFFERENCE_RATIO = 0.7;//0.9;
    final private static double MIN_REMAININGLINES_PERCENTAGEOF_ALLLINES = 0.2;




    final private static class DumbTokenList {


        final private static int MIN_LENGTH = 10; //6;
        final private static String[] EXTENSIONS = new String[] { ".jpg", ".jpeg", ".png", ".gif", ".html", ".htm", ".php" };
        final private static int MAX_EXTRA_CRAP_AFTER_EXTENSIONS = 3;
        final private static String SAFE_URL_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;="; // https://stackoverflow.com/a/1547940/3500521

        final private String originalText;
        final private List<String> tokens;


        private DumbTokenList(final String textWithBinaryCrap) {

            originalText = textWithBinaryCrap;

            final List<String> tokens = new ArrayList<>();

            final Consumer<String> addTokenButTryToDecrappifyExtensionsFirstAnTing = token -> {


                if (token.startsWith("ttps://") || token.startsWith("ttp://")) {
                    token = "h" + token;
                }


                final List<String> newTokens = new ArrayList<>();

                if (token.startsWith("http")) {
                    final int tokenLength = token.length();
                    boolean found = false;
                    for (int i = 0; i < tokenLength; i++) {
                        final char c = token.charAt(i);
                        if (SAFE_URL_CHARACTERS.indexOf(c) < 0) {
                            newTokens.add(token.substring(0, i));
                            newTokens.add(token.substring(i));
                            found = true;
                            break;
                        }
                    }
                    if (!found) {
                        newTokens.add(token);
                    }
                } else {
                    newTokens.add(token);
                }

                for (String newToken : newTokens) {


                    String foundExt = null;
                    int foundExtLen = 0;
                    int foundExtAt = -1;
                    for (String extension : EXTENSIONS) {
                        final int idx = newToken.indexOf(extension);
                        if (idx >= 0) {
                            final int extLen = extension.length();
                            if (idx > foundExtAt || (idx == foundExtAt && extLen > foundExtLen)) {
                                foundExt = extension;
                                foundExtLen = extLen;
                                foundExtAt = idx;
                            }
                        }
                    }
                    if (foundExt != null) {
                        final int amountOfCharactersAfterThisFind = newToken.length() - foundExtAt - foundExtLen;
                        if (amountOfCharactersAfterThisFind <= MAX_EXTRA_CRAP_AFTER_EXTENSIONS) {
                            // OK. Shorten this bitch.
                            newToken = newToken.substring(0, foundExtAt + foundExtLen);
                        }
                    }


                    if (newToken.startsWith("http")) {
                        if (!newToken.startsWith("http://") && !newToken.startsWith("https://")) {
                            continue;
                        }
                    }


                    if (newToken.startsWith("/watch?v=")) {
                        newToken = "https://www.youtube.com" + newToken;
                    }


                    if (newToken.length() >= MIN_LENGTH) {
                        tokens.add(newToken);
                    }


                }

            };

            final StringBuilder sb = new StringBuilder();

            final int len = textWithBinaryCrap.length();
            for (int i = 0; i <= len + 1; i++) {

                final char c = i < len ? textWithBinaryCrap.charAt(i) : 0;

                if (c < ' ' || c == '"') {

                    String potentialText = sb.toString();
                    while (true) {
                        final int httpIDX = potentialText.indexOf("http", 1);
                        if (httpIDX < 0) {
                            addTokenButTryToDecrappifyExtensionsFirstAnTing.accept(potentialText);
                            break;
                        } else {
                            final String snippet = potentialText.substring(0, httpIDX);
                            potentialText = potentialText.substring(httpIDX);
                            addTokenButTryToDecrappifyExtensionsFirstAnTing.accept(snippet);
                        }
                    }

                    sb.setLength(0);

                    if (c == '"') {
                        // Skip this and the next. (thus "i < len +1")
                        i++;
                    }
                } else {
                    sb.append(c);
                }
            }


            // Remove quasi-duplicates. Sue me.
            //            System.err.println("\n*** STARTING DEDUPLICATION ***");
            final int lSize = tokens.size();
            for (int i = lSize - 1; i > 0; i--) { // (not 0 itself, wouldn't make sense)

                if (i < tokens.size()) {

                    final String entry = tokens.get(i);

                    for (int ii = i - 1; ii >= 0; ii--) { // (incl. 0)

                        final String otherEntry = tokens.get(ii);

                        final Boolean removeNoneOrFirstOrSecond = areLinesTooSimilar(entry, otherEntry);
                        if (removeNoneOrFirstOrSecond != null) {

                            if (!removeNoneOrFirstOrSecond) {
                                final String removed = tokens.remove(i);
                                //                                System.err.println("\nREMOVED: " + removed + "\nKEPT   : " + otherEntry); // because was better or equal
                            } else {
                                final String removed = tokens.remove(ii);
                                //                                System.err.println("\nREMOVED: " + removed + "\nKEPT   : " + entry); // because was better or equal
                            }
                            break; // IMPORTANT!
                        }

                    }
                }
            }


            this.tokens = Collections.unmodifiableList(tokens);

        }


        public String toString() {

            final StringBuilder sb = new StringBuilder();
            for (String token : tokens) {
                sb.append(token).append('\n');
            }
            return sb.toString();
        }


    }


    /**
     * Do NOT call with NULL/EMPTY arguments.
     *
     * @return NULL if not too similar. False if the FIRST seems superfluous. True if the SECOND seems superfluous.
     */
    private static Boolean areLinesTooSimilar(final String line1,
                                              final String line2) {

        final int l1 = line1.length();
        final int l2 = line2.length();

        final double lenDiffRatio = Math.min(l1, l2) / (double) Math.max(l1, l2); // Results in 1 or less.

        if (lenDiffRatio >= MIN_LENGTH_DIFFERENCE_RATIO) {

            if (l2 < l1) {
                // Compare the other way round.
                if (line1.contains(line2)) {
                    return false;
                }
            } else {
                if (line2.contains(line1)) {
                    return true;
                }
            }

        }

        return null;
    }


    private static List<DumbTokenList> doTheInsaneParsingThing(final File file) {

        final List<DumbTokenList> ret = new ArrayList<>();

        final StringBuilder sb = new StringBuilder();
        try (final InputStream is = new BufferedInputStream(new FileInputStream(file))) {

            final int bufMinus1 = 4;
            final Charset charset = Charset.forName("Cp1252"); // =ansi

            final int[] buf = new int[bufMinus1 + 1]; // "DATA"
            //            while ((buf[buf.length - 1] = is.read()) >= 0) {
            while (true) {

                buf[bufMinus1] = is.read();

                if (buf[bufMinus1] < 0 || (
                        buf[0] == 'D' &&
                                buf[1] == 'A' &&
                                buf[2] == 'T' &&
                                buf[3] == 'A' &&
                                buf[4] == ':')) {

                    if (sb.length() > 0) {
                        ret.add(new DumbTokenList(sb.toString()));
                        sb.setLength(0);
                    }

                    if (buf[bufMinus1] < 0) {
                        break;
                    }

                } else {

                    sb.append(new String(new byte[] { (byte) buf[bufMinus1] }, charset));
                    //                    sb.append((char) buf[bufMinus1]);
                }


                // Shift minibuffer to front.
                for (int i = 0; i < bufMinus1; i++) {
                    buf[i] = buf[i + 1];
                }
            }


        } catch (IOException e) {
            e.printStackTrace();
        }


        // DEDUPLICATE DTLs
        for (int i = ret.size() - 1; i > 0; i--) {

            if (i < ret.size()) {
                final DumbTokenList dtlThis = ret.get(i);
                final int dtlThisTokenCount = dtlThis.tokens.size();

                for (int ii = i - 1; ii >= 0; ii--) {
                    final DumbTokenList dtlThat = ret.get(ii);
                    final int dtlThatTokenCount = dtlThat.tokens.size();


                    int scoreViaRemainingLines_this = dtlThisTokenCount;
                    int scoreViaRemainingLines_that = dtlThatTokenCount;


                    for (int o = 0; o < dtlThisTokenCount; o++) {
                        final String tokenThis = dtlThis.tokens.get(o);
                        for (int oo = 0; oo < dtlThatTokenCount; oo++) {
                            final String tokenThat = dtlThat.tokens.get(oo);

                            final Boolean tooSimilar = areLinesTooSimilar(tokenThis, tokenThat);
                            if (tooSimilar != null) {
                                scoreViaRemainingLines_this--;
                                scoreViaRemainingLines_that--;
                                break;
                            }

                        }
                    }

                    if (scoreViaRemainingLines_this < 0 || scoreViaRemainingLines_that < 0) {
                        throw new Error();
                    }

                    final double scoreActual_this = scoreViaRemainingLines_this / (double) dtlThisTokenCount;
                    final double scoreActual_that = scoreViaRemainingLines_that / (double) dtlThatTokenCount;


                    if (scoreViaRemainingLines_this < scoreViaRemainingLines_that) {
                        if (scoreActual_this < MIN_REMAININGLINES_PERCENTAGEOF_ALLLINES) {
                            final DumbTokenList removed = ret.remove(i);
                            //                            System.err.println("\nREMOVED:\n" + removed + "\nKEPT   :\n" + dtlThat);
                            break; // IMPORTANT.
                        }
                    } else {
                        if (scoreActual_that < MIN_REMAININGLINES_PERCENTAGEOF_ALLLINES) {
                            final DumbTokenList removed = ret.remove(ii);
                            //                            System.err.println("\nREMOVED:\n" + removed + "\nKEPT   :\n" + dtlThis);
                            break; // IMPORTANT.
                        }
                    }


                }

            }
        }

        return ret;
    }


}

1
이것을 실행하기 위해 다음 명령 javac "C:\Users\MLM\Downloads\CrappyChromeNotificationHistoryReader.java"(컴파일), java -cp C:\Users\MLM\Downloads CrappyChromeNotificationHistoryReader(실행)을 사용했습니다. 스크립트가 실패 if (scoreViaRemainingLines_this < 0 || scoreViaRemainingLines_that < 0) {하여 모든 구문 분석을 주석 처리 하고 토큰이 목록에 추가 될 때 doTheInsaneParsingThing모든 것을 인쇄했습니다 System.out.println(sb.toString());. "플랫폼 알림"은 서버 작업자 푸시 알림 만 처리합니다.
MLM

@ MLM : javac 정보 주셔서 감사합니다. 문제에 관해서 : 오픈 Java 8 IntelliJ 프로젝트에 소스를 붙여 넣고 사용자 이름 ( "file"변수)을 입력하고 코드를 실행하면 나에게 효과적입니다.
Dreamspace President
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.