1

我正在尝试运行一个在 android 中获取产品详细信息的简单示例,我使用 java 示例作为指南。 https://github.com/sphereio/sphere-hello-api/tree/master/java

  SphereClient sphere = SphereClient.create(
                new SphereClientConfig.Builder("xxxxxx", "xxxxxx", "xxxxxxxx", Locale.ENGLISH).build());

我收到错误:

io.sphere.client.SphereClientException: null: null

我的 build.gradle:

android { compileSdkVersion 22 buildToolsVersion '22.0.1'

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/ASL2.0'
}

defaultConfig {
    applicationId "com.spheretest"
    minSdkVersion 15
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

} 依赖项 { 编译 fileTree(include: ['*.jar'], dir: 'libs') 编译 'com.android.support:appcompat-v7:22.2.1' 编译 'io.sphere:sphere-java-client: 0.60.0' }

是否有任何 android 示例我可以测试运行以实现与 Sphere 的基本连接?

堆栈跟踪:

    09-10 12:39:27.193  24611-24673/com.spheretest I/System.out﹕ 12:39:27.193 [Sphere-ClientCredentials-refresh-1] DEBUG sphere - [oauth] Refreshing access token.
09-10 12:39:27.195  24611-24611/com.spheretest I/System.out﹕ 12:39:27.194 [main] DEBUG sphere - [cache] Refreshing category tree.
09-10 12:39:27.206  24611-24611/com.spheretest I/System.out﹕ SphereClient== io.sphere.client.shop.SphereClient@76338d
09-10 12:39:27.897  24611-24673/com.spheretest I/System.out﹕ 12:39:27.896 [Sphere-ClientCredentials-refresh-1] DEBUG c.n.h.c.p.n.NettyAsyncHttpProvider -
09-10 12:39:27.897  24611-24673/com.spheretest I/System.out﹕ Non cached request
09-10 12:39:27.897  24611-24673/com.spheretest I/System.out﹕ DefaultHttpRequest(chunked: false)
09-10 12:39:27.897  24611-24673/com.spheretest I/System.out﹕ POST /oauth/token?grant_type=client_credentials&scope=manage_project%3Aorderjoy-85 HTTP/1.1
09-10 12:39:27.897  24611-24673/com.spheretest I/System.out﹕ Host: auth-v0.sphere.io
09-10 12:39:27.897  24611-24673/com.spheretest I/System.out﹕ Content-Type: application/x-www-form-urlencoded
09-10 12:39:27.897  24611-24673/com.spheretest I/System.out﹕ Connection: keep-alive
09-10 12:39:27.897  24611-24673/com.spheretest I/System.out﹕ Accept: */*
09-10 12:39:27.897  24611-24673/com.spheretest I/System.out﹕ User-Agent: NING/1.0
09-10 12:39:27.897  24611-24673/com.spheretest I/System.out﹕ [ 09-10 12:39:27.897 24611:24673 I/System.out ]
    using Channel
09-10 12:39:27.897  24611-24673/com.spheretest I/System.out﹕ [id: 0xb6a042f6, /192.168.1.3:38555]
09-10 12:39:27.897  24611-24673/com.spheretest I/System.out﹕ [ 09-10 12:39:27.901   774: 3054 I/AccountManagerService ]
    getTypesVisibleToCaller: isPermitted? true
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ 12:39:29.369 [New I/O worker #1] DEBUG c.n.h.c.p.n.NettyAsyncHttpProvider -
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ [ 09-10 12:39:29.370 24611:24662 I/System.out ]
    Request DefaultHttpRequest(chunked: false)
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ POST /oauth/token?grant_type=client_credentials&scope=manage_project%3Aorderjoy-85 HTTP/1.1
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ Host: auth-v0.sphere.io
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ Content-Type: application/x-www-form-urlencoded
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ Connection: keep-alive
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ Accept: */*
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ User-Agent: NING/1.0
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ [ 09-10 12:39:29.370 24611:24662 I/System.out ]
    Response DefaultHttpResponse(chunked: true)
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ HTTP/1.1 401 Unauthorized
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ Server: nginx
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ Date: Thu, 10 Sep 2015 07:09:30 GMT
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ Content-Type: application/json; charset=utf-8
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ Transfer-Encoding: chunked
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ Connection: keep-alive
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ WWW-Authenticate: Bearer realm="sphere", error="invalid_client", error_description="Please provide valid client credentials using HTTP Basic Authentication."
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ Pragma: no-cache
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ Cache-Control: no-store
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ X-Correlation-ID: nginx-e04c33e0-0354-45fd-87eb-69a755c84a81
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ X-Served-By: app12.sphere.prod.commercetools.de
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ X-Served-Config: sphere-auth-ws-1.0
09-10 12:39:29.370  24611-24662/com.spheretest I/System.out﹕ [ 09-10 12:39:29.378 24611:24662 I/System.out ]
    12:39:29.378 [New I/O worker #1] DEBUG c.n.h.c.p.n.NettyAsyncHttpProvider - Sending authentication to https://auth-v0.sphere.io/oauth/token?grant_type=client_credentials&scope=manage_project%3Aorderjoy-85
09-10 12:39:29.383  24611-24662/com.spheretest I/System.out﹕ 12:39:29.383 [New I/O worker #1] DEBUG c.n.h.c.p.n.NettyAsyncHttpProvider -
09-10 12:39:29.383  24611-24662/com.spheretest I/System.out﹕ Non cached request
09-10 12:39:29.383  24611-24662/com.spheretest I/System.out﹕ DefaultHttpRequest(chunked: false)
09-10 12:39:29.383  24611-24662/com.spheretest I/System.out﹕ POST /oauth/token?grant_type=client_credentials&scope=manage_project%3Aorderjoy-85 HTTP/1.1
09-10 12:39:29.383  24611-24662/com.spheretest I/System.out﹕ Host: auth-v0.sphere.io
09-10 12:39:29.383  24611-24662/com.spheretest I/System.out﹕ Content-Type: application/x-www-form-urlencoded
09-10 12:39:29.383  24611-24662/com.spheretest I/System.out﹕ Authorization: Basic SlI0STlQWTZmTU5HbG9JVWVsLWN6UEFPOkN1U2F4NmRCdHhfN0ZmWXNULUg2VUJvXzB6OXpEVGdR
09-10 12:39:29.383  24611-24662/com.spheretest I/System.out﹕ Connection: keep-alive
09-10 12:39:29.383  24611-24662/com.spheretest I/System.out﹕ Accept: */*
09-10 12:39:29.383  24611-24662/com.spheretest I/System.out﹕ User-Agent: NING/1.0
09-10 12:39:29.383  24611-24662/com.spheretest I/System.out﹕ [ 09-10 12:39:29.383 24611:24662 I/System.out ]
    using Channel
09-10 12:39:29.383  24611-24662/com.spheretest I/System.out﹕ [id: 0x04c9853c, /192.168.1.3:38556]
09-10 12:39:29.383  24611-24662/com.spheretest I/System.out﹕ [ 09-10 12:39:29.479 24856:24868 W/com.worklight.common.Logger ]
    com.worklight.common.Logger.setContext(Context) must be called to fully enable debug log capture.  Currently, the 'capture' flag is set but the 'context' field is not.  This warning will only be printed once.
09-10 12:39:30.824  24611-24663/com.spheretest I/System.out﹕ 12:39:30.823 [New I/O worker #2] DEBUG c.n.h.c.p.n.NettyAsyncHttpProvider -
09-10 12:39:30.824  24611-24663/com.spheretest I/System.out﹕ [ 09-10 12:39:30.824 24611:24663 I/System.out ]
    Request DefaultHttpRequest(chunked: false)
09-10 12:39:30.824  24611-24663/com.spheretest I/System.out﹕ POST /oauth/token?grant_type=client_credentials&scope=manage_project%3Aorderjoy-85 HTTP/1.1
09-10 12:39:30.824  24611-24663/com.spheretest I/System.out﹕ Host: auth-v0.sphere.io
09-10 12:39:30.824  24611-24663/com.spheretest I/System.out﹕ Content-Type: application/x-www-form-urlencoded
09-10 12:39:30.824  24611-24663/com.spheretest I/System.out﹕ Authorization: Basic SlI0STlQWTZmTU5HbG9JVWVsLWN6UEFPOkN1U2F4NmRCdHhfN0ZmWXNULUg2VUJvXzB6OXpEVGdR
09-10 12:39:30.824  24611-24663/com.spheretest I/System.out﹕ Connection: keep-alive
09-10 12:39:30.824  24611-24663/com.spheretest I/System.out﹕ Accept: */*
09-10 12:39:30.824  24611-24663/com.spheretest I/System.out﹕ User-Agent: NING/1.0
09-10 12:39:30.824  24611-24663/com.spheretest I/System.out﹕ [ 09-10 12:39:30.824 24611:24663 I/System.out ]
    Response DefaultHttpResponse(chunked: true)
4

2 回答 2

1

与此同时,我们致力于为移动设备提供更好的支持。例如,我们为 Android 创建了一个 Hello World,您可以将其用作移动应用程序的起点: https ://github.com/sphereio/commercetools-android-example

在不久的将来,我们将继续扩展对移动平台的支持。

于 2016-02-24T11:07:48.613 回答
1

Commercetools 平台有一个 SDK,可用于所有 JVM 语言(“SPHERE JVM SDK”:https ://github.com/sphereio/sphere-jvm-sdk ),但这需要 Java 8 语言功能,因此不能在 Android 上使用,因为 Android 不是 JVM。

您正在尝试的“旧”SDK(不幸的是仍在 Java Hello World 示例中使用)在技术上与 Android 兼容,但我不建议使用它,因为它不再维护(https://github.com/ commercetools/sphere-play-sdk)。

截至今天,Android 客户端因此直接针对 HTTP API 使用 Android 内置 HTTP 客户端等构建。
实际答案:您可以使用此 Google Glass 演示应用程序(GitHub,MIT 许可证)找到一个有效的 Android 示例: https: //github.com/sphereio/google-glass-demo

一个警告:SPHERE API 的可用 OAuth 授权范围目前还不足以构建一个完全原生的应用程序,包括直接针对 commercetools (SPHERE) API 的结帐。您将不得不考虑要么不进行本机结帐(即 webview),要么(更好地)运行最小的服务器端 API shim,将公共应用程序的内容列入白名单并执行 OAuth 并知道秘密。

对于像上面的谷歌眼镜演示代码这样的原型/概念证明,这不是问题。

于 2015-09-10T12:16:30.880 回答