開発FAQ

端末を開発環境/本番環境にしたい

  • iOS

    • Xcodeのビルドの設定により自動的に判別されます。
  • Android

    • Android Studioのビルドの設定により自動的に判別されます。 ただしapplicationIdSuffixなどによりパッケージ名に変更が加わる場合には、正しく設定が反映されないことが有ります。 その場合には、 res/values/logbase.xmlに下記を追加することで制御することができます。

      <bool name="logbase_debug">false</bool>

開発時にデバイスがinactiveになってしまい配信できない

開発時にデバイスが inactive になってしまって配信出来ない場合によくあるケースは下記になります。

  • 証明書 や APIキーを間違っている
    最も疑わしいのは 証明書 や APIキー が誤っていることです。 別のアプリのものを利用してしまっていないか、もしくはプッシュ通知証明書の期限がきれていないかをご確認ください。
  • Xcode の Debug設定 が間違っている
    iOS SDK を Swift にて導入している場合には Xcode の Debug に -D DEBUG を正しく設定されているかご確認ください。 また Release には -D DEBUG が追加されてないこともご確認ください。

SDKの導入バージョンが分からない

下記リンクより SDK のダウンロードページを参照してください。

デバイストークンの取得方法

SDK の提供するコールバックを用いてデバイストークンを取得することが出来ます。

詳細はイベントハンドラのページを参照してください。

SDK 更新方法

ここでは基本的な更新方法を説明します。 各SDKでの更新内容、及び更新時に特別な作業が必要になる場合は SDK ダウンロードページの更新履歴に記載しておりますので合わせてご確認ください。

LogBase iOS SDK

  • CocoaPods を使用している場合
    コマンドラインから以下を実行します。

    pod update LogPush
  • CocoaPods を使用していない場合
    iOS SDK から最新版の SDK をダウンロード・解凍し、 LogPush.frameworkを上書きします。

開発環境のみ/本番環境のみに配信したい

開発環境にのみプッシュ通知を配信する場合

「プッシュ通知」→「テスト配信」画面をご利用ください。

この画面からの配信は 開発環境の端末のみへ行われます。 また、同画面では配信履歴が表示され、ログも確認することができますのでご活用ください。

それ以外の場合

前述以外で開発環境のみ/本番環境のみへの配信を行う機能は、現在のLogBaseにはございません。

お手数をお掛けしてしまうことになりますが、開発環境のみへ配信を行いたい端末にテスト用の「タグ」を付与し、 開発環境のみを含む「セグメント」を作成して、配信を行ってください。

デバイストークンが登録されるタイミング

デバイストークンは、トークン取得後、すぐに LogBase サーバへ送信されます。

なお、タグデータおよびイベントデータは、アプリがバックグラウンドへ遷移した際、もしくは起動後60秒毎に LogBase サーバへ送信されます。

カスタムフィールドについて

カスタムフィールドを利用すると、プッシュ通知配信時に追加で情報を付与することができます。

この情報は、アプリ側でパースすることで様々な用途に利用することが可能です。 よくある利用方法としては、特定の画面を開くなどがあります。

iOSの場合

LogBase では APNs へ次のような形でリクエストしています。

{
  "aps": {
    "alert": "Hello user"
  },
  "logpush": {
    "push_token": "d_0123456789"
  },
  "foo": "bar"
}

setOpenHandlerで設定するハンドラーの引数にこのような値が渡されます。 この "foo": "bar" 部分を LogBase のカスタムフィールド欄から入力することで変更可能です。 なお aps に関する設定を入力することでサウンドなどの設定も行うことができます。 設定内容については iOS Developer Library をご覧ください。

Androidの場合

LogBase では FCM へ次のような形でリクエストしています。

{
  "registration_ids": ["REGISTRATION_ID1", "REGISTRATION_ID2"],
  "data": {
    "logpush": {
      "message": "メッセージ",
      "push_token": "d_1234567890",
      "custom_field": {"foo": "bar"}
    }
  }
}

この "custom_field": {"foo": "bar"} における {"foo": "bar"} に相当する部分が LogBase のカスタムフィールド欄から入力できる部分になります。

なお FCM における通知メッセージの仕様詳細は Google の Firebase Cloud Messaging HTTP Protocol をご覧ください。

「無効なサーバーキーです」と表示される

Firebase Console から API キーを発行直後の場合、まだ API キーが有効化されていない可能性があります。 5分ほど待って、再度お試しください。

通知アイコンが真っ白になってしまう

Lollipop (Android 5.0、 API Level 21) から、Android による通知アイコンの処理方法が変わりました。 Lollipop から導入されたマテリアルデザインとの整合性を測るために、円の中に白抜きのアイコンが表示される形式に変更されました。

白抜きのアイコンは既存のアイコンのアルファチャネルのみを参照して OS により生成されます。 そのため全体が不透明な四角いアイコンは、白い四角として表示されます。 Lollipop 以降でこの問題が起きるアプリを Lollipop 未満の端末で動作させた場合、カラーのアイコンが表示されます。

参考: Android 5.0 の動作の変更点-通知

解決策1: targetSdkVersion を 20 に設定する

SDK のバージョンアップによって変更された挙動があるとき、以前の SDK バージョンでの挙動が望ましいときに指定するのが targetSdkVersion です。 通知アイコンの挙動変更は API Level 21 からですので、 targetSdkVersion を 20 に指定することで Lollipop 以降の端末で通知アイコンを以前と同じに挙動にすることができます。 targetSdkVersion を指定した場合は、通知アイコン以外も API Level 20 の挙動になることに注意が必要です。

参考: https://developer.android.com/guide/topics/manifest/uses-sdk-element?hl=ja

解決策2: アプリアイコンをカラーでもアルファチャンネルだけでも違和感がないようにする

白い四角はアルファチャネルだけを取り出しているために生成されます。 アルファチャネルだけ(不透明な部分だけ)を取り出した時に違和感が無いアイコンに変更することでも問題を解消できます。

解決策3: アルファチャネルだけのアイコンを別途指定する

LogPush Android SDK version 1.2.4 以降で、新しいスタイルのアイコンを別途指定できるようになりました。 mipmapあるいはdrawablelp_ic_alpha_onlyという名前のアイコンを配置することで、Lollipop 以降の端末ではこのアイコンが用いられます。

具体的にはapp/src/main/res/mipmap-*/lp_ic_alpha_only.pngまたはapp/src/main/res/drawable-*/lp_ic_alpha_only.pngとして各解像度用のアイコン画像を配置します。lp_ic_alpha_onlyというリソース名がアプリ内の他のリソース名と重複する場合など、別名のリソースを用いたい場合には、 AndroidManifest.xml<application />直下に <meta-data android:name="net.p_lucky.logpush.icon.alphaOnly" />を指定することができます。

例:

<meta-data android:name="net.p_lucky.logpush.icon.alphaOnly" android:value="my_alpha_only_icon" />

関連事項: アクセントカラー

LogPush Android SDK version 1.2.4 以降で、Lollipop 以降の端末においてアイコンの背景に表示される円の色を指定できるようになりました。

AndroidManifest.xml<application />直下に<meta-data android:name="net.p_lucky.logpush.accent.color" />を指定することで、円の色を指定することができます。

例: #RRGGBBで指定

<meta-data android:name="net.p_lucky.logpush.accent.color" android:value="#00FFBB" />`

例: res/values/colors.xml で定義した色を参照

<meta-data android:name="net.p_lucky.logpush.accent.color" android:value="@color/myBlue" />

例: 色名を指定

<meta-data android:name="net.p_lucky.logpush.accent.color" android:value="red" />

ERROR: APNs 400 Bad Request ~ と表示される

以下のようなエラーが表示されている場合、原因は、Apple社により APNs が一時的に接続を受理しない状況である可能性があります。 この場合には時間をおくことで改善することがございます。

ERROR: APNs 400 Bad Request, connection timed out: api.development.push.apple.com

このエラーは LogBase のサーバーから APNs (Apple Push Notification service) の APNs Provider API (api.development.push.apple.com) へ アクセスしようとした際にタイムアウトが発生したことを示します。

ERROR: APNs 400 Bad Request, Handshake failed

このエラーは LogBase のサーバーから APNs (Apple Push Notification service) の APNs Provider API (api.development.push.apple.com) へ アクセスしようとした際に TLS handshake エラーが発生したことを示します。

App Transport Security(ATS)に対応しているか

LogBaseはApp Transport Security(ATS)に対応しておりますので、ご安心してご利用ください。

2回続けて通知が配信される

iOSにおいてアプリの削除とインストールを何度も繰り返した際に、複数のデバイストークンが同一端末に登録され、 稀に同端末に複数の通知が届いてしまうという事例が報告されています。

詳細な原因および対応策を調査中ですので、もし同様の事象が発生した場合は gh-sales@i-mobile.co.jp までご連絡頂ければ幸いです。

通知許可を取得するタイミングを変更したい

許可を求めたいタイミングで

[LogPush requestDeviceToken]

を呼び出すことで実現できます。

エラー java.lang.NoSuchMethodError: android.databinding.BindingBuildInfo.enableDebugLogs によりビルドできない

Android SDK を導入する際、プロジェクトの Android Gradle Plugin バージョンが 2.3.0 未満の場合、ビルド時にエラー java.lang.NoSuchMethodError: android.databinding.BindingBuildInfo.enableDebugLogs が発生する事例が報告されています。

プロジェクトの Android Gradle Plugin バージョンを 2.3.0 以上に上げてください。