You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

学校应用如何通过Twitter操作触发Firebase Cloud Message通知?

实现Twitter推文触发FCM自动推送通知方案

看起来你已经搞定了基础配置(证书、App Delegate这些),接下来核心就是搭建一个Twitter事件监听+FCM推送触发的中间桥接服务——因为Twitter本身没法直接调用FCM接口。结合你已经在用Firebase,用Firebase Functions来做这个最方便,不用自己维护服务器,下面是具体步骤:

1. 配置Twitter开发者端的事件监听

首先得让Twitter在你发布新推文时,把事件通知发送到你的服务端点:

  • 登录Twitter Developer Portal,确保你的开发者App已经申请了Account Activity API权限(需要提交审核,说明用途是监听自有账号的推文发布来触发App通知,一般很快过审)。
  • 创建一个Webhook配置,指向你后续要部署的Firebase Functions的HTTP端点URL。注意Twitter要求Webhook必须是HTTPS,Firebase Functions部署后默认是HTTPS,没问题。
  • 完成Webhook的验证:Twitter会发送一个crc_token的GET请求,你需要在Functions里返回正确的响应(用Twitter提供的签名算法生成response_token),这个后面代码里会写。
  • 订阅你要监听的Twitter账号到这个Webhook,这样该账号发新推文时,Twitter就会把推文数据POST到你的Webhook。

2. 编写Firebase Functions处理推文事件并触发FCM推送

先初始化Firebase Functions(如果还没弄过),然后安装依赖:

cd functions
npm install twitter-lite firebase-admin

然后写核心的函数代码(index.js):

const functions = require("firebase-functions");
const admin = require("firebase-admin");
const Twitter = require("twitter-lite");

admin.initializeApp();

// 配置Twitter客户端(从环境变量取密钥,别硬编码)
const twitterClient = new Twitter({
  consumer_key: functions.config().twitter.consumer_key,
  consumer_secret: functions.config().twitter.consumer_secret,
});

// Twitter Webhook验证函数
exports.twitterWebhook = functions.https.onRequest(async (req, res) => {
  // 处理Twitter的CRC验证请求
  if (req.method === "GET") {
    const { crc_token } = req.query;
    if (!crc_token) {
      return res.status(400).send("Missing crc_token");
    }
    const responseToken = await twitterClient.generateCRCToken(crc_token);
    return res.json({ response_token: responseToken });
  }

  // 处理推文发布的POST事件
  if (req.method === "POST") {
    const tweetEvent = req.body;
    // 筛选出"原创推文"事件(排除转发、回复等)
    const newTweet = tweetEvent.tweet_create_events?.find(event => !event.in_reply_to_status_id && !event.retweeted_status);
    if (!newTweet) {
      return res.status(200).send("Not a new original tweet");
    }

    // 提取推文内容,适配通知字数限制(iOS通知建议不超150字符)
    let tweetText = newTweet.text;
    if (tweetText.length > 150) {
      tweetText = tweetText.substring(0, 147) + "...";
    }

    // 构造FCM通知
    const message = {
      notification: {
        title: "新公告发布",
        body: tweetText,
        sound: "default"
      },
      topic: "announcements" // 给所有订阅该主题的用户发推送
    };

    // 发送FCM推送
    try {
      await admin.messaging().send(message);
      functions.logger.info("推送已发送", { tweetId: newTweet.id_str });
      return res.status(200).send("Push notification sent");
    } catch (error) {
      functions.logger.error("发送推送失败", error);
      return res.status(500).send("Failed to send push");
    }
  }

  return res.status(405).send("Method not allowed");
});

然后把Twitter的密钥配置到Firebase环境变量:

firebase functions:config:set twitter.consumer_key="你的Twitter Consumer Key" twitter.consumer_secret="你的Twitter Consumer Secret"

最后部署Functions:

firebase deploy --only functions

3. iOS端订阅FCM主题(可选,但推荐)

如果用上面的topic方式推送,需要在iOS App里让用户订阅"announcements"主题,这样才能收到群发通知。在App Delegate或者合适的地方(比如用户登录后)添加代码:

import FirebaseMessaging

// 订阅公告主题
Messaging.messaging().subscribe(toTopic: "announcements") { error in
  if let error = error {
    print("订阅主题失败: \(error.localizedDescription)")
  } else {
    print("成功订阅公告主题")
  }
}

关键注意事项

  • Twitter事件过滤:上面的代码只处理原创推文,如果你需要包含转发或回复,可以调整newTweet的筛选条件。
  • 通知内容优化:推文里的链接、@提及可以适当处理,比如把长链接转成短链,或者去掉无关@用户,让通知更简洁。
  • Webhook可靠性:Twitter会重试失败的事件,所以你的Functions要保证幂等性(比如记录已处理的tweetId,避免重复发送推送)。
  • 权限审核:Twitter的Account Activity API需要审核,记得在申请时清晰说明你的使用场景,通过率很高。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:05:33