Совместное использование Google Plus из приложения для Android

Я пытаюсь опубликовать в Google Plus поток с утра, но он не отправляет все содержимое, указанное в deeplinkid, только содержимое внутри setText () отправляется. Вот мой код,

Intent shareIntent = new PlusShare.Builder(this) .setText("Hello Android!") .setType("image/png") .setContentDeepLinkId(offrdetails_data.get(0).offerLink, offrdetails_data.get(0).dealTitle, offrdetails_data.get(0).dealDescription, Uri.parse(offrdetails_data.get(0).dealImage)) .getIntent(); startActivityForResult(shareIntent, 0); 

Я просто проверил ваш код с минимальным MainActivity, и он сработал:

 public class MainActivity extends Activity implements View.OnClickListener { private Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton = (Button) findViewById(R.id.button1); mButton.setOnClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onClick(View v) { Intent shareIntent = new PlusShare.Builder(this) .setText("Hello Android!") .setType("image/png") .setContentDeepLinkId("testID", "Test Title", "Test Description", Uri.parse("https://developers.google.com/+/images/interactive-post-android.png")) .getIntent(); startActivityForResult(shareIntent, 0); } } 

Вы уверены, что offrdetails_data.get(0) действительно содержит данные?

Редактировать в ответ на комментарии: Может быть, offrdetails_data.get (0) .offerLink длиннее 512 символов.

Предел для идентификаторов глубоких ссылок равен 512 символам (см. Описание для data-calltoactiondeeplinkid):

https://developers.google.com/+/web/share/interactive#interactive_share_button_attributes

Я нашел решение для совместного использования в google плюс от android: –

Шаги: 1. Сгенерируйте ключ SH1 следующими командами: –

$ Keytool -exportcert -alias androiddebugkey -keystore ~ ​​/ .android / debug.keystore -list -v

2: – Создайте проект на консоли google api, а также создайте идентификатор клиента. https://developers.google.com/+/mobile/android/getting-started

3.Добавьте библиотеку сервисов Google Play для проекта из дополнительных функций. Если этого не существует, загрузите службу воспроизведения Google с помощью диспетчера sdk.

4. Добавьте значения в string.xml из /extras/google/google_play_services/samples/plus/res/values/string.xml.

5. Добавьте разрешающий элемент в androidMenifest.xml

  <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> 

6. Добавьте нижеприведенный класс в свой проект

  public class GooglePlusShareActivity extends Activity implements View.OnClickListener, PlusClient.ConnectionCallbacks, PlusClient.OnConnectionFailedListener, DialogInterface.OnCancelListener { protected static final String TAG = "ShareActivity"; private static final String STATE_SHARING = "state_sharing"; private static final int DIALOG_GET_GOOGLE_PLAY_SERVICES = 1; private static final int REQUEST_CODE_SIGN_IN = 1; private static final int REQUEST_CODE_INTERACTIVE_POST = 2; private static final int REQUEST_CODE_GET_GOOGLE_PLAY_SERVICES = 3; /** The button should say "View item" in English. */ private static final String LABEL_VIEW_ITEM = "VIEW_ITEM"; private EditText mEditSendText; private boolean mSharing; private PlusClient mPlusClient; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.share_activity); mPlusClient = new PlusClient.Builder(this, this, this) .setActions(MomentUtil.ACTIONS) .build(); Button sendButton = (Button) findViewById(R.id.send_interactive_button); sendButton.setOnClickListener(this); mEditSendText = (EditText) findViewById(R.id.share_prefill_edit); mSharing = savedInstanceState != null && savedInstanceState.getBoolean(STATE_SHARING, false); int available = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); if (available != ConnectionResult.SUCCESS) { showDialog(DIALOG_GET_GOOGLE_PLAY_SERVICES); } } @Override protected Dialog onCreateDialog(int id) { if (id != DIALOG_GET_GOOGLE_PLAY_SERVICES) { return super.onCreateDialog(id); } int available = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); if (available == ConnectionResult.SUCCESS) { return null; } if (GooglePlayServicesUtil.isUserRecoverableError(available)) { return GooglePlayServicesUtil.getErrorDialog( available, this, REQUEST_CODE_GET_GOOGLE_PLAY_SERVICES, this); } return new AlertDialog.Builder(this) .setMessage(R.string.plus_generic_error) .setCancelable(true) .setOnCancelListener(this) .create(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(STATE_SHARING, mSharing); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.send_interactive_button: if (!mPlusClient.isConnected()) { // Set sharing so that the share is started in onConnected. mSharing = true; if (!mPlusClient.isConnecting()) { mPlusClient.connect(); } } else { startActivityForResult( getInteractivePostIntent(), REQUEST_CODE_INTERACTIVE_POST); } } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { switch (requestCode) { case REQUEST_CODE_SIGN_IN: case REQUEST_CODE_GET_GOOGLE_PLAY_SERVICES: handleResult(resultCode); break; case REQUEST_CODE_INTERACTIVE_POST: mSharing = false; if (resultCode != RESULT_OK) { Log.e(TAG, "Failed to create interactive post"); } break; } } private void handleResult(int resultCode) { if (resultCode == RESULT_OK) { // onActivityResult is called after onStart (but onStart is not // guaranteed to be called while signing in), so we should make // sure we're not already connecting before we call connect again. if (!mPlusClient.isConnecting() && !mPlusClient.isConnected()) { mPlusClient.connect(); } } else { Log.e(TAG, "Unable to sign the user in."); finish(); } } private Intent getInteractivePostIntent() { // Create an interactive post with the "VIEW_ITEM" label. This will // create an enhanced share dialog when the post is shared on Google+. // When the user clicks on the deep link, ParseDeepLinkActivity will // immediately parse the deep link, and route to the appropriate resource. String action = "/?view=true"; Uri callToActionUrl = Uri.parse(getString(R.string.plus_example_deep_link_url) + action); String callToActionDeepLinkId = getString(R.string.plus_example_deep_link_id) + action; // Create an interactive post builder. PlusShare.Builder builder = new PlusShare.Builder(this, mPlusClient); // Set call-to-action metadata. builder.addCallToAction(LABEL_VIEW_ITEM, callToActionUrl, callToActionDeepLinkId); // Set the target url (for desktop use). builder.setContentUrl(Uri.parse (getString(R.string.plus_example_deep_link_url))); // Set the target deep-link ID (for mobile use). builder.setContentDeepLinkId( getString(R.string.plus_example_deep_link_id), null, null, null); // Set the pre-filled message. builder.setText(mEditSendText.getText().toString()); return builder.getIntent(); } @Override public void onConnected(Bundle connectionHint) { if (!mSharing) { // The share button hasn't been clicked yet. return; } mSharing = false; startActivityForResult(getInteractivePostIntent(), REQUEST_CODE_INTERACTIVE_POST); } @Override public void onDisconnected() { // Do nothing. } @Override public void onConnectionFailed(ConnectionResult result) { if (!mSharing) { return; } try { result.startResolutionForResult(this, REQUEST_CODE_SIGN_IN); } catch (IntentSender.SendIntentException e) { // Try to connect again and get another intent to start. mPlusClient.connect(); } } @Override public void onCancel(DialogInterface dialogInterface) { Log.e(TAG, "Unable to sign the user in."); finish(); } } 

7.Добавьте еще один класс, как показано ниже.

  public class MomentUtil { /** * A mapping of moment type to target URL. */ public static final HashMap<String, String> MOMENT_TYPES; /** * A list of moment target types. */ public static final ArrayList<String> MOMENT_LIST; public static final String[] ACTIONS; static { MOMENT_TYPES = new HashMap<String, String>(9); MOMENT_TYPES.put("AddActivity", "https://developers.google.com/+/plugins/snippet/examples /thing"); MOMENT_TYPES.put("BuyActivity", "https://developers.google.com/+/plugins/snippet/examples /a-book"); MOMENT_TYPES.put("CheckInActivity", "https://developers.google.com/+/plugins/snippet/examples /place"); MOMENT_TYPES.put("CommentActivity", "https://developers.google.com/+/plugins/snippet/examples/blog- entry"); MOMENT_TYPES.put("CreateActivity", "https://developers.google.com/+/plugins/snippet/examples /photo"); MOMENT_TYPES.put("ListenActivity", "https://developers.google.com/+/plugins/snippet/examples/song"); MOMENT_TYPES.put("ReserveActivity", "https://developers.google.com/+/plugins/snippet/examples /restaurant"); MOMENT_TYPES.put("ReviewActivity", "https://developers.google.com/+/plugins/snippet/examples /widget"); MOMENT_LIST = new ArrayList<String>(MomentUtil.MOMENT_TYPES.keySet()); Collections.sort(MOMENT_LIST); ACTIONS = MOMENT_TYPES.keySet().toArray(new String[0]); int count = ACTIONS.length; for (int i = 0; i < count; i++) { ACTIONS[i] = "http://schemas.google.com/" + ACTIONS[i]; } } /** * Generates the "result" JSON object for select moments. * * @param momentType The type of the moment. */ public static ItemScope getResultFor(String momentType) { if (momentType.equals("CommentActivity")) { return getCommentActivityResult(); } if (momentType.equals("ReserveActivity")) { return getReserveActivityResult(); } if (momentType.equals("ReviewActivity")) { return getReviewActivityResult(); } return null; } /** * Generates the "result" JSON object for CommentActivity moment. */ private static ItemScope getCommentActivityResult() { return new ItemScope.Builder() .setType("http://schema.org/Comment") .setUrl("https://developers.google.com/+/plugins/snippet/examples /blog-entry#comment-1") .setName("This is amazing!") .setText("I can't wait to use it on my site!") .build(); } /** * Generates the "result" JSON object for ReserveActivity moment. */ private static ItemScope getReserveActivityResult() { return new ItemScope.Builder() .setType("http://schemas.google.com/Reservation") .setStartDate("2012-06-28T19:00:00-08:00") .setAttendeeCount(3) .build(); } /** * Generates the "result" JSON object for ReviewActivity moment. */ private static ItemScope getReviewActivityResult() { ItemScope rating = new ItemScope.Builder() .setType("http://schema.org/Rating") .setRatingValue("100") .setBestRating("100") .setWorstRating("0") .build(); return new ItemScope.Builder() .setType("http://schema.org/Review") .setName("A Humble Review of Widget") .setUrl("https://developers.google.com/+/plugins/snippet/examples /review") .setText("It is amazingly effective") .setReviewRating(rating) .build(); } } 

Файл 8.Add share_activity.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="20dip"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/share_title" android:paddingBottom="5dip" android:textAppearance="?android:attr/textAppearanceMedium" /> <EditText android:id="@+id/share_prefill_edit" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" android:inputType="" android:text="@string/share_prefill_text" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_marginBottom="30dip" /> <Button android:id="@+id/send_interactive_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/send_interactive_button_name" android:layout_gravity="center_horizontal" /> </LinearLayout> 

9.Выберите все пакеты ctrl + shift + O

Спасибо. Я надеюсь, что это сработает.