android - 将 Salesforce 数据与 Android 原生应用程序集成
问题描述
如何在不登录 Salesforce 的情况下访问本机应用程序Salesforce
中的记录。android
我使用了连接app(Salesforce)
的方法,但首先在 Android 应用程序中,它会在salesforce
我访问Salesforce
记录之后要求登录。
是否有任何方法无需登录 Android 应用程序即可访问 Salesforce 记录?
解决方案
对于在没有登录凭据的情况下在 Android Native App 中访问 Salesforce 记录,您首先需要从 salesforce 获取访问令牌。
要获取访问令牌,您可以点击此链接。 https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/quickstart_oauth.htm
获取令牌后,您需要进行 REST 调用以获取 Salesforce 记录。
包 com.example.admin.myapplication;
公共类 MainActivity 扩展 Activity {
// The connection data
private static final String query = "SELECT Name, Id from Account";
private static final String clientId = "Your salesforce consumer Key";
private static final String clientSecret = "Secret Key";
// THis is meaningless in our context
private static final String redirectUri = "Redirect URI";
//private static final String environment = "https://harishgakhar40-dev-ed.my.salesforce.com";
private static final String environment = "https://login.salesforce.com";
private static String tokenUrl = null;
private static final String username = "salesforce Username";
private static final String password = "salesforce password + security token";
private static String accessToken = null;
private static String instanceUrl = null;
private ArrayAdapter<String> listAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create list adapter
listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());
((ListView) findViewById(R.id.contacts_list)).setAdapter(listAdapter);
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
// Creating HTTP client
HttpClient httpClient = new DefaultHttpClient();
tokenUrl = environment + "/services/oauth2/token?grant_type=password&client_id=" + clientId + "&client_secret=" + clientSecret + "&username=" + username + "&password=" + password;
HttpPost httpPost = new HttpPost(tokenUrl);
// Building post parameters
// key and value pair
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
nameValuePair.add(new BasicNameValuePair("Content-Type", "application/json"));
try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
} catch (UnsupportedEncodingException e){
// writing error to Log
e.printStackTrace();
}
JSONTokener tokener;
String accessToken,instanceURL;
JSONArray finalResult;
// Making HTTP Request
try {
HttpResponse response = httpClient.execute(httpPost);
int code = response.getStatusLine().getStatusCode();
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
String json = reader.readLine();
JSONObject jObj = new JSONObject(json);
accessToken = jObj.getString("access_token");
instanceURL = jObj.getString("instance_url");
getAccountData(accessToken, instanceURL);
} catch (Exception e) {
e.getMessage();
}
}
public void getAccountData(String access_token, String instance_url) {
DefaultHttpClient client = new DefaultHttpClient();
String url = instance_url + "/services/data/v20.0/query/?q=";
String soqlQuery = "Select Id, Name, BillingStreet, BillingCity, BillingState From Account ";
try
{
url += URLEncoder.encode(soqlQuery, "UTF-8");
}
catch(UnsupportedEncodingException e){}
HttpGet getRequest = new HttpGet(url);
getRequest.addHeader("Authorization", "OAuth " + access_token);
try {
HttpResponse response = client.execute(getRequest);
String result = EntityUtils.toString(response.getEntity());
JSONObject object = (JSONObject) new JSONTokener(result).nextValue();
JSONArray records = object.getJSONArray("records");
listAdapter.clear();
for (int i=0;i<records.length();i++) {
JSONObject record = (JSONObject) records.get(i);
String accountName = record.getString("Name");
Log.v("accountName---- ","accountName ---- "+accountName);
listAdapter.add(accountName);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
推荐阅读
- shell - 将 tshark 输出分配给脚本中的变量
- python - 图像分类深度学习模型显示高精度但给出错误的预测
- java - 如何使用一个适配器从多个微调器中检索单个选择?
- django - 有什么方法可以避免在 django 中引用页面时创建新对象?
- java - 尝试某些请求时出现 Spring 安全性和 Angular 401 错误
- html - 如何在移动设备上缩小标题?
- java - 如何修复“不正确的结果大小:预期 1,实际 0”我正在查询单个对象?
- python - pandas.groupby 中的迭代
- arduino - NodeMCU 在 MQTT 中重置
- security - Rollbar 日志记录 API 密钥