2015-12-22 14 views
5

私はこの問題の解決策を探していました(数分ではなく、数日間)。AndroidデバイスにGoogleアカウントをプログラムで登録しています

登録手順の開始に関する質問ではありませんのでご注意ください。これは、ユーザーとのやりとりなしに自動的に行わなければなりません

カスタムデバイスにGoogleアカウントを追加します(そのうちの1000個)。このアカウントは、ほとんどの場合、端末でGoogle Playストアを有効にするために使用され、新しいバージョンが利用可能になったときにアプリを更新できるようにします。

私の既存のコード(私が試したものの最短抜粋):

AccountManager mgr = AccountManager.get(this); 
Account acc = new Account("[email protected]", "com.google"); 
mgr.addAccountExplicitly(acc, "password", new Bundle())); 

は当然、どのように私は実際にこれを達成するために行くか

java.lang.SecurityException: caller uid 10047 is different than the authenticator's uid 

が得?私のデバイスはそれが唯一の方法ならば障害ではないので、根っからのデバイスです。

+0

私の知る限り、別のApps認証者のアカウントを作成することはできません。ファームウェアと署名キーをお持ちの場合は、ユーザーIDをシステムユーザーIDと共有することができます。この場合、あなたはそれを回避することができます。 (私はこの情報について100%確信していないので、回答として書いていません) – Knossos

+0

チタンバックアップはそれを行うことができます何とかやらなければならない – velis

+2

これはあなたのカスタムデバイスであり、あなたは "Google Playストア"それをGoogleからライセンスしている必要があります。このような状況でGoogleアカウントを事前に設定することについて、GoogleのポリシーがどのようなものかをGoogleに尋ねるのは、それを実行する方法を決定するだけでなく、最初に許可されているかどうかを判断する必要があります。 – CommonsWare

答えて

0

これは明らかに、これは簡単に解決できないものです。私は1つのデバイスの登録を終了し、それからユーザーファイルを取り出しました。ユーザーファイルの場所:/data/system/users/0/accounts.db(デバイスに複数のユーザープロファイルがある場合は、問題のプロファイルに従って最終ディレクトリが異なる場合があります)。

このファイルをアプリの資産に保存しました(gzipped、パッケージ化中に失われるため、拡張子がsomething.gzでないことを確認してください)。

まず私のユーザーがすでに存在する場合、私は確認してください。

AccountManager mgr = AccountManager.get(this); 
for (Account acc: mgr.getAccountsByType("com.google")) { 
    if (acc.name.equalsIgnoreCase("[email protected]")) 
    return; 
} 

それがない場合、私はちょうどステップをスキップします。それ以外の場合は、ユーザーファイルを解凍して既存のファイルを上書きします(suを使用)。次に、再起動して変更が登録されていることを確認します。

+0

もっと良い方法がありますか?これは、accounts.dbにパスワードの電子メールとハッシュが入力されるように、このユーザーアカウントを一度手動で登録したことを前提としています。生のパスワードだけを知っていて、そのハッシュされた形式がわからない場合、最初のステップをスキップする方法がありますか?さらに、たとえそのようなデバイスのモデルがまったく同じであっても、パスワードのハッシュ形式がデバイス間で同じになるかどうかはわかりません。 –

+0

@ThanasisPetsas:実際は、いいえ。それが判明したとき、Googleはいくつかの検出機能を備えています。同じアカウントを使用して50台の端末を使用すると、Playストアの機能が停止しました。そこで、独自のパッケージ更新メカニズムを実装する必要がありました。 – velis

+0

よろしくお願いします。だから、49のデバイスは1つのアカウントでうまくいきましたか?パスワードのハッシュ形式はすべてのデバイスで同じでしたか? –

0

addAccountExplicitly()を使用してGoogleアカウントを追加/作成することはできません。自分のサービスのアカウントのみを追加できます。あなたのデバイスでさえ、Google Webサーバーによって拒否されるため、ルートされています。詳細については、こちらをご覧ください。link

関連する問題