Я использую proguard с моим проектом Android. Всякий раз, когда я открываю диалоговое окно общего доступа Facebook для Android, оно становится пустым.
версия facebook SDK 3.23.1
if(FacebookDialog.canPresentShareDialog(thisObj, FacebookDialog.ShareDialogFeature.SHARE_DIALOG)){
OpenGraphObject object = OpenGraphObject.Factory.createForPost("namespace:"+obj.object);
object.setProperty("title", obj.title);
object.setProperty("image", obj.image);
object.setProperty("url", obj.url);
object.setProperty("description", obj.description);
OpenGraphAction action = GraphObject.Factory.create(OpenGraphAction.class);
action.setType("namespace:"+obj.action);
action.setProperty(obj.object, object);
FacebookDialog shareDialog = new FacebookDialog.OpenGraphActionDialogBuilder(thisObj, action, obj.object).build();
fbUiLifecycleHelper.trackPendingDialogCall(shareDialog.present());
}
этот код отлично работает при использовании его без proguard, все легко передается, я также правильно отправил хэши ключей на Facebook для разных используемых подписей.
Всякий раз, когда я использую запутывание Proguard, я получаю пустой заголовок, изображение или описание в общем диалоговом окне, все данные теряются, иногда появляется сообщение об ошибке, а иногда закрывается без ошибки
-сохранить класс com.facebook.** { *; }
-keeppattributes Подпись
Я также использовал много тегов proguard, включая эти, но единственный случай, когда диалог общего доступа работает идеально, - это когда я отключаю обфускацию с помощью тега "-dontobfuscate".
Надеюсь, у кого-то была похожая проблема, и он может мне помочь.
Иногда в журнале отображаются ошибки, такие как ошибка сериализации, я также пробовал много кодов с официального сайта proguard, например следующие, но это никогда не решало проблемы, прошло 2 дня с тех пор, как я искал вопросы в stackoverflow и скомпилировал файл apk, используя различные параметры proguard.
-keepnames class * implements java.io.Serializable
-keepclassmembernames class * implements java.io.Serializable {
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}