Androidアプリ開発で AWS Pinpoint を組み込もうとした際に、
Cognito を仕込んだ awsconfiguration.json が読み込まれないことがあったのでメモ。
前提として aws-android-sdk-mobile-client の 2.13.2 を gradle に設定するところから。
この状態でアプリ起動すると、下記のデバッグログが logcat に出力される。
2019-05-20 13:20:18.418 24381-24408/jp.co.pinpoint.test D/AWSMobileClient: getHostedUIJSON: Failed to read config
java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONObject com.amazonaws.mobile.config.AWSConfiguration.optJsonObject(java.lang.String)' on a null object reference
at com.amazonaws.mobile.client.AWSMobileClient.getHostedUIJSONFromJSON(AWSMobileClient.java:636)
at com.amazonaws.mobile.client.AWSMobileClient.getHostedUIJSON(AWSMobileClient.java:655)
at com.amazonaws.mobile.client.AWSMobileClient$2.run(AWSMobileClient.java:569)
at com.amazonaws.mobile.client.internal.InternalCallback$1.run(InternalCallback.java:101)
at java.lang.Thread.run(Thread.java:764)
とりあえず AWSMobileClient.java の実装を確認。
すると、、
JSONObject getHostedUIJSONFromJSON(final AWSConfiguration awsConfig) {
final JSONObject mobileClientJSON = awsConfiguration.optJsonObject("Auth");
if (mobileClientJSON != null && mobileClientJSON.has("OAuth")) {
try {
JSONObject hostedUIJSONFromJSON = mobileClientJSON.getJSONObject("OAuth");
return hostedUIJSONFromJSON;
} catch (Exception e) {
Log.w(TAG, "getHostedUIJSONFromJSON: Failed to read config", e);
}
}
return null;
}
ヌルポが throw されているのは json から “Auth” ノードを参照している部分。
というか、引数の awsConfig が無視されている?
と思ったら、
[MobileClient] Expose network failures during API calls by minbi · Pull Request #922 · aws-amplify/aws-sdk-android
General enhancements and bug fixes. See changelog update.
JSONObject getHostedUIJSONFromJSON(final AWSConfiguration awsConfig) {
final JSONObject mobileClientJSON = awsConfig.optJsonObject("Auth");
if (mobileClientJSON != null && mobileClientJSON.has("OAuth")) {
try {
JSONObject hostedUIJSONFromJSON = mobileClientJSON.getJSONObject("OAuth");
return hostedUIJSONFromJSON;
} catch (Exception e) {
Log.w(TAG, "getHostedUIJSONFromJSON: Failed to read config", e);
}
}
return null;
}
うん、2.13.4 で修正されていました。。
ちゃんと引数で受け取った awsConfig を見てくれている。
ということで build.gradle を修正
implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.13.4@aar') {
transitive = true
}
これで logcat に問題のデバッグログが表示されなくなりました。
以上です!
コメント