質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.93%

iPhoneアプリ identifierForVendorの値がアップデートが変わる

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 7,606

norihiko

score 9

iPhoneアプリで、会員証を表示させるアプリを作っております。
会員証なので、各iPhoneを識別させるために、
[UIDevice currentDevice].identifierForVendor
で、uuidを取得し、各iPhoneを識別し、サーバー側からは会員番号を返し、
それを表示させています。
したがいまして、同じuuidがくれば、常に同じ会員番号が返されるのですが、

アプリをアップデートし、既にインストール済のiPhoneで更新をかけると、
[UIDevice currentDevice].identifierForVendor
で取得するuuidが変わってしまいます。

本現象の原因、解決策がございましたら、ご教授いただけると幸いです。

本件、いろいろ調べてもこの現象が出ているという声はないようで、
一点気になる点は、弊社では、本アプリは元のソースがあり、
元のソースをどんどんカスタマイズさせ、
それを複製させるということを行っております。
(Bundle Identifierをはじめ必要な情報を元のソースから書き換えます)
アップデートする際も、最初に公開したソースを改修するのではなく、
カスタマイズされた元のソースの必要な箇所(Bundle Identifierなど)を
書き換えてアップデートされたソースを作り、app storeにアップいたします。
Bundle Identifierは当該アプリと同じなので、app storeでも当該アプリが
アップデートされたものと認識してくれています。
しかしながら、アップデート後の[UIDevice currentDevice].identifierForVendorで得られるuuidが
別のuuidを返してきてしまいます。

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • fuzzball

    2016/01/07 16:48 編集

    「カスタマイズされた元のソースの必要な箇所(Bundle Identifierなど)を書き換えて」と、「Bundle Identifierは当該アプリと同じなので」という記述がありますが、Bundle Identifierは「全く同じ」ということで間違いないでしょうか?

    あと、上書きでアップデートしてもidentifierForVendorが変わってしまうということでしょうか?(一旦アプリを削除してからアップデートするのではなく)

    キャンセル

  • norihiko

    2016/01/07 17:01

    Bundle Identifierは全く同じで間違いないかにつきまして、iTunes Connectでアップデートしたソースをアップする際に、別のBundle Identifierだと見た目が同じでも違うアプリになってしまうと思っており、iTunes Connectの方で当該アプリのアップデートになっているので全く同じBundle Identifierで間違いないと思っておりますが、当該アプリのアップデートでも違いBundle Identifierでできてしまうことがありますでしょうか。(逆質問ですみません)

    identifierForVendorが変わってしまうのは、アプリの削除ではなく、アップデートでということで間違いはないです。
    よろしくお願いいたします。

    キャンセル

  • fuzzball

    2016/01/07 17:34

    質問に関しては分かりません。(出来そうでもあり、出来なさそうでもあり)

    キャンセル

回答 3

+1

https://forums.developer.apple.com/thread/4202
によると、昨年5月〜7月頃にAppStoreにバグがあり、この頃に
アップデートしたアプリは不正なidentifierForVendorが
取得されるそうです。

今回のアップデートでidentifierForVendorの値が変わったと
言われているものは、もしかして前回インストールまたはアップデートした
時期が昨年5月〜7月頃だったりしませんか?
まずはその点から確認してみるとよいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/07 16:25

    ありがとうございます。forumの内容をよく確認させていただきます。

    キャンセル

0

気になる内容だったため、少し検証してみました。
画面上にidentifierForVendorの値を表示するだけのアプリをAdHocで生成して
バージョンだけ上げたアプリを作成してiTunes 経由でアップデートしましたが再現しませんでした。

私の場合は、アップルの仕様に振り回されないためにサーバ側でUUIDを生成してデータベース上でユニークになってからクライアント側で保持するようにしています。
もちろんこの仕組みだとアプリをアンインストールされると端末が特定出来ないため、
会員登録などを別途行うことが必要となってしまいます。

うる覚えですが、クライアント側の固有(固定?)の値を使用して端末を特定する手法はリジェクト対象となるような記事を読んだ気がします。
それが広告関連だけだったのか、それとも全てだったのかは定かではないですがその固有の値が万が一、流出した場合に端末を買い換える以外に変更する方法がないのであればかなりリスクだと思います。(値に対してハッシュ値を複数回取得することで元の値を直接保持しない方法を用いれば解読リスクは軽減出来ますが絶対ではありません)

話は少し逸れましたが参考になれば幸いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/07 16:43

    ありがとうございます。
    AdHocをiTunes経由でアップデートして確認というのをやったことなかったので、この方法で確認してみます。実際に確認用アプリを申請して、確認してをやろうとしており、かなり時間がかかっていました。
    追加情報なのですが、そのiPhoneに同一Vendorのアプリが複数あるとこの問題は起こらず、そのVendorのアプリが1個だった場合に発生しております。そのため、社内のiPhoneには自社のアプリがたくさん入っているので、自社で気づきづらい問題でした。

    また、一点教えてください。
    「サーバ側でUUIDを生成してデータベース上でユニークになってからクライアント側で保持するようにしています。」
    こちらは、そのユニークな値をNSUserDefaultsで保存させているということでしょうか。
    よろいくお願いいたします。

    キャンセル

  • 2016/01/08 08:41

    NSUserDefaultsまたはキーチェーン、もしくはSandboxにファイルとして保管など細かい要件があることが多いので場合によって実装方法を変えています。

    キャンセル

0

 UIDevice Class Reference - identifierForVendor

The value changes when the user deletes all of that vendor’s apps from the device and subsequently reinstalls one or more of them. 

「情報の追加・修正の依頼」に書いたことや、norihikoさんのYasuhiroMiyakeさんに対するコメントにも関連するのですが、同一ベンダーのアプリを全て削除するとidentifierForVendorが変わるようなのですが、これと関係はないでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/07 17:05

    ありがとうございます。アプリの削除は行っておらず、ユーザーが自動アップデートされてその後アプリを開くとidentifierForVendorで別のuuidになってしまいます。

    キャンセル

  • 2016/01/07 17:16 編集

    YasuhiroMiyakeさんへのコメントにある「そのiPhoneに同一Vendorのアプリが複数あるとこの問題は起こらず」を見て、まさにこれのことだ!と思ったのですが‥。
    ただ、アップデート時のプロセスが「ダウンロード→旧Ver削除→新Verインストール」だとすると、一瞬だけアプリが全て無くなるんですよねw

    キャンセル

  • 2016/01/08 08:37

    > アップデート時のプロセスが「ダウンロード→旧Ver削除→新Verインストール」だとすると、一瞬だけアプリが全て無くなるんですよねw
    初めて知りました。参考になります。

    キャンセル

  • 2016/01/08 09:12

    いや、実際にどういうプロセスなのかは知らないですよ。可能性の話です。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る