pbm*_*pbm 2 google-app-engine android google-cloud-messaging
我的APK的调试版本总是成功注册到GCM.我刚刚构建了我的APK的第一个版本.我可以通过Android Studio在我连接USB的设备上安装和运行发布版本.但是,发布版本的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();
}
Run Code Online (Sandbox Code Playgroud)
当此代码运行时,这是日志:
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
Run Code Online (Sandbox Code Playgroud)
我已经缩小了与我的构建中需要GCM类的proguard剥离相关的问题.如果我在build.gradle中设置"minifyEnabled false",问题就会消失.我正在使用Google Play服务API级别7.8.0.页面https://developers.google.com/android/guides/setup说:
"ProGuard指令包含在Play服务客户端库中以保留所需的类.And Grarow的Android插件会自动将ProGuard配置文件附加到AAR(Android ARchive)包中,并将该包附加到ProGuard配置中.在项目创建期间,Android Studio自动创建ProGuard配置文件和build.gradle属性以供ProGuard使用.要在Android Studio中使用ProGuard,必须在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>;
}
Run Code Online (Sandbox Code Playgroud)
请参阅https://developers.google.com/api-client-library/java/google-http-java-client/setup#proguard.
| 归档时间: |
|
| 查看次数: |
1998 次 |
| 最近记录: |