久しぶりの投稿になります。Android Studioで開発している途中にバージョンで悩んだ内容をまとめておきたいと思います。
Google Mapが表示されない
Google MapをAndroidで利用する場合、Appレベルのbuild.gradleに'com.google.android.gms:play-services-maps'を追加する必要があります。その時にバージョンを指定するのですが、バージョンってなるべく最新を使おうとしますね?ここで問題が生じます。私の場合、16.0.0を使っていたのですが、16.1.0にした途端、本来ならMapが表示されるFragmentに、下記の文字列が表示されるだけになってしまいました。
App is having trouble with Google Play Services. Please try again
なお、この時のTagetデバイスはAndroid7.0(APIレベル24)です。Targetデバイスをandroid8.1(APIレベル27)に変更したらどうなるか・・・・表示されました。これでは、最新版しかGoogle Mapを利用できなくなるので、どうしたかというと、16.0.0に戻しました。。。。これですべてまるく収まりましたが、今後のバージョン選択に不安が残る結果となってしまいました。
AppSyncが切断される
AppSyncを用いると、MQTTのブローカーを自身で用意しなくても、Pub/Sub通信ができるようになります。内部的にMQTTが使われています。Appsyncを使って順調に開発していたのですが、ある時気づいたら、「あれ、リアルタイムに情報が更新されない!」と気づいて、慌てて原因調査した内容です。デバッガで見てみると、下記のように最初TopicにSubscribe成功するのですが、すぐに切断が走り、再接続をするが、また切断され、再接続・・・と永遠に繰り返す動作になっていました。何が原因か不明でしたので、新規でからのアプリを作り、AppsyncのSubscribeだけ記述しても同じ現象となったため、これもバージョン関係の問題だと思い、バージョンを変えて試してみました。
V/RealSubscriptionManager: Subscription Infrastructure: Successful connection reported! V/RealSubscriptionManager: Subscription Infrastructure: Wait interrupted. V/RealSubscriptionManager: Subscription Infrastructure: Connection successful for clientID [xxxxxxxxxx]. Will subscribe up to 1 topics V/RealSubscriptionManager: Subscription Infrastructure: Subscribing to MQTT topic:[xxxx] V/RealSubscriptionManager: Subscription Infrastructure: Made [1] MQTT clients V/RealSubscriptionManager: Subscription Infrastructure: Unmuting the new clients [1] in total V/MqttSubscriptionClient: Subscription Infrastructure: Set subscription message transmitting to true for client Subscription Infrastructure: Set Connection transmitting to true for client V/RealSubscriptionManager: Subscription Infrastructure: Muting the old clients [ 1] in total V/MqttSubscriptionClient: Subscription Infrastructure: Set subscription message transmitting to false for client V/RealSubscriptionManager: Subscription Infrastructure: Closing the old clients [1] in total V/MqttSubscriptionClient: Closing MQTT client D/MqttSubscriptionClient: Subscription Infrastructure: Successfully closed the connection. Client ID V/MqttSubscriptionClient: Subscription Infrastructure: client connection lost for client V/MqttSubscriptionClient: Subscription Infrastructure: Transmitting client connection lost for client V/RealSubscriptionManager: Subscription Infrastructure: onError called com.amazonaws.mobileconnectors.appsync.subscription.SubscriptionDisconnectedException: Client disconnected V/RealSubscriptionManager: Subscription Infrastructure: Attempting to reconnect
この時のAppsyncバージョンは2.8、paho.client.mqttv3は1.2.0、paho.android.serviceは1.1.1、gradle plugin バージョンが3.4.2、gradleバージョンが5.xです。gradle pluginのバージョンを3.3.2に落としてみたところ、ビルドで下記のようなエラーが発生!
ERROR: Value 'main GraphQL source' specified for property '$1' cannot be converted to a file.
意味のわからないエラーでしたが、ググってみたところ、どうやらgradleのバージョン5.x系では発生するということでしたので、今度はgradleのバージョンを4.10.3に落としてみたところ、ビルドエラーも解消し、Appsyncの切断動作もなくなりました。これも、今後が不安な形になってしまいました。