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

如何在Node.js中接收推送?模拟设备获取Airbnb新预订推送可行吗?

在Node.js中模拟Airbnb推送通知接收是否可行?

当然可行!你已经挖到了关键的接口信息,这就成功了一大半。下面我会一步步拆解怎么在Node.js里实现这个方案:

1. 核心思路说明

Airbnb的iOS客户端通过https://api.airbnb.com/v2/air_notification_devices注册推送设备,我们要做的就是在Node.js里模拟这个注册请求,拿到Airbnb返回的推送令牌,然后搭建一个可以接收推送的服务——因为你选的是iphone_gcm类型,本质是对接Firebase Cloud Messaging(FCM),所以后续要基于FCM来接收通知。

2. 注册模拟设备的Node.js实现

首先你需要构造符合要求的POST请求,注意携带正确的Cookie(SRVID)和请求体。这里用axios做示例,用node-fetch也完全可以:

const axios = require('axios');
const { v4: uuidv4 } = require('uuid'); // 用来生成唯一设备ID

async function registerAirbnbPushDevice() {
  // 生成自定义设备ID,用UUID保证唯一性
  const deviceId = uuidv4();
  // 临时令牌可以随便填,Airbnb会返回新的有效令牌
  const tempToken = 'temp-fake-token-123';
  // 替换成你实际抓到的有效SRVID Cookie
  const srvidCookie = 'SRVID=mofi-production-12ab3c456-7defg_172.21.128.38:32350';

  try {
    const response = await axios.post(
      'https://api.airbnb.com/v2/air_notification_devices',
      {
        app_version: '19.08',
        device_type: 'iphone_gcm',
        device_id: deviceId,
        token: tempToken,
        enabled: true
      },
      {
        headers: {
          'Cookie': srvidCookie,
          'Content-Type': 'application/json',
          // 模拟iOS客户端的User-Agent,避免被接口拦截
          'User-Agent': 'Airbnb/19.08 (iPhone; iOS 13.3; Scale/2.00)',
          // 可以补充抓包得到的其他请求头,比如X-Airbnb-API-Key
          'X-Airbnb-API-Key': 'your-captured-api-key'
        }
      }
    );

    const { token: airbnbPushToken, user_id } = response.data.air_notification_device;
    console.log('设备注册成功!Airbnb推送令牌:', airbnbPushToken);
    console.log('关联的房东账号ID:', user_id);
    
    // 把令牌和设备ID存起来,后续用来接收推送
    return { airbnbPushToken, deviceId };
  } catch (error) {
    console.error('注册失败:', error.response?.data || error.message);
    throw error;
  }
}

// 启动注册流程
registerAirbnbPushDevice();

3. 搭建FCM接收服务

因为注册的是iphone_gcm类型,Airbnb会通过FCM给返回的令牌推送通知。你需要搭建一个FCM接收服务,这里用firebase-admin做示例:

前置准备:

  1. 去Firebase控制台创建项目,下载服务账号密钥文件
  2. 确保你的FCM项目可以接收设备推送

示例代码:

const admin = require('firebase-admin');
const express = require('express');
const app = express();
app.use(express.json());

// 初始化Firebase Admin SDK
const serviceAccount = require('./path/to/your-service-account-key.json');
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

const messaging = admin.messaging();

// 方式1:通过Webhook接收FCM推送(需要在Firebase控制台配置Webhook地址)
app.post('/airbnb-push-webhook', (req, res) => {
  const pushPayload = req.body;
  console.log('收到Airbnb推送通知:', pushPayload);
  
  // 解析预订相关信息,比如标题包含"New booking"就是新预订
  if (pushPayload.notification?.title.includes('New booking')) {
    console.log('新预订提醒:', pushPayload.notification.body);
    // 这里可以对接你的房东管理系统,比如发送内部通知、更新数据库等
  }
  
  res.status(200).send('Notification received');
});

// 启动服务
app.listen(3000, () => {
  console.log('FCM接收服务已启动,监听端口3000');
});

4. 需要注意的几个坑

  • Cookie有效期:SRVID Cookie可能会过期,你需要定期从活跃的Airbnb会话中获取新的Cookie,或者模拟登录流程自动更新Cookie
  • 请求头完整性:Airbnb的API可能会验证更多请求头(比如Accept-Language、X-Requested-With),建议通过抓包iOS客户端的完整请求来补充
  • 令牌刷新:Airbnb可能会定期失效推送令牌,你需要写定时任务重新注册设备,或者监听令牌更新的回调
  • 合规性:模拟Airbnb客户端行为要遵守Airbnb的服务条款,避免因违规使用导致账号被封禁

总结

只要你能正确模拟注册请求,并且搭建好FCM接收服务,在Node.js里实现这个方案完全没问题。你已经找到了最关键的注册接口,接下来就是完善请求细节和推送处理逻辑了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:47:46