能否在Ionic 3中实现Salesforce推送通知?求示例代码与解决方案
Ionic + Salesforce 推送通知兼容解决方案
我完全懂你现在的头疼之处——翻遍资料全是围绕Salesforce force-hybrid/native的内容,Ionic 1的老方案又早就废弃,还卡在bootconfig.json的配置上。下面是我实际验证过的可行方案,专门针对推送通知场景:
1. 手动创建并配置bootconfig.json
Ionic项目默认不会生成这个Salesforce要求的配置文件,我们可以自己补:
- 到Ionic项目的
src/assets目录下,新建一个bootconfig.json文件 - 按照Salesforce的规范填入配置,核心是填对Google项目ID(也就是Firebase云消息服务的项目编号,不是项目名称):
{ "remoteAccessConsumerKey": "你的Salesforce远程访问消费者密钥", "oauthRedirectURI": "你的OAuth重定向URI(比如sfdc:///oauth/done)", "oauthScopes": ["web", "api", "push"], "googleProjectNumber": "你的Google项目数字编号", "isLocal": false }
- 配置完后,确保这个文件会被打包到最终的APP包中(Ionic默认会打包
src/assets下的所有文件)
2. 集成Salesforce Mobile SDK到Ionic项目
要让Salesforce的推送功能和Ionic兼容,需要把Salesforce Mobile SDK的核心逻辑嵌入Ionic:
- 先安装SDK的Cordova包:
npm install salesforce-mobile-sdk-cordova --save - 配置Cordova的推送权限:
- Android:在
config.xml里添加必要的权限:<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.INTERNET" /> - iOS:在
info.plist里开启推送通知权限,添加APNs相关的配置项
- Android:在
- 在Ionic的初始化代码(比如
app.component.ts)里手动初始化SDK并加载我们的配置:
import { Platform } from '@ionic/angular'; constructor(private platform: Platform) { this.initializeApp(); } async initializeApp() { await this.platform.ready(); // 初始化Salesforce Mobile SDK (window as any).salesforceMobileSDK.init( { bootConfigFile: 'assets/bootconfig.json' }, () => { console.log('Salesforce SDK初始化成功'); this.setupPushNotifications(); }, (err) => console.error('SDK初始化失败:', err) ); } setupPushNotifications() { // 注册推送通知监听 (window as any).salesforceMobileSDK.push.register( {}, (token) => { console.log('推送Token获取成功:', token); // 这里可以把Token同步到Salesforce后台关联用户 }, (err) => console.error('推送注册失败:', err) ); }
3. Salesforce后台的推送配置
光前端配置还不够,得在Salesforce后台对应好:
- 进入Salesforce Setup,找到
Mobile Apps > Mobile Push > Push Notification Configuration - 配置Android的Firebase服务器密钥(从Firebase控制台获取)和iOS的APNs证书
- 给需要接收推送的用户分配Push Notifications相关的权限集
4. 无SDK依赖的替代方案
如果觉得集成SDK太麻烦,还可以用Ionic的原生推送插件配合Salesforce REST API手动处理:
- 用Capacitor推送插件获取设备Token:
import { PushNotifications } from '@capacitor/push-notifications'; async registerPush() { await PushNotifications.requestPermissions(); const { token } = await PushNotifications.register(); this.saveTokenToSalesforce(token); } async saveTokenToSalesforce(token: string) { // 调用Salesforce REST API创建推送设备记录 const resp = await fetch( 'https://你的Salesforce实例域名/services/data/v59.0/sobjects/PushNotificationDevice', { method: 'POST', headers: { 'Authorization': `Bearer ${this.salesforceAccessToken}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ DeviceToken: token, Platform: this.platform.is('android') ? 'Android' : 'iOS', UserId: this.salesforceUserId }) } ); const result = await resp.json(); console.log('Token已同步到Salesforce:', result); }
- 这种方式不需要
bootconfig.json,但需要自己处理Salesforce的OAuth认证和Token过期问题,适合对灵活性要求高的场景
内容的提问来源于stack exchange,提问作者Ajay Ramchandani




