Skip to content
This repository has been archived by the owner on Apr 1, 2024. It is now read-only.

initializePush初期化を実施する直後に、端末情報のカスタムフィルドを登録しようとするとエラーが発生しています #114

Open
thuydg opened this issue Feb 21, 2023 · 0 comments

Comments

@thuydg
Copy link
Contributor

thuydg commented Feb 21, 2023

不具合の概要(Description of bug)

  • SDKのバージョン(SDK version) : v1.3.0
  • 不具合が発生した環境(Environment requirement): Android Studio 2021
  • 不具合を再現させる手順・サンプルコード(Step for Reproduce bug / Sample code)
    • 初期化を実施直後に端末情報をカスタムフィルドを登録しようとすると、初回アプリで実施すると、エラーが発生しています
    • 検証コード
        NCMB.initialize(this.applicationContext, "APPKEY","CLIENTKEY")
        NCMB.initializePush(this.applicationContext)

        //NCMBInstallationのインスタンスを作成
        val installation = NCMBInstallation.currentInstallation
//独自フィールドの設定
        try {
            installation.put("addNewKey","addNewField")
        } catch (e: NCMBException) {
            //独自フィールド設定時のエラー処理
        }
        //端末情報の登録
        installation.saveInBackground(NCMBCallback { e, ncmbInstallation ->
            if (e != null) {
                //端末情報登録時のエラー処理
                print("ERROR : " + e.message)
            } else {
                val result = ncmbInstallation as NCMBInstallation
                print("SUCCESS :" + result.getObjectId())
            }
        })
  • エラーメッセージ(Error messages)
Caused by: com.nifcloud.mbaas.core.NCMBException: registrationId is must not be null.
  • エラー原因
    • initializePushを実施することで、デバイストークンの取得を行いますが、非同期処理となっており、デバイストークンの取得が完了し、mobile backendにデバイスを登録する処理が完了しないと、currentInstallationには情報の登録・更新ができません。
  • エラー解消する一時的な対策
    • 暫定的な回避策としては、initializePushとは別でカスタムフィルドの登録を実施するタイミングを分ける必要があります
      もしくは、以下のサンプルを参考にし、deviceTokenを取得処理を呼び出し、取得されたコールバックにて、
      カスタムフィルドの登録を行ってください。
        NCMBInstallation().getDeviceTokenInBackground(NCMBCallback { e, deviceToken ->
            if (e != null) {
                print( "devicetoken GET ERROR : " + e.message)
            } else {
                print("deviceToken :$deviceToken")
                val installationObj = NCMBInstallation.currentInstallation
                if (installationObj != null) {
                    installationObj.deviceToken = deviceToken as String
                    installationObj.put("addNewKey","addNewField") //★カスタムフィルドの登録はこちらで追記してください
                    installationObj.saveInBackground(NCMBCallback { e, ncmbInstallation ->
                        if (e != null) {
                            print("installation SAVE ERROR : " + e.message)
                        } else {
                            val result = ncmbInstallation as NCMBInstallation
                            print("installation DONE ObjectID :" + result.getObjectId())
                        }
                    })
                }
            }
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant