友盟第三方分享 QQ QQ空間 微信 新浪 及走過的坑

   這周剛上完新版本 新增了第三方登錄和分享的功能,由於同事推薦就使用了友盟提供的分享和登錄功能,處理時也碰到很多bug 現在抽個時間整理下。

  友盟分享  在百度一下有很多博客也有詳細的介紹,我這裏就不搞這些重複的了。

  友盟的登錄在下一篇再分析,因爲登錄和分享畢竟不好放在同一個類去實現

我的個人建議 不要直接將SDK 直接按集成方法加入到項目裏 這樣很容易出很大的問題,先寫一個自己所需要的功能的demo,然後封裝好,再按配置集成到項目裏,這樣出錯率會下降很多。雖然時間可能會有點多,但比一堆不知道什麼問題的錯誤強。

  大家需要可以先參考別人的處理方法,但一定要去官網看集成方法和APi 這樣就可以少走點彎路,這裏提供一個感覺很好的關於這塊的博客地址 友盟分享  

  由於我現在是最新的SDK 所以可能和別人寫的代碼不一樣 但是SDK 都是方法改了 裏面用法還是差不太多的。

  我的SDK版本 umeng_android_social_sdk_5.2.0_custom.zip

好現在先上demo代碼

首先是MainActivity

package com.ffu365.android;

import java.util.HashMap;
import java.util.Map;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

import com.ffu365.android.R;
import com.umeng.socialize.Config;
import com.umeng.socialize.ShareAction;
import com.umeng.socialize.UMAuthListener;
import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.UMShareListener;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMImage;


public class MainActivity extends Activity implements UMShareListener,
		OnClickListener {

	
	/*
	 * umneg SDK 版本 5.2.0  
	 * 
	 * 
	 */
	private UMShareAPI mShareAPI;
	// private UMSocialService mController;
	private Context context = MainActivity.this;

	
	
	
	
	
	
	UMImage image = new UMImage(this,
			"http://image.7pa.com/data/57a55cb2c9078.png");

	// 設置分享圖片,參數2爲本地圖片的資源引用
	// UMImage image = new UMImage(MainActivity.this,
	// BitmapFactory.decodeResource(getResources(), R.drawable.image));

	// 設置分享圖片,參數2爲本地圖片的路徑(絕對路徑)
	// UMImage image = new UMImage(MainActivity.this,
	// BitmapFactory.decodeFile("/mnt/sdcard/icon.png")));

	// 設置分享音樂 包括縮略圖
	// UMusic music = new
	// UMusic("http://music.huoxing.com/upload/20130330/1364651263157_1085.mp3");
	// music.setTitle("sdasdasd");
	// music.setThumb(new
	// UMImage(ShareActivity.this,"http://www.umeng.com/images/pic/social/chart_1.png"));

	// 設置分享視頻
	// UMVideo video = new
	// UMVideo("http://video.sina.com.cn/p/sports/cba/v/2013-10-22/144463050817.html");

	final SHARE_MEDIA[] displaylist = new SHARE_MEDIA[] { SHARE_MEDIA.WEIXIN,
			SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE,
			SHARE_MEDIA.SINA };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		ProgressDialog dialog =  new ProgressDialog(this);
	    dialog.setTitle("授權中");
	    dialog.setMessage("正在加載···");
	    Config.dialog = dialog;
		
		com.umeng.socialize.utils.Log.LOG = true;
		XHLog.is_debug = true;
		mShareAPI = UMShareAPI.get(this);
		
		mShareBt = (Button) findViewById(R.id.share_bt);

		mShareBt.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				new ShareAction(MainActivity.this).setDisplayList(displaylist)
						.withText("andriod端測試")
						// app內容
						.withTitle("app分享第三方微信測試")
						.withTargetUrl("http://www.baidu.com")// 標題加 鏈接
						.withMedia(image).setCallback(MainActivity.this)//
						.open();
			}
		});

		

	}
	/**
	 * 分享的回調
	 */
	@Override
	public void onCancel(SHARE_MEDIA arg0) {
		// TODO Auto-generated method stub
		Toast.makeText(this, "onCancel 取消", Toast.LENGTH_LONG).show();
	}

	@Override
	public void onError(SHARE_MEDIA arg0, Throwable arg1) {
		// TODO Auto-generated method stub
		Toast.makeText(this, "onError 失敗", Toast.LENGTH_LONG).show();
	}

	@Override
	public void onResult(SHARE_MEDIA arg0) {
		// TODO Auto-generated method stub
		Toast.makeText(this, "onSucced 成功", Toast.LENGTH_LONG).show();

	}

這樣回調還要實現下面這個方法

onActivityResult()
        @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get( this ).onActivityResult( requestCode, resultCode, data);
    }



這裏要分析一下 在按官方文檔集成後會有res文件中layout中 會有這個umeng_socialize_shareboard_item.xml 

它是與分享方法中open()相關的一個dirlog 

new ShareAction(MainActivity.this).setDisplayList(displaylist)
						.withText("andriod端測試")
						// app內容
						.withTitle("app分享第三方微信測試")
						.withTargetUrl("http://www.baidu.com")// 標題加 鏈接
						.withMedia(image).setCallback(MainActivity.this)//
						.open();
			}

如圖 點擊後會出現這樣的佈局



分享面板點擊回調

使用setShareboardclickCallback() 可以進行分享面板不同按鈕的點擊回調,方便開發者進行特殊處理。

分享面板增加自定義按鈕

如果需要對分享面板增加自定義的按鈕,可以通過 ShareAction(this).addButton(String showword,String Keyword,String icon,String Grayicon,int index) 進行設置其中第一個參數是顯示的名字,第二個參數是平臺名稱, 注意這兩個參數需要先聲明 ,第三個參數是按鈕圖標的圖片名字,第四個按鈕是置灰情況下按鈕圖標的圖片名字, 注意圖片直接寫路徑即可,不要.png等後綴 最後一個變量是數標(功能保留)。 對於自定義平臺的監聽需要使用上面提到的分享面板點擊回調,如下:

private ShareBoardlistener shareBoardlistener = new  ShareBoardlistener() {

        @Override
        public void onclick(SnsPlatform snsPlatform,SHARE_MEDIA share_media) {
            if (share_media==null){
                if (snsPlatform.mKeyword.equals("11")){
                    Toast.makeText(ShareActivity.this,"add button success",Toast.LENGTH_LONG).show();
                }

            }
            else {
                new ShareAction(ShareActivity.this).setPlatform(share_media).setCallback(umShareListener)
                        .withText("多平臺分享")
                        .share();
            }
        }
    };




但是如果你的需求不需要這樣,那麼我們查看API 會發現有另一個方法share(); 點擊分享的圖片直接去分享,沒有dirlog選擇,屬於單個分享。

new ShareAction(MainActivity.this).setDisplayList(displaylist)
						.withText("andriod端測試")
						// app內容
						.withTitle("app分享第三方微信測試")
						.withTargetUrl("http://www.baidu.com")// 標題加 鏈接
						.withMedia(image).setCallback(MainActivity.this).share(); }


如果你的需求需要自定義分享的dirlog 那麼去修改XML 文件的佈局就可以。(由於我這邊沒有這樣的需求所以沒有就直接用友盟提供的XML)

接下來我們在BaseApplication.java 進行配置

package com.ffu365.android;

import android.app.Application;

import com.umeng.socialize.PlatformConfig;

public class BaseApplication extends Application {

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();

		//
		 
		//測試
		//你在對應第三方平臺申請的appkey 密鑰等
		PlatformConfig.setQQZone("1105511711", "SozQd64v1Y51Ct6r");
		PlatformConfig.setSinaWeibo("319062931", "a7b4f95381abbf747bxxx6910c963ae8");
		PlatformConfig.setWeixin("wx9509a9xxxac2336a", "60022407xxxx5719a504ca737fdb4db2");
	}
}

這裏要注意的是我們在第三方平臺申請的微博和微信的需要包名的簽名 用簽名工具就可以 友盟有提供 微信申請apk 要至少一週時間審覈。




好,接下來因爲微信分享和微博分享需要兩個回調類

微信的回調類 com.ffu365.android.wxapi.WXEntryActivity  你的註冊第三方對應的包名 .wxapi.WXEntryActivity

微博的回調類 com.ffu365.android.WBShareActivity  你的註冊第三方對應的包名 .WBShareActivity


 微信 WXEntryActivity

package com.ffu365.android.wxapi;

import android.os.Bundle;

import com.umeng.socialize.weixin.view.WXCallbackActivity;

public class WXEntryActivity extends WXCallbackActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}
}

新浪微博 友盟官網

package com.umeng.soexample;

import com.umeng.socialize.media.WBShareCallBackActivity;

/**
 * 
 */
public class WBShareActivity extends WBShareCallBackActivity{
}


我的微博回調類(效果是一樣的,但是我加finish() 是因爲在微博登錄回調那裏關掉回調授權頁面的處理(授權成功回調頁面不關閉),不影響,按情況來推薦先用官網的,不行再試試我的)

package com.ffu365.android;

import android.app.Activity;
import android.os.Bundle;

public class WBShareActivity extends Activity{
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		finish();
	}

}


現在貼配置文件的代碼 請根據你自己的項目去修改 跟這個官網集成步驟就不會出什麼錯

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ffu365.android"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

       <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.SET_DEBUG_APP" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
         android:name="com.ffu365.android.BaseApplication"
        android:theme="@android:style/Theme.Light.NoTitleBar" >
        <activity
            android:name="com.ffu365.android.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
   
    
            
       
        
        
        <activity
            android:name="com.umeng.socialize.editorpage.ShareActivity"
            android:excludeFromRecents="true"
            android:theme="@style/Theme.UMDefault" />
        
 <!-- 這個是配置成我們自己在友盟上面申請的 5576840067e58eab92000363 -->
        <meta-data
            android:name="UMENG_APPKEY"
            android:value="579f0a4367e58e31d100143e" >
        </meta-data> 
        
        <!-- 新浪微博 -->
        <activity
            android:name="com.ffu365.android.WBShareActivity"
            android:configChanges="keyboardHidden|orientation"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity> 
        
	<activity
            android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
            android:configChanges="keyboardHidden|orientation"
            android:windowSoftInputMode="adjustResize"
            android:exported="false" >
        </activity>
        <service 
            android:name="com.sina.weibo.sdk.net.DownloadService"
            android:exported="false">
        </service>
        
		<!--微信  -->
        <activity
            android:name="com.umeng.soexample.wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        
  
   
   	<!--  QQ-->
        <activity
            android:name="com.tencent.tauth.AuthActivity"
            android:launchMode="singleTask"
            android:noHistory="true" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="tencent1105511711" />
            </intent-filter>
        </activity>
        
        
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        
        <activity
            android:name="com.ffu365.android.wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
         </application>

</manifest>


另外 新浪微博分享回調頁面配置問題

新浪微博分享,web頁面顯示:你所訪問的站點在微博的認證失敗,請稍後再試。如有疑問,請聯繫XX。(error:redirect_uri_mismatch) 。這種問題往往發生在新提交了移動應用但未審覈的情況下

解決方法:需要在微博開放平臺的應用基本信息中配置安全域名:sns.whalecloud.com。同時在高級信息中配置OAuth2.0 授權設置:

  • 授權回調頁:

  • http://sns.whalecloud.com/sina2/callback

  • 取消授權回調頁:

  • http://sns.whalecloud.com/sina2/callback





然後就是libs 裏面的配置 直接上圖 






這個有一個值得注意的問題

上面這寫cpu配置so文件中是新浪微博需要的文件   一般選擇一個就好

在我的項目裏armeabi-v7a 這個不能放入項目裏 程序直接崩或黑屏,查找原因是和百度地圖產生了衝突。我當時也找不到解決辦法就直接放棄加載這個so文件了  希望有遇到這樣的問題有解決辦法的朋友可以聯繫我(評論告訴也好)。




SDK裏res 文件最好都導進去,然後在按需求修改


那麼我們這個demo 算是結束了


那麼我們順便在這裏把分享方法封裝成一個工具類 ShareUtil

import android.app.Activity;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.widget.Toast;

import com.qpbox.R;
import com.qpp.http.XHLog;
import com.umeng.socialize.ShareAction;
import com.umeng.socialize.UMShareListener;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMImage;

public class Shareutil {
	
	
	// 設置分享網絡url "http://www.umeng.com/images/pic/social/integrated_3.png"
//		UMImage image = new UMImage(this,
//				"http://image.7pa.com/data/57a55cb2c9078.png");

		// 設置分享圖片,參數2爲本地圖片的資源引用
		// UMImage image = new UMImage(MainActivity.this,
		// BitmapFactory.decodeResource(getResources(), R.drawable.image));

		// 設置分享圖片,參數2爲本地圖片的路徑(絕對路徑)
		// UMImage image = new UMImage(MainActivity.this,
		// BitmapFactory.decodeFile("/mnt/sdcard/icon.png")));

		// 設置分享音樂 包括縮略圖
		// UMusic music = new
		// UMusic("http://music.huoxing.com/upload/20130330/1364651263157_1085.mp3");
		// music.setTitle("sdasdasd");
		// music.setThumb(new
		// UMImage(ShareActivity.this,"http://www.umeng.com/images/pic/social/chart_1.png"));

		// 設置分享視頻
		// UMVideo video = new
		// UMVideo("http://video.sina.com.cn/p/sports/cba/v/2013-10-22/144463050817.html");

	
	
	static final SHARE_MEDIA[] displaylist = new SHARE_MEDIA[] { SHARE_MEDIA.WEIXIN,
			SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.QQ,
			SHARE_MEDIA.SINA };
	
	/**
	 * 
	 * 固定微信分享
	 * @param context
	 * @param title
	 * @param content
	 * @param imageUrl
	 */
	public static void showShareWX(final Context context, String title,
			String content, String url,String imageUrl) {
		UMImage image = new UMImage(context,imageUrl);
		new ShareAction((Activity) context)
		.setDisplayList(SHARE_MEDIA.WEIXIN_CIRCLE)
		.setCallback(new UMShareListener() {
			@Override
			public void onResult(SHARE_MEDIA arg0) {
				Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
			}

			@Override
			public void onError(SHARE_MEDIA arg0, Throwable arg1) {
				Toast.makeText(context, "分享失敗", Toast.LENGTH_LONG).show();
			}

			@Override
			public void onCancel(SHARE_MEDIA arg0) {
				Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show();
			}
		}).withTitle(title)
		.withMedia(image)
		.withTargetUrl(url)
		.withText(content)
		.share();
	}
	/**
	 * 
	 * 固定微信朋友圈分享
	 * @param context
	 * @param title
	 * @param content
	 * @param imageUrl
	 */
	public static void showShareWXF(final Context context, String title,
			String content, String url,String imageUrl) {
		UMImage image = new UMImage(context,imageUrl);
		new ShareAction((Activity) context)
		.setDisplayList(SHARE_MEDIA.WEIXIN)
		.setCallback(new UMShareListener() {
			@Override
			public void onResult(SHARE_MEDIA arg0) {
				Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
			}

			@Override
			public void onError(SHARE_MEDIA arg0, Throwable arg1) {
				Toast.makeText(context, "分享失敗", Toast.LENGTH_LONG).show();
			}

			@Override
			public void onCancel(SHARE_MEDIA arg0) {
				Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show();
			}
		})
		.withTitle(title)
		.withMedia(image)
		.withTargetUrl(url)
		.withText(content)
		.share();
	}
	
	/**
	 * 
	 * 固定QQ分享
	 * 
	 * @param context
	 * @param title
	 * @param content
	 * @param imageUrl
	 */
	public static void showShareQQ(final Context context, String title,
			String content, String url,String imageUrl) {
		UMImage image = new UMImage(context,imageUrl);
		new ShareAction((Activity) context)
		.setDisplayList(SHARE_MEDIA.QQ)
		.setCallback(new UMShareListener() {
			@Override
			public void onResult(SHARE_MEDIA arg0) {
				Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
			}

			@Override
			public void onError(SHARE_MEDIA arg0, Throwable arg1) {
				Toast.makeText(context, "分享失敗", Toast.LENGTH_LONG).show();
			}

			@Override
			public void onCancel(SHARE_MEDIA arg0) {
				Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show();
			}
		}).withTitle(title)
		.withMedia(image)
		.withTargetUrl(url)
		.withText(content)
		.share();
	}
	
	/**
	 * 
	 * 固定QQ空間分享
	 * 
	 * @param context
	 * @param title
	 * @param content
	 * @param imageUrl
	 */
	public static void showShareQQZ(final Context context, String title,
			String content,String url, String imageUrl) {
		UMImage image = new UMImage(context,imageUrl);
		new ShareAction((Activity) context)
		.setDisplayList(SHARE_MEDIA.QZONE)
		.setCallback(new UMShareListener() {
			@Override
			public void onResult(SHARE_MEDIA arg0) {
				Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
			}

			@Override
			public void onError(SHARE_MEDIA arg0, Throwable arg1) {
				Toast.makeText(context, "分享失敗", Toast.LENGTH_LONG).show();
			}

			@Override
			public void onCancel(SHARE_MEDIA arg0) {
				Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show();
			}
		}).withTitle(title)
		.withMedia(image)
		.withTargetUrl(url)
		.withText(content)
		.share();
	}
	/**
	 * 
	 * 固定新浪微博分享
	 * 
	 * @param context
	 * @param title
	 * @param content
	 * @param imageUrl
	 */
	public static void showShareSina(final Context context, String title,
			String content,String url, String imageUrl) {
		UMImage image = new UMImage(context,imageUrl);
		new ShareAction((Activity) context)
		.setDisplayList(SHARE_MEDIA.SINA)
		.setCallback(new UMShareListener() {
			@Override
			public void onResult(SHARE_MEDIA arg0) {
				Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
			}

			@Override
			public void onError(SHARE_MEDIA arg0, Throwable arg1) {
				Toast.makeText(context, "分享失敗", Toast.LENGTH_LONG).show();
			}

			@Override
			public void onCancel(SHARE_MEDIA arg0) {
				Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show();
			}
		}).withTitle(title)
		.withMedia(image)
		.withTargetUrl(url)
		.withText(content)
		.share();
	}
	
	/**
	 * Win 純圖片分享
	 * @param context
	 * @param title
	 * @param content
	 * @param imageUrl
	 */
	public static void showShareImg(final Context context, String title,
			String content, String imageUrl) {
		
		UMImage image = new UMImage(context,imageUrl);
		new ShareAction((Activity) context)
				.setDisplayList(displaylist)
				.setCallback(new UMShareListener() {
					@Override
					public void onResult(SHARE_MEDIA arg0) {
						Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
					}

					@Override
					public void onError(SHARE_MEDIA arg0, Throwable arg1) {
						Toast.makeText(context, "分享失敗", Toast.LENGTH_LONG).show();
					}

					@Override
					public void onCancel(SHARE_MEDIA arg0) {
						Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show();
					}
				}).withTitle(title)
				.withMedia(image)
				.withText(content)
				.open();
	}
	
	/**
	 * 只分享內容
	 * @param context
	 * @param content
	 * @param url
	 * @param imageUrl
	 */
	public static void showShareContents(final Context context, 
			String content, String url, String imageUrl) {
		if("".equals(url)){
			url="http://ads.7pa.com/kefu/7pa/";
		}
		UMImage image = new UMImage(context,imageUrl);
		new ShareAction((Activity) context)
				.setDisplayList(displaylist)
				.setCallback(new UMShareListener() {
					@Override
					public void onResult(SHARE_MEDIA arg0) {
						Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
					}

					@Override
					public void onError(SHARE_MEDIA arg0, Throwable arg1) {
						Toast.makeText(context, "分享失敗", Toast.LENGTH_LONG).show();
					}

					@Override
					public void onCancel(SHARE_MEDIA arg0) {
						Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show();
					}
				})
				.withMedia(image)
				.withTargetUrl(url)
				.withText(content)
				.open();
	}
	
	/**
	 * Win 總分享
	 * @param context
	 * @param title
	 * @param content
	 * @param url
	 * @param imageUrl
	 */
	public static void showShare(final Context context, String title,
			String content, String url, String imageUrl) {
		UMImage image = new UMImage(context,imageUrl);
		new ShareAction((Activity) context)
				.setDisplayList(displaylist)
				.setCallback(new UMShareListener() {
					@Override
					public void onResult(SHARE_MEDIA arg0) {
						Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
					}

					@Override
					public void onError(SHARE_MEDIA arg0, Throwable arg1) {
						Toast.makeText(context, "分享失敗", Toast.LENGTH_LONG).show();
					}

					@Override
					public void onCancel(SHARE_MEDIA arg0) {
						Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show();
					}
				})
				.withTitle(title)
				.withText(content)
				.withMedia(image)
				.withTargetUrl(url)
				.open();
	}
	/**
	 * 分享盒子本地
	 * @param context
	 * @param title
	 * @param content
	 * @param url
	 * @param imageUrl
	 */
	public static void showShareLocal(final Context context, String title,
			String content, String url) {
		//UMImage image = new UMImage(context,src);
		UMImage image = new UMImage(context,
		 BitmapFactory.decodeResource(context.getResources(), R.drawable.ico_qpp));
		new ShareAction((Activity) context)
				.setDisplayList(displaylist)
				.setCallback(new UMShareListener() {
					@Override
					public void onResult(SHARE_MEDIA arg0) {
						Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
					}

					@Override
					public void onError(SHARE_MEDIA arg0, Throwable arg1) {
						Toast.makeText(context, "分享失敗", Toast.LENGTH_LONG).show();
					}

					@Override
					public void onCancel(SHARE_MEDIA arg0) {
						Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show();
					}
				})
				.withTitle(title)
				.withText(content)
				.withMedia(image)
				.withTargetUrl(url)
				.open();
	}

}

這個就詳細說明 大家看代碼就都知道了


這裏說說一些坑爹的東西 (轉一些前人的吐槽) 轉載地址 http://blog.csdn.net/uxyheaven/article/details/40426465

title屬性的效果不一致

qq空間和微信不設置標題,標題就默認顯示內容了.就是說內容重複顯示了2次

微信朋友圈如果設置了標題,那麼內容就不顯示了

浪新微博沒這個功能


ui不合適

產品看了默認的ui,手機上勉強能接受,可這個ui放到ipad上確實有些醜,這樣就得寫一套界面了,10分鐘他妹啊.後來見到效果圖的時候發現手機的下面多了一個取消按鈕,產品覺得現在還是有小白用戶不知道點空白區域可以取消.手機界面的效果圖和平板界面的效果圖還不一樣,好吧,又多一套.

純文字展示效果不一樣

發給微信好友的時候,不能跳轉到中間頁.

解決方案:需求改成了純文字的話就加個默認圖片

視頻展示效果不一樣

又是微信,發視頻的分享時,直接點擊就播放了,不能跳轉到中間頁面.浪新微博則是有些視頻只顯示一個url,點擊就下載了.

解決方案:需求改成了視頻分享當圖片分享,發一個視頻預覽圖出去

跳轉鏈接的設置不一樣

微信和qq的需要每次都設置,浪新的竟然沒這個設置.

解決方案:qq和微信在發出去的時候都單獨設置跳轉鏈接,浪新則是吧鏈接附加在文本後面,浪新微博還有個長度限制,過長的文本得剪短一些.


 最後

 你在demo運行得很正常,但是一添加到項目裏就很多問題


你可以百度一下,或者去友盟官網的論壇看看那些帖子 希望會對你有幫助 (順便吐槽論壇發了幾個我碰到的問題沒人鳥我,實在不行就打電話問客服吧 ) 論壇地址  http://bbs.umeng.com/forum.php?mod=forumdisplay&fid=37&filter=typeid&typeid=12


下一篇 我將對第三方登錄處理和把分享中對應的dirlog 怎麼去自定義一個更好的,因爲官方提供是系統的太醜了


謝謝 ,我是一個新人。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章