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

如何将Appcelerator设备令牌转换为FCM令牌及旧应用令牌获取

解决思路:替换Appcelerator时代的FCM令牌获取方式

由于Appcelerator官方服务已停用,原代码依赖的ti.cloudpush模块(Android端)和旧版Ti.Network推送注册逻辑(iOS端)需替换为**对接原生Firebase Cloud Messaging(FCM)**的实现,直接与FCM服务交互,不再依赖Appcelerator中间服务。


核心改造步骤

1. 替换依赖模块

移除旧的ti.cloudpush模块,改用当前Titanium生态维护的firebase.cloudmessaging模块,这是目前支持FCM的标准模块。

2. Android端令牌获取改造

替换原CloudPush.retrieveDeviceToken逻辑,改用FCM模块API:

exports.requestDeviceToken = function() {
    if (Ti.Platform.model.indexOf('Simulator') !== -1 || Ti.Platform.model.indexOf('Emulator') !== -1) {
        return;
    }
        
    var types = [
        Ti.Network.NOTIFICATION_TYPE_BADGE,
        Ti.Network.NOTIFICATION_TYPE_ALERT,
        Ti.Network.NOTIFICATION_TYPE_SOUND
    ];
    
    if (Ti.Platform.name === 'android') {
        const FCM = require('firebase.cloudmessaging');
        
        // 注册FCM推送
        FCM.registerForPushNotifications();
        
        // 监听令牌获取成功事件
        FCM.addEventListener('didRegisterForRemoteNotifications', function(e) {
            e.deviceToken ? deviceTokenSuccess({deviceToken: e.deviceToken}) : deviceTokenError({error: 'Failed to get FCM token'});
        });
        
        // 监听推送回调
        FCM.addEventListener('didReceiveRemoteNotification', pushNotificationCallback);
    }
    // iOS部分见下文
};

Android额外配置(tiapp.xml)

从Firebase控制台下载的google-services.json中提取配置参数,添加到tiapp.xml:

<android xmlns:android="http://schemas.android.com/apk/res/android">
    <manifest>
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.WAKE_LOCK"/>
        
        <application>
            <meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id"/>
            <meta-data android:name="com.google.firebase.project_id" android:value="你的Firebase项目ID"/>
            <meta-data android:name="com.google.firebase.api_key" android:value="你的API密钥"/>
            <meta-data android:name="com.google.firebase.storage_bucket" android:value="你的存储桶地址"/>
            <meta-data android:name="com.google.firebase.messaging.sender_id" android:value="你的Sender ID"/>
            <meta-data android:name="com.google.firebase.app_id" android:value="你的App ID"/>
            
            <service android:name="appcelerator.firebase.messaging.FCMMessagingService">
                <intent-filter>
                    <action android:name="com.google.firebase.MESSAGING_EVENT"/>
                </intent-filter>
            </service>
        </application>
    </manifest>
</android>

3. iOS端令牌获取改造

替换原Ti.Network注册逻辑,改用FCM模块统一API:

// 接上述Android代码,继续实现iOS部分
else {
    const FCM = require('firebase.cloudmessaging');
    
    // 请求用户通知权限
    Ti.App.iOS.registerUserNotificationSettings({
        types: types,
        success: function() {
            FCM.registerForPushNotifications();
        },
        error: function(e) {
            deviceTokenError({error: e.error});
        }
    });
    
    // 监听令牌获取事件
    FCM.addEventListener('didRegisterForRemoteNotifications', function(e) {
        e.deviceToken ? deviceTokenSuccess({deviceToken: e.deviceToken}) : deviceTokenError({error: 'Failed to get FCM token'});
    });
    
    // 监听推送回调
    FCM.addEventListener('didReceiveRemoteNotification', pushNotificationCallback);
}

iOS额外配置(tiapp.xml)

从Firebase控制台下载的GoogleService-Info.plist中提取配置参数,添加到tiapp.xml:

<ios>
    <plist>
        <dict>
            <key>FirebaseAppID</key>
            <string>你的App ID</string>
            <key>FirebaseProjectID</key>
            <string>你的Firebase项目ID</string>
            <key>FirebaseAPIKey</key>
            <string>你的API密钥</string>
            <key>FirebaseSenderID</key>
            <string>你的Sender ID</string>
            <key>FirebaseStorageBucket</key>
            <string>你的存储桶地址</string>
            <key>UIBackgroundModes</key>
            <array>
                <string>remote-notification</string>
            </array>
        </dict>
    </plist>
</ios>

4. 适配原有回调函数

确保deviceTokenSuccess、deviceTokenError和pushNotificationCallback兼容新的FCM事件参数:

  • deviceTokenSuccess接收的deviceToken为标准FCM令牌,格式与你之前获取的一致
  • pushNotificationCallback需处理FCM返回的通知数据,核心字段(alert、badge、sound)与原逻辑兼容

验证注意事项

  1. 使用当前维护的Titanium SDK版本(建议12.x及以上),旧版本可能不支持新FCM模块
  2. 确保Firebase配置参数准确无误,替换代码中的占位符
  3. 必须在真实设备上测试,模拟器/模拟器无法获取有效FCM令牌

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:06:27