Problemas al crear historiales de Open Graph: "no se puede generar la historia" y "no se genera la vista previa"
Tengo una aplicación en Facebook (lo llamaremos mygame
), conectado con un juego Android que estoy desarrollando. En esta aplicación para móviles, quiero dejar que los usuarios compartan sus partituras después de un partido. Para esto, he considerado el uso de historias, acciones y objetos Open Graph .
Lo primero que he hecho es crear una acción, "Play" y un objeto "Match", este con una propiedad entera llamada "score". Después de eso, he creado mi primera historia en la forma "Play a Match" usando el botón relativo "Add custom story".
- Facebook amigo recolector muestra SDK no funciona Android
- El inicio de sesión de Facebook no funciona ya que actualizé la aplicación de Firebase a la nueva consola (sólo)
- Grab ID de usuario actual con facebook-android API
- Facebook Single-Sign On: cuando el usuario se desconecta de la aplicación de Facebook, ¿cómo puedo cerrar sesión en mi aplicación?
- Android: Facebook siempre muestra que ya has autorizado el diálogo de la aplicación
Primer problema: todos los ejemplos generados no muestran una vista previa, en su lugar aparece un mensaje rojo, Unable to Generate Story
.
Este problema fue tratado previamente en Stackoverflow, y la causa estaba relacionada con el hecho de que " facebook no tiene ejemplos de la historia para procesar" . Eso no debería ser cierto en mi caso, porque si abro el buscador de objetos puedo ver dos objetos de Match generados automáticamente. ¿Facebook intenta generar historias de ejemplo de esos registros? Si no (o incluso cierto), ¿cuál es el problema?
Segundo problema SOLUCIÓN, VER RESPUESTAS: en Android, simplemente, no puedo probar esta historia debido a una excepción que dice com.facebook.FacebookException: Failed to generate preview for user.
.
El método que he usado para mostrar un diálogo de Facebook con los detalles de esta "partida jugada" es el que se describe aquí: https://developers.facebook.com/docs/android/open-graph#sharedialog-setup
En mi aplicación, el código es el siguiente:
OpenGraphObject setObj = OpenGraphObject.Factory.createForPost("mygame:match"); setObj.setProperty("score", set.getThisUserScore()); setObj.setProperty("title", set.getType().getDisplayString()); setObj.setProperty("url", "http://www.mygame.com"); setObj.setProperty("description", "Can you beat me?"); OpenGraphAction action = GraphObject.Factory.create(OpenGraphAction.class); action.setType("mygame:play"); action.setProperty("match", setObj); FacebookDialog shareDialog = new FacebookDialog.OpenGraphActionDialogBuilder(activity, action, "match").build(); activity.getUiHelper().trackPendingDialogCall(shareDialog.present());
Una vez llamado, el cuadro de diálogo aparece en mi dispositivo, pero se cierra después de un segundo, lanzando la excepción.
Realmente no puedo concentrarme en dónde está el problema (estoy tratando de implementar la forma más sencilla de compartir historias). ¿Están conectados estos dos problemas?
- Publicar en Facebook Fan página a través de la aplicación
- ¿Es posible tener un enlace de aplicación diferido en un mensaje de Facebook?
- Facebook Android SDK Sesión openForPublish no crear una nueva sesión
- Notificaciones de lectura de Android Facebook SDK 3.0
- Facebook FriendPicker no se muestra (Facebook Android SDK Tutorial "Show Friends" no están actualizados)
- Feed de noticias de la pared de facebook a una aplicación para Android
- Cómo utilizar el Facebook Graph Api Cursor basado en la paginación
- Facebook, setReadPermissions y setPublishPermissions
Utilizo este código para publicar en la pared para las propiedades múltiples del objeto.
private void publishPhoto(String imageURL) { Log.d("FACEBOOK", "Post to Facebook!"); try { JSONObject attachment = new JSONObject(); attachment.put("message",text); attachment.put("name", "MyGreatAndroidAppTest"); attachment.put("href", "http://stackoverflow.com/users/909317/sunny"); attachment.put("description","Test Test TEst"); JSONObject media = new JSONObject(); media.put("type", "image"); media.put("src", imageURL); media.put("href",imageURL); attachment.put("media", new JSONArray().put(media)); JSONObject properties = new JSONObject(); JSONObject prop1 = new JSONObject(); prop1.put("text", "Text or captionText to Post"); prop1.put("href", imageURL); properties.put(text, prop1); // u can make any number of prop object and put on "properties" for ex: //prop2,prop3 attachment.put("properties", properties); Log.d("FACEBOOK", attachment.toString()); Bundle params = new Bundle(); params.putString("attachment", attachment.toString()); facebook.dialog(MyProjectActivity.this, "stream.publish", params, new DialogListener() { @Override public void onFacebookError(FacebookError e) { // TODO Auto-generated method stub } @Override public void onError(DialogError e) { // TODO Auto-generated method stub } @Override public void onComplete(Bundle values) { final String postId = values.getString("post_id"); if (postId != null) { Log.d("FACEBOOK", "Dialog Success! post_id=" + postId); Toast.makeText(MyProjectActivity.this, "Successfully shared on Facebook!", Toast.LENGTH_LONG).show(); } else { Log.d("FACEBOOK", "No wall post made"); } } @Override public void onCancel() { // TODO Auto-generated method stub } }); } catch (JSONException e) { Log.e("FACEBOOK", e.getLocalizedMessage(), e); }
}
He resuelto el segundo problema con FacebookException
! Hay una línea equivocada:
setObj.setProperty("score", set.getThisUserScore());
Al ser "puntuación" una propiedad personalizada, la línea debe ser reemplazada por:
setObj.getData().setProperty("score", set.getThisUserScore());
Tenga en cuenta que tuve que buscar profundamente en la documentación para encontrar esto …
- ¿Cómo inyectar una dependencia al probar una actividad de Android sin un marco de terceros?
- Lista de elementos editables en las preferencias de la aplicación?