実稼働アプリと並行してインストールできるアプリのカスタム ビルドを作成しようとしています。
この回答に従って AAPT を使用してマニフェストを再パッケージ化することにより、カスタム ステージング バージョンを並べてインストールすることに成功しました。私の問題は、両方のアプリで GCM を機能させることです。
を呼び出しますGCMRegistrar.register
が、アプリのステージング バージョンへの応答が得られないようです (GCM 通知は、アプリの製品版でも正常に機能します)。
Google Play 開発者アカウントで新しいドラフト アプリを作成し (アプリ内課金をテストしたいので、Google Play でアプリをドラフトとしてホストする必要があります)、Google API コンソールでステージング アプリ用の新しいプロジェクトを作成しました。 .
使用しようとしているドメインは次のようになります。
- プロダクション = com.mydomain.myapp
- ステージング = com.mydomain.myapp.staging
私が遭遇した最初の問題は、AAPT が GCM パーミッションを変更しないため、GCM が次のエラーで失敗することでした。
Application does not define permission com.mydomain.myapp.staging.permission.C2D_MESSAGE
そこで、AndroidManifest.xml をさらに更新するカスタム ビルド ステップを追加しました。関連するセクションは次のとおりです。
<manifest
...
package="com.mydomain.myapp">
<permission
android:name="com.mydomain.myapp.staging.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.mydomain.myapp.staging.permission.C2D_MESSAGE" />
<permission
android:name="com.mydomain.myapp.staging.MESSAGING_PERMISSION"
android:label="Blah"
android:protectionLevel="normal" >
</permission>
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.mydomain.myapp" />
</intent-filter>
</receiver>
上記<permission>
のエラーを回避するために、タグには新しいパッケージ名が必要なようです。
main<manifest>
タグは元のパッケージ名を保持する必要があります。そうしないと、アプリがクラッシュします。これは、再パッケージ化がインストール時に動的に行われるように見えるためです (つまり、再パッケージ化後にアプリを逆コンパイルすると、このパッケージ名が変更されていないことがわかります)。そのため、パッケージ名のこのインスタンスを変更しないでください。
最終的<receiver>
に元の名前にするか、再パッケージ化した名前にするかはわかりませんが、両方を試しましたが、どちらも機能していないようです.
Google API コンソールからの API アクセス情報は次のとおりです。
STAGING
Key for Android apps (with certificates)
API key: <key>
Android apps: <SHA1>;com.mydomain.myapp.staging
PRODUCTION
Key for Android apps (with certificates)
API key: <key>
Android apps: <SHA1>;com.mydomain
どちらも「ブラウザアプリのキー(リファラーあり)」も持っています。
「Androidアプリのキー」が実際に必要かどうかはわかりませんが、GCMのドキュメントではそれを理解するのが少し難しくなっています.
誰かアイデアはありますか?「Android アプリのキー」が問題の原因なのか、それともステージング アプリが本番アプリのサブドメインであるという事実なのかと思っていました。
もう 1 つの複雑な問題は、Google API コンソールからの変更が反映されるまでにどれくらいの時間がかかるかということです。