0

시간이 많이 걸리는 프로세스를 여러 클라우드 기능으로 분해해야합니다. 총 9 분 (최대 실행 시간)이 걸릴 것이기 때문입니다. 이렇게하려면 pub/sub 주제에 의해 트리거 된 하나의 (항목) 클라우드 기능이 다른 주제에 메시지를 쓰고 다른 주제/하위 클라우드 기능을 트리거하고 싶습니다.admin SDK를 사용하여 클라우드 기능에서 FCM sendToTopic을 사용하는 방법은 무엇입니까?

을 통해 테스트하고 있습니다. 항목 기능을 트리거하는 것은 문제가되지 않습니다,하지만 기능은 admin.messaging().sendToTopic(...)를 호출 할 때 다음과 같은 오류 얻을 :

An error occurred when trying to authenticate to the FCM servers. Make sure the credential used to authenticate this SDK has the proper permissions. See https://firebase.google.com/docs/admin/setup for setup instructions.

내가 로컬로 테스트하고 있습니다 때문인지 확실하지 않다, 그러나 나는 어떤을 찾을 수 없습니다 주제에 메시지를 보내는 쉬운 방법. firebase 콘솔에는 메시지를 쉽게 형식화하고 보낼 수있는 "알림"섹션이 있지만 클라이언트 앱 (ios/android/web) 만 타겟팅하는 것으로 보입니다.

클라우드 기능에서 FCM 용 자격 증명을 구성하는 방법에 대한 문서에서 아무것도 찾을 수 없습니다. 표준 자격 증명을 사용하고 있습니다. 내 기능은 예를 들어 Firestore 인스턴스에 쓰는 데 아무런 문제가 없습니다.

docs for using FCM in the admin SDK에도 이와 관련한 언급이 없습니다.

+1

FCM 메시지는 Pub/Sub 클라우드 기능을 트리거하지 않습니다. 이 [관련 질문] (https://stackoverflow.com/a/44545878/4815718)을 참조하십시오. Pub/Sub 메시지를 보내는 방법을 보여주는 [자세한 예제는 여기에 있습니다] (https://www.npmjs.com/package/@google-cloud/pubsub)가 있습니다. 나는 사용하지 않았지만 당신이 필요로하는 것이 무엇인지를 생각합니다. –

+0

아하! 이 모든 문서가 firebase 및 Google 클라우드 플랫폼에 중복되어있어 초보자에게 혼란을줍니다. 나는 너무 많이 읽고 있었지만 각 부분의 링크는 계속 서로를 참조했다. 나는 거기에 FAQ에 끝나지 않았어 ... 여기에 당신의 대답을 복사 하시겠습니까? 나는 그 질문이 중복이 아니라고 생각한다. 그러나 대답은 여전히 ​​피팅이다. :) –

답변

1

중포 기지 (구글) 클라우드 메시징 및 Google 클라우드 펍/서브가 explained here으로, 서로 다른 메시징 시스템입니다 :

Both are systems to deliver messages, but Google Cloud Messaging is used to deliver messages to and from end-user devices, while Google Cloud Pub/Sub is used to communicate between servers. Google Cloud Messaging is designed to scale to a very large number of delivery end points, but has low throughput (messages per second per channel). Pub/Sub does not have limits on throughput and has a more generic API.

그들이 실행되지 않습니다 주제의 개념, FCM 재 항목에 보낸 메시지를 공유하지만 Pub/Sub Cloud Function.

@google-cloud/pubsub을 사용하여 클라우드 기능에서 Pub/Sub 메시지를 게시 할 수 있습니다. documentation is here.

아래의 두 가지 기능은 간단한 문자열 메시지를 게시하고 수신하는 것을 보여줍니다.

const pubsub = require('@google-cloud/pubsub')(); 

exports.testWrite = functions.database.ref('/test').onWrite(event => { 
    var topic = pubsub.topic('test-topic'); 

    // Publish a message to the topic. 
    var publisher = topic.publisher(); 
    var message = Buffer.from('Hello World!'); 

    return publisher.publish(message); 
}); 

exports.helloPubSub = functions.pubsub.topic('test-topic').onPublish(event => { 
    const buffer = Buffer.from(event.data.data, 'base64'); 
    console.log('message=', buffer.toString('utf8')); 
    return null; 
}); 
+0

Thanks Bob! 그것은 매우 도움이되었다. –