我正在尝试创建一个移动应用,最终在其中一项活动中将连接到Android中的Blob存储以传输图像集。
但我甚至无法到达那里,因为其中一个要求是使连接安全,因为客户端可能是来自他的手机的任何人,所以我的第一步是在开始任何交易之前请求SAS令牌。
所以这基本上是我要遵循的两个步骤,
1 - >在我的App Service中实现了一个Azure函数,它返回一个SAS令牌(我从这里获得了这个函数:Sas Token Function )
2 - >尝试从我的Android代码调用该函数并获取我的SAS令牌。
看起来非常简单,我确定它是,链接中的函数解释了要求具体访问所需的http主体,我认为在那里我失败了,下面是我调用函数的代码:
private void getStringFromAzure() throws MalformedURLException {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("container", "uploadedimages");
jsonObject.addProperty("permissions", "Write, Create");
// Create the MobileService Client object and set your backend URL
String yourURL = "https://mydirectory.azurewebsites.net/";
MobileServiceClient mClient = new MobileServiceClient(yourURL, this);
// Your query pointing to yourURL/api/values
ListenableFuture<JsonElement> query = mClient.invokeApi("GetSasToken-Net", jsonObject, "POST", null);
// Callback method
Futures.addCallback(query, new FutureCallback<JsonElement>() {
@Override
public void onSuccess(JsonElement jsonElement) {
final String result = jsonElement.toString();
// Since you are on a async task, you need to show the result on the UI thread
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext, result, Toast.LENGTH_LONG).show();
}
});
}
@Override
public void onFailure(Throwable throwable) {
Log.d(TAG, "onFailure: " + throwable.getMessage());
}
});
}
“InvokeApi”行功能中的代码失败,甚至在警告我将从移动设备连接到Internet之前抛出异常。
我认为可能错误的另一件事是,Azure Get Sas令牌功能中没有任何地方指定我的帐户凭据(我没有开发该功能,但应该可以正常工作,它无论如何都不会让你改变任何东西,通过GitHub导入)
我在这种事情上有很小的基础/背景,我确定我错过了某些东西(或者很多东西),但我真的很感激一只手,这让我发疯了。
PD。已在清单中提供Internet权限。
先谢谢大家,多年后继续在StackOverflow上发帖!