Firebase에서 iOS 클라이언트로부터 푸시 알림 보내기

13034 단어 FirebaseiOS

Firebase, 덥다.


예전부터 관심을 기울였는데 갑자기 구글의 서비스군과 밀접하게 결합해 깜짝 놀랐다.
구글 클라우드 메시징도 Firebase Cloud Messaging에 덮여 Parse처럼 끝나고 이름은 어떻게 처리해야 할지 모르겠어요!나는 구글이 나를 끝까지 돌볼 수 있기를 바란다.

지금


Firebase라고 하면 주로 실시간 DB입니다. 이번 메인스트림 버전 업그레이드에서도 여러분이 가장 좋아하는 푸시 알림 기능을 실현했고 Qiita의 보도도 순조롭게 증가했습니다.
우선 가장 간단한 컨트롤러에서 보내는 방법이다.관리자는 GUI를 사용하여 프로모션 정보와 전체 사용자에 대한 알림을 보낼 수 있습니다.
[iOS] Firebase 공지를 통해 푸시 알림 보내기
이어서 서버에서 API를 두드려서 보내는 방법입니다.
Firebase 푸시 알림의 중독성

다음 단계


여기까지 왔으니 다음 단계로 다음과 같은 의문이 생기겠지.
채팅 서비스 앱을 만들고 싶은데 사용자가 메시지를 보낼 때 어떻게 상대방에게 푸시 알림을 보내나요?
따라서 여기서'Firebase를 사용하여 iOS 클라이언트로부터 푸시 알림을 보내는 방법'을 보내고 싶습니다.
※ FCM에 게시된 정보는 "정보"이지만 이 글에서는 알기 쉬운 것을 중시하며 억지로'알림 전송'으로 표현한다.

클라이언트로부터 푸시 알림을 보내는 세 가지 선택


우선, Firebase는 클라이언트로부터 직접 푸시 알림을 만들고 보내는 기능을 제공하지 않습니다. 예를 들어 Parse.
Parse 난민 여러분께 유감스러운 통지입니다. 하지만 스스로 서버를 만들어야 할 것 같습니다.
미투오 씨의 보도 또는문서에서 보듯이 자신의 서버https://fcm.googleapis.com/fcm/send에서 두드리기문서를 통해 클라이언트에게 푸시 알림을 보냅니다.
문제는 무엇을 촉발하여 분배 처리를 집행하는가이다.
조사를 토대로 고찰하면 3가지 방법이 있다.
  • 자체 서버에 FCM Connection Server Protocol을 설치하여 클라이언트로부터 받은 Upstream 메시지를 트리거합니다.
    koogawa 씨의 보도에 기재된 방법.XMPP로 여러 가지 처리를 하는 것 같습니다.
  • 자신의 서버에 노드를 준비하고 클라이언트로부터 두드리기
    이렇게
    채팅 응용 프로그램의 예: 사용자 A가 사용자 B에게 보낸 메시지를 데이터베이스에 저장합니다.동시에 사용자 A는 적당한 매개 변수를 사용하여 자신의 서버의 특정 노드를 두드린다.따라서 사용자 B에 대해 적절한 컨텐트에 대한 푸시 알림을 생성하고 게시합니다.
  • 자신의 서버에서 Firebase 데이터베이스를 감시하여 데이터 추가를 촉발
    모든 실체를 추가하고 클라이언트가 데이터를 추가할 때 해당하는 푸시 알림을 보내는 것을 감시합니다.
    채팅 응용 프로그램의 예: 사용자 A는 사용자 B에게 보낸 메시지를 데이터베이스에 저장한 후 자신의 서버에서 메시지의 추가를 감지하고 사용자 B에게 적당한 내용의 푸시 알림을 만들어 발송한다.
  • 이번에 세 번째 녀석이죠.


    첫 번째는 공식 문서에 기재된 안도감이지만 어쨌든 필자는 XMPP에 대해 밝지 못해서 이번에 처리하지 않아서 유감이다.그럼에도 불구하고 잘 처리하면 강력한 선택이 될 수 있으니 다른 이들의 보도를 기대해주세요
    두 번째는 아주 간단해요.보도할 필요 없이 각자 시도해 보세요.
    세 번째 장점은:.

  • 오프라인 지원.Firebase Database의 SDK는 오프라인으로 대응하기 때문에 그 장점을 직접 누릴 수 있습니다.링 밖에서 메시지를 보내도 링 안으로 이동하면 자동으로 데이터베이스에 저장되고 자신의 서버에서 푸시 알림을 보냅니다.

  • 통신을 분리하지 않아도 된다.두 번째 방법은 메시지를 보내는 데 두 번의 통신이 필요하지만 이런 방법은 한 번만 하면 된다.
  • Firebase 데이터베이스에만 데이터를 추가하기 때문에 당연히 안드로이드와 인터넷에서도 사용할 수 있다.
    따라서 이 글은 세 번째'자신의 서버에서 Firebase 데이터베이스를 감시하고 추가 데이터를 터치하여 푸시 알림을 보내는 방법'을 소개한다.

    단계


    오프닝은 길지만 기초 부분의 절차는 매우 간단하다.

    1. iOS 클라이언트를 설정하여 푸시 알림을 받습니다.


    참조 등은 Firebase 콘솔에서 iOS 단말기에서 받을 수 있도록 알림을 보냅니다.

    2. Firebase 데이터베이스를 모니터링하고 푸시 알림을 게시하는 코드를 작성합니다.


    다음은 이번에 징그러운 마법 코드가 된 것이다.
    우선 로컬에서 다음 코드를 이동합니다...
    app.js
    var https = require('https');
    var firebase = require("firebase");
    
    firebase.initializeApp({
        serviceAccount: "serviceAccountCredentials.json",
        databaseURL: "https://***********.firebaseio.com"
    });
    
    var db = firebase.database();
    var ref = db.ref("messages/");
    ref.once("value", function(snapshot) {
        var numChildren = snapshot.numChildren();
        var counter = 0;
        ref.on("child_added", function(addedSnapshot) {
            if( counter < numChildren ){
                // 既存のデータなのでスキップします
                counter++;
                return;
            }
            // 新着データなのでプッシュ通知を配信します
            sendNotification( addedSnapshot.val().body );
        });
    });
    
    
    function sendNotification( body ){
        var postData = JSON.stringify({
            "to": "/topics/news",
            "priority" : "high",
            "notification" : {
                "body" : body,
                "sound": "default",
            }
        });
    
        var options = {
            hostname: 'fcm.googleapis.com',
            path: '/fcm/send',
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                "Authorization" : "key=**********************"
            }
        };
    
        var req = https.request(options, (res) => {
            console.log("OK");
        });
    
        req.on('error', (e) => {
            console.error("problem with request: ${e.message}");
        });
    
        req.write(postData);
        req.end();
    }
    
    Firebase 데이터베이스에 데이터를 추가합니다.

    그래서 기대한 대로 iOS 단말기에 푸시 알림을 보냈습니다!
    Google App Engine Node.해봐.GAE/Node.js

    3. Node.js 서버를 구축하고 배치합니다.


    그리고 위의 코드를 자신의 Node로 사용합니다.js 서버에 배치하기만 하면 됩니다.
    서버는 아무렇게나 일어나면 되지만 FCM 서버와 거리가 가까운 것 같아서 이번에는 아래 기사를 참고하여 App Engine으로 일어섰다.
    "구글 I/O를 따라잡지 못했지만 구글 클라우드 Functions와 협력할 수 있도록 우선적으로 노력할 것입니다."
    주의해야 할 것은 이 코드가 이동하는 실례는 하나에 불과하다는 것이다.
    여러 컴퓨터에서 같은 코드를 이동하면 설계상의 감시 과정이 중복되고 푸시 알림은 실례의 수량만 전송됩니다.
    배치가 끝난 후, 터미널로 전송 알림을 보낼 수 있도록 컨트롤러에서 데이터를 다시 시도하십시오.

    현실 세계를 실현하다


    여기까지는 기초적인 부분이고 나중에 실제 제작된 응용 프로그램의 규격에 따라 설치하세요.
    예를 들어 저장된 데이터에 대상 장치 ID와 테마 이름을 추가하거나 서버에서 이 데이터를 처리하는 것이 필요하다.
    또한 Firebase 데이터베이스의 보안 규칙을 잊지 마십시오.
    이제 Firebase를 사용하여 iOS 클라이언트에서 푸시 알림을 보낼 수 있습니다.

    서버가 어떤 것을 세우는 것이 더 쉽고 간단한 방법이 없습니까?


    그래, 나도 그렇게 생각해.
    아마도 앞으로 Google Cloud Functions가 이러한 역할을 담당할 것입니다.
    Firebase 사람도 "Google Cloud Functions와 협력하기 전에 App Engine+nodejs를 사용하십시오."라고 했어요.
    다만 구글 클라우드 기능은 아직 베타에 가입하지 않았기 때문에 당분간 이 방법으로 가고 싶습니다.

    여기까지.


    Firebase를 실제로 사용할 수 있도록 참고를 해 주시면 좋겠습니다.

    좋은 웹페이지 즐겨찾기