I have been trying to post on google plus stream since morning, but it does not getting posted all contents specified in deeplinkid only the content inside setText() gets posted. here is my code,
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);
I found the solution for sharing on google plus from android:-
Steps :- 1. Generate SH1 Key by the following commands:-
$keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
2:- Create project on google api console and also create client id. https://developers.google.com/+/mobile/android/getting-started
3.Add the google play service library to project from extras.If not exist then download the google play service using sdk manager.
4.Add values in string.xml from /extras/google/google_play_services/samples/plus/res/values/string.xml
5.Add the the permisson in 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.Add the below class in your project
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();
}
}
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 file
<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.Import all the packages ctrl+shift+O
Thanks!!I hope it will work.