[英]GCM registration works for debug APK but not release APK
我的APK的調試版本始終會成功向GCM注冊。 我剛剛構建了APK的第一個發行版。 我可以在連接USB的設備上通過Android Studio安裝和運行發行版。 但是,對於發行版,GCM注冊始終失敗。
private static final String TAG = "GcmRegIntentService";
MyRegistrationEpt backendRegService = getRegistrationService();
try {
synchronized (TAG) {
InstanceID instanceID = InstanceID.getInstance(appContext);
String token = instanceID.getToken(GCM_SENDER_ID, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Log.i(TAG, "before register, token: " + token);
backendRegService.register(token).execute();
}
} catch (Exception ex) {
Log.i(TAG, "Error: " + ex.getMessage());
}
private MyRegistrationEpt getRegistrationService() {
MyRegistrationEpt.Builder builder = new MyRegistrationEpt.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null)
.setRootUrl("https://some_valid_app.appspot.com/_ah/api/")
.setApplicationName(getResources().getString(R.string.app_name));
return builder.build();
}
當此代碼運行時,這是日志:
08-21 12:52:54.225 4145-13398/technology.grandma.margriver I/GcmRegIntentService﹕ before register, token: <some_long_string>
08-21 12:52:55.430 4145-13398/technology.grandma.margriver I/GcmRegIntentService﹕ Error: 404 Not Found
我已經縮小了與在我的構建中剝離Proguard所需的GCM類有關的問題。 如果我在build.gradle中將“ minifyEnabled false”設置為零,問題將消失。 我正在使用Google Play服務API級別7.8.0。 頁面https://developers.google.com/android/guides/setup說:
“ Play服務客戶端庫中包含ProGuard指令,以保留所需的類。Android Gradle插件會自動將ProGuard配置文件添加到AAR(Android ARchive)包中,然后將該包添加到您的ProGuard配置中。在項目創建期間,Android Studio自動創建ProGuard配置文件和build.gradle屬性以供ProGuard使用。要將ProGuard與Android Studio一起使用,必須在build.gradle buildTypes中啟用ProGuard設置。有關更多信息,請參閱ProGuard指南。
我的解釋是,我不需要手動為GCM添加任何proguard規則。 誰能解釋這個錯誤的原因並建議我如何解決?
我解決了這個問題。 該問題不是由Proguard剝離GCM類引起的,而是由Google App Engine API客戶端連接至所需的Proguard剝離類型和注釋引起的。 為了解決這個問題,我在Proguard規則中添加了以下幾行:
# Needed by google-api-client to keep generic types and @Key annotations accessed via reflection
-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault
-keepclassmembers class * {
@com.google.api.client.util.Key <fields>;
}
請參閱https://developers.google.com/api-client-library/java/google-http-java-client/setup#proguard 。
在API控制台中可能需要添加SHA1證書。 對於調試和發布
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.