如何将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)与原逻辑兼容
验证注意事项
- 使用当前维护的Titanium SDK版本(建议12.x及以上),旧版本可能不支持新FCM模块
- 确保Firebase配置参数准确无误,替换代码中的占位符
- 必须在真实设备上测试,模拟器/模拟器无法获取有效FCM令牌
内容的提问来源于stack exchange,提问作者VAAA
相关产品推荐
相关产品推荐

