なおさんのブログ

iOSエンジニアのブログのはずがいろいろ書いてます。

横田バーチャル駅伝2021本日よりスタート

本日からスタートです。 バーチャルの大会は初参加なのでどうなるのでしょうか。

TATTAってアプリを使うらしいんですがAppleWatchとかRUNNETとかと連携してあとは走るだけでいいみたいです。 きちんと記録してくれるか不安。

最低10km走らないといけないらしいですが、週末天気の良い日が続くことを祈るばかりです。 yokota-ekiden.com

Firebaseでいろいろな条件を使ってPush通知をする

はじめに

普段Firebaseを使ってPush通知を実現していますが、全員宛のPush通知を使うばかりでした。 調べてみるといろいろ条件を指定することができるのがわかったのでちょっと調べてみました。

すでにFirebaseを実装済みの前提で話を進めます。

基本的な導入方法は公式ドキュメントを見てください firebase.google.com

準備

今回はイベントとユーザープロパティを使った条件を試すので、アプリにイベントとプロパティを送信するための実装を追加します

Swift
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        // Firebaseの初期化処理
        FirebaseApp.configure()
        
        // ユーザープロパティの送信
        Analytics.setUserProperty("test_male", forName: "test_gender")

        return true
    }
 :
 :
    @IBAction func eventTapped(_ sender: AnyObject) {
        // イベントの送信
        Analytics.logEvent("test_event", parameters: nil)
    }

イベントを条件としたPush通知の方法

さきほどのコードのtest_eventを送ったユーザーに対してPush通知を送信してみます。 イベントを条件にするにはオーディエンスを作成してそれを条件に指定します。

  1. Firebase管理画面からAudiences画面を表示します f:id:naohirotk:20210615092132p:plain
  2. オーディエンスボタンを選択し、カスタムオーディエンスを作成するを選択します f:id:naohirotk:20210615092155p:plain
  3. 条件を指定します。イベントからtest_eventを選択します。 有効期間は今回は30日を選択します f:id:naohirotk:20210615092215p:plain
  4. 無題のオーディエンスtest_audienceと名称を入力して保存を選択します Audiences画面に追加されました。 注意:オーディエンスのユーザーの反映はリアルタイムではなく24時間〜48時間かかります。 f:id:naohirotk:20210615092314p:plain
  5. あとはPush通知を送信するときのターゲットとしてユーザーオーディエンスtest_audienceを指定して送信します。 f:id:naohirotk:20210615112417p:plain

ユーザープロパティを条件としたPush通知の方法

test_gendertest_maleのユーザーを対象にPush通知を送信してみます。

  1. Push通知を送信するときのターゲットとしてユーザープロパティのtest_gendertest_maleを含む場合を条件にして送信します。 f:id:naohirotk:20210615115352p:plain

休眠ユーザーを条件としたPush通知の方法

一定期間アプリを起動していないいわゆる休眠ユーザーにPush通知を送信してみます。 前回のアプリエンゲージメントを条件にすることで実現できます

  1. Push通知を送信するときのターゲットとして前回のアプリエンゲージメントを選択し日数を指定して送信します。 f:id:naohirotk:20210615114110p:plain

最後に

今回の内容以外にもいろいろな条件を指定することができます。そういったものを利用するとPush通知の利用の幅が広がります。有効に使っていきたいと思います

参考資料

qiita.com

FlutterでBundleID・ApplicationIDの変更方法

はじめに

FlutterでBundleID・ApplicationIDの変更する方法がよくわからなかっためちょっと調べてみました

iOS(BundleID)の場合

  1. iOS/Runner.xcworkspaceワークスペースファイルがあるのでこれをXCodeで開きます。

  2. TARGETS-General-Bundle Identiferを変更します。通常のiOSアプリと同じですね。

f:id:naohirotk:20210609153854j:plain

Android(ApplicationID)の場合

1. gradleの変更

android/app/build.gradle/build.gradleapplicationIdを変更します

defaultConfig {
        applicationId "com.flutter.test"
        minSdkVersion 16
        targetSdkVersion 29
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }
2. マニフェストファイルの変更

以下の3つのファイルのpackageを変更します android/app/src/main/AndroidManifest.xml android/app/src/profile/AndroidManifest.xml android/app/src/debug/AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.flutter.test">
  :
  :
</manifest>
3. MainActivityパッケージの変更

パッケージ名に合わせてMainActivity.ktファイルの場所を変更します。

パッケージ名がcom.flutter.testの場合

android/app/src/main/kotlin/com/flutter/test/MainActivity.kt

MainActivity.ktの内のpackageを変更します

package com.flutter.test

class MainActivity: FlutterActivity() {
  :
  :
}

これでiOSAndroidともに変更できました

参考文献

qiita.com

SlackのWebhookの作成のやり方

はじめに

SlackのWebhookを使うケースが増えてきていますが、いつもやり方を忘れてしまいます。 なので自分用のメモも兼ねて載せておきます

  1. 以下にアクセスする slack.com
  2. チャンネルを選択してインテグレーションの追加を選択 f:id:naohirotk:20210601165210p:plain
  3. WebhookURLが発行されるのでそれをコピーして使います。 f:id:naohirotk:20210601165237j:plain

とっても簡単でした。

参考文献

qiita.com

OSアプリでCrashlyticsをカスタマイズしてログを保存する

最初に

Firebaseにはアプリのクラッシュを監視するCrashlyticsという機能があります。ただ標準クラッシュ以外も監視したいとなると自分でいろいろ実装する必要が出てきます。ということでいろいろ調べてみました。

Crashlyticsの基本的な導入部分は公式ドキュメントを見て実装してください。

Crashlytics公式ドキュメント https://firebase.google.com/docs/crashlytics?hl=ja

クラッシュに情報を追加する

以下のような実装をするとクラッシュした際に情報を追加することができます。

[swiftのソース]

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    FirebaseApp.configure()

    // key value形式での情報
    Crashlytics.crashlytics().setCustomValue("str_value", forKey: "str_key")

    // dictionary形式での情報
    let keysAndValues = [
        "str_key1" : "str_value1",
        "str_key2" : "str_value2"]
    Crashlytics.crashlytics().setCustomKeysAndValues(keysAndValues)

    // 単純なテキスト(ログ)
    Crashlytics.crashlytics().log("log text")

    // ユーザーID
    Crashlytics.crashlytics().setUserID("nao123456")

    return true
}

こんな感じで追加した情報が出てきます f:id:naohirotk:20210601164111p:plain f:id:naohirotk:20210601164129p:plain f:id:naohirotk:20210601164141p:plain

クラッシュ以外のタイミングで情報を送信する

クラッシュ以外のタイミングでも送信することができます

let error = NSError(domain: NSCocoaErrorDomain, code: -123, userInfo: nil)
Crashlytics.crashlytics().record(error: error)

非致命的なイベントとしてこんな感じで出てきます f:id:naohirotk:20210601164447p:plain

まとめ

普段Crashlyticsを使っていれば簡単に実装できます。 クラッシュを監視したりもできるので今後は積極的に使っていきたいと思います。

より詳しいことを知りたい方は公式ドキュメントをご覧ください

Firebase Crashlytics のクラッシュ レポートのカスタマイズ(公式ドキュメント) https://firebase.google.com/docs/crashlytics/customize-crash-reports?authuser=0&platform=ios

ついに開設

ITエンジニアは情報発信が大事ということでブログ始めました。

 

開発者ブログのはずなのにいきなり我が家の猫の写真から始まります。

きちんと続けられるのか?どうなるんでしょう?

f:id:naohirotk:20210528170840j:plain

もみじ(可愛い子)