Android SDK配置

这篇文档将介绍如何配置和风天气开发服务中的Android SDK。

隐私声明:和风天气Android SDK不需要电话、位置、设备唯一标识符等任何特殊权限,我们不会也无法通过本SDK收集用户隐私信息。

适配版本

Android 8.0+, minSDK 26

第1步: 创建项目和凭据

请确保已经创建了项目和凭据,并已了解如何使用JWT身份认证

第2步: 安装SDK

下载最新版本:QWeather Android SDK 5.1.0 (JAR MD5:3b7e78e1a355baa8de3dba6699f934f2)

将JAR文件复制到app/libs/目录:

YOUR-PROJECT/
├── app/
│   ├── libs/
│   │   └── QWeather_Public_Android_V5.1.0.jar
│   ├── src/
│   └── build.gradle

修改Gradle配置app/build.gradle文件:

dependencies {
    // 添加以下配置
    implementation files('libs/QWeather_Public_Android_V5.1.0.jar')
    
    // 或者批量添加所有JAR
    implementation fileTree(dir: 'libs', include: ['*.jar'])
}

引用库

implementation libs.eddsa
implementation libs.gson
implementation libs.okhttp

请在混淆文件proguard-rules.pro中加入如下代码

-keep public class com.qweather.sdk.QWeather {
    public *;
}

-keep public class com.qweather.sdk.basic.**{ *; }
-keepclassmembers class com.qweather.sdk.basic** { *; }

-keep public class com.qweather.sdk.parameter.**{ *; }
-keepclassmembers class com.qweather.sdk.parameter** { *; }

-keep public class com.qweather.sdk.response.**{ *; }
-keepclassmembers class com.qweather.sdk.response** { *; }

-keep interface com.qweather.sdk.Callback{  *; }
-keep interface com.qweather.sdk.TokenGenerator{  *; }
-keep public class com.qweather.sdk.JWTGenerator {
    public *;
}

第3步: 添加API Host和Token

初始化QWeather实例

将代码中的YOUR_HOST替换为您的API Host

QWeather.getInstance(MainActivity.this, "{YOUR_HOST}") // 初始化服务地址
        .setLogEnable(true);  // 启用调试日志(生产环境建议设置为 false)

设置Token生成器

提示:Android SDK仅支持JWT身份认证

为安全考虑,请妥善管理您的私钥、项目ID、凭据ID避免明文使用。

// 通过SDK提供的JWTGenerator设置令牌生成器,其实现自TokenGenerator接口
JWTGenerator jwt = new JWTGenerator("{YOUR_PRIVATE_KEY}", // 私钥
                           "{YOUR_PROJECT_ID}", // 项目ID
                           "{YOUR_KID}"); // 凭据ID
instance.setTokenGenerator(jwt);

//NOTE: 开发者也可以通过实现TokenGenerator接口创建自己的令牌生成器

示例代码

请求北京实时天气。

WeatherParameter parameter = new WeatherParameter("101010100")
                .lang(Lang.ZH_HANS)
                .unit(Unit.METRIC);

QWeather.instance.weatherNow(parameter, new Callback<WeatherNowResponse>() {
    @Override
    public void onSuccess(WeatherNowResponse response) {
        Log.i(TAG, response.toString());
    }

    @Override
    public void onFailure(ErrorResponse errorResponse) {
        Log.i(TAG,errorResponse.toString());
    }

    @Override
    public void onException(Throwable e) {
        e.printStackTrace();
    }
});