You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Android原生应用中免登录集成Salesforce数据

无需登录访问Salesforce记录的Android实现方案

嘿,这个问题我帮不少开发者踩过坑——要让Android原生应用不用登录Salesforce就能访问记录,核心是得先在Salesforce端配置开放匿名/访客级别的数据权限,再在Android端做对应调用。下面是几种靠谱的方案:

1. 配置Salesforce Guest User(官方推荐,最稳妥)

这是目前最常用的匿名访问方式,步骤清晰且权限可控:

  • 先在Salesforce里创建一个Experience Cloud站点(以前叫Community),开启站点的访客访问功能
  • 给站点的Guest User配置权限:比如新建一个权限集,给它分配你需要访问的对象(比如Account、Contact)的只读权限,还要确保字段级权限也开放(别漏了关键字段)
  • 回到你的Connected App,把这个Experience Cloud站点添加到OAuth范围里,同时开启「允许访客访问」的设置
  • Android端调用时,直接使用站点生成的Guest User OAuth令牌来请求API,完全不需要用户登录

给你个Android端用Retrofit调用的示例:

interface SalesforceGuestApi {
    @GET("/services/data/v58.0/sobjects/Account")
    suspend fun getPublicAccounts(@Header("Authorization") authHeader: String): Response<AccountListResponse>
}

// 调用时传入Guest User的令牌(从Salesforce站点配置里获取)
val guestAuthToken = "Bearer ${yourGuestAccessToken}"
val api = retrofit.create(SalesforceGuestApi::class.java)
val response = api.getPublicAccounts(guestAuthToken)

2. 直接开放API匿名访问(仅限非敏感公共数据)

如果你的数据是完全公开的(比如公司产品列表这种非敏感内容),可以直接走这种简化方案:

  • 在Salesforce的对象Sharing Settings里,把目标对象的共享规则设置为「公开只读」
  • 在Connected App里关闭强制OAuth登录的限制,同时配置好允许匿名访问的IP范围和CORS规则
  • Android端直接调用Salesforce REST API,不需要携带任何用户身份令牌

⚠️ 注意:这种方式风险很高,所有符合IP/CORS条件的请求都能拿到数据,绝对不能用于敏感数据!

3. 自定义Apex REST匿名端点(灵活控制逻辑)

如果需要更精细的权限控制(比如只返回特定条件的记录),可以写一个Apex REST类来做中间层:

@RestResource(urlMapping='/AnonymousPublicData/*')
global class AnonymousDataController {
    @HttpGet
    global static List<Account> getFilteredAccounts() {
        // 这里可以自定义过滤逻辑,比如只返回标记为公开的账户
        return [SELECT Id, Name, Industry FROM Account WHERE IsPublic__c = true];
    }
}

然后在Salesforce里给这个Apex类配置Guest User的访问权限,Android端直接调用这个自定义端点即可,不需要登录令牌。

几个关键注意事项

  • 不管用哪种方案,都要严格控制数据范围,绝对避免泄露敏感数据
  • 一定要检查Connected App的CORS和IP白名单配置,不然Android app会被跨域拦截,调不通API
  • 测试的时候先在Salesforce的Workbench里验证API能不能匿名访问,没问题再移植到Android端

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

火山引擎 最新活动