1. 程式人生 > >友推實現第三方登入、分享以及獲取使用者資料,截圖分享

友推實現第三方登入、分享以及獲取使用者資料,截圖分享

一、實現的效果圖                                                                  二、專案結構目錄(youtui-lib檔案下)                                                                          
三、編碼前的準備工作
1.申請應用 AppKey
注意:需要申請友推appkey和你需要登入分享平臺的appkey
           (1)友推appkey申請
        在首頁http://youtui.mobi/的下方點選新增我的應用即可一步步完成申請                                   

        (2)申請社交平臺appkey

       整合前您需要為您的應用在需要整合的社交網站開放平臺申請賬號(一般一個工作日可完成稽核),否則只能呼叫系統的分享選單,無法跟蹤分享的回撥事件及統計。

       QQ、QQ空間的可以使用友推提供的appkey,新浪微博、騰訊微博的也可以使用友推提供的appkey(但無法使用SSO免登,訊息來源顯示友推),微信、人人網的須要自己應用申請

[td]
2、獲取Libs
請點選下載: 
 
3.將youtui-lib專案庫和應用工程放在同一個目錄下

 Package Explorer 中右鍵點選工程的根目錄,選擇 Properties(屬性)

,然後點選,在Android選項點選Add新增youtui-lib

如下圖所示:(請檢查youtui_lib的Properties 是否勾選Is library)



四、詳細的編碼實現


1.註冊需要分享的平臺

1.1.配置各分享平臺key,該配置檔案為youtui_sdk.xml,配置完放入工程的assets資料夾。

2.如果需要分享到哪個平臺就將該平臺的Enable屬性設定為true.

3.如果需要將某個平臺排列到前面,只需要改變它在youtui_sdk.xml檔案中的位置即可。

4.QQ、QQ空間的可以使用友推提供的appkey,新浪微博、騰訊微博的也可以使用友推提供的appkey(但無法使用SSO免登,訊息來源顯示友推),微信、人人網的須要自己應用申請。

各平臺需要注意的事項:

新浪微博:

SSO免登,新浪微博需要驗證應用簽名,請一定要在新浪開放平臺管理中心應用資訊 -> 基本資訊 -> Android簽名包名資訊 配置該資訊


每次包名變化或者使用的.keystore變化都會導致應用簽名變化,請重新到新浪微博開放平臺設定。

執行Demo時如果重新編譯,因為使用的.keystore檔案變化也會導致應用簽名變化,導致Demo新浪微博分享無法正常工作,請執行Demo時使用Demo工程包中提供的debug.keystore替換C:\Users\Administrator\.android中的debug.keystore檔案

微信和朋友圈:

微信和朋友圈也需要驗證應用簽名,請在微信開放平臺管理中心修改應用 -> 開發資訊配置。


QQ和QQ空間:

QQ和QQ空間使用的是騰訊開放平臺api,請在騰訊開放平臺申請賬號和註冊應用,請不要使用QQ互聯(用於網站賬號登入)的配置,雖然都是騰訊的,但是兩個平臺並不通用,除了需要在youtui_sdk.xml配置資訊,還需要在manifest檔案中的android:scheme中的tencent後的一串數字換成自己應用的appid

2.在AndroidManifest.xml 註冊許可權
  1. <!-- 檢測網路狀態 -->
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  3. <!-- 獲取mac地址作為使用者的備用唯一標識 -->
  4. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  5. <!-- 獲取使用者手機的IMEI,用來唯一的標識使用者。 -->
  6. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  7. <!-- 寫入SDcard許可權 -->
  8. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  9. <!--開啟關閉sd卡許可權--!>
  10. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
  11. <!--網路許可權--!>
  12. <uses-permission android:name="android.permission.INTERNET" />
  13. <!-- 用於讀取sd卡圖片 -->
  14. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  15. <!-- 用於人人SSO登陸 -->
  16. <uses-permission android:name="android.permission.GET_ACCOUNTS" />
  17. <!-- 用於人人SSO登陸 -->
  18. <uses-permission android:name="android.permission.USE_CREDENTIALS" />
  19. <!-- 用於人人SSO登陸 -->
  20. <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
複製程式碼 3.在AndroidManifest.xml 註冊許可權
  1. <!-- 檢測網路狀態 -->
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  3. <!-- 獲取mac地址作為使用者的備用唯一標識 -->
  4. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  5. <!-- 獲取使用者手機的IMEI,用來唯一的標識使用者。 -->
  6. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  7. <!-- 寫入SDcard許可權 -->
  8. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  9. <!--開啟關閉sd卡許可權--!>
  10. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
  11. <!--網路許可權--!>
  12. <uses-permission android:name="android.permission.INTERNET" />
  13. <!-- 用於讀取sd卡圖片 -->
  14. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  15. <!-- 用於人人SSO登陸 -->
  16. <uses-permission android:name="android.permission.GET_ACCOUNTS" />
  17. <!-- 用於人人SSO登陸 -->
  18. <uses-permission android:name="android.permission.USE_CREDENTIALS" />
  19. <!-- 用於人人SSO登陸 -->
  20. <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
複製程式碼

4. AndroidManifest.xml註冊需要的Activity
  1. <!-- 微信分享需要註冊該activity -->
  2. <activity
  3. android:name=".wxapi.WXEntryActivity"
  4. android:exported="true"
  5. android:launchMode="singleTask"
  6. android:theme="@android:style/Theme.Translucent" >
  7. </activity>
  8. <!-- qq回撥需要註冊該activity -->
  9. <activity
  10. android:name="com.tencent.connect.common.AssistActivity"
  11. android:configChanges="orientation|keyboardHidden"
  12. android:screenOrientation="portrait"
  13. android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  14. <!-- qq授權需要註冊該activity -->
  15. <activity
  16. android:name="com.tencent.tauth.AuthActivity"
  17. android:launchMode="singleTask"
  18. android:noHistory="true" >
  19. <intent-filter>
  20. <action android:name="android.intent.action.VIEW" />
  21. <category android:name="android.intent.category.DEFAULT" />
  22. <category android:name="android.intent.category.BROWSABLE" />
  23. <!-- 請將1101255276換成開發者自己應用的騰訊開放平臺 Appid-->
  24. <data android:scheme="tencent1101255276" />
  25. </intent-filter>
  26. </activity>
  27. <!-- 人人授權需要註冊的activity -->
  28. <activity
  29. android:name="com.renn.rennsdk.oauth.OAuthActivity"
  30. android:configChanges="orientation|navigation|keyboardHidden" />
  31. <!-- 分享介面 -->
  32. <activity
  33. android:name="cn.bidaround.ytcore.activity.ShareActivity"
  34. android:exported="true"
  35. android:launchMode="singleTop"
  36. android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  37. <!-- 新浪微博分享回撥需要設定 -->
  38. <intent-filter>
  39. <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
  40. <category android:name="android.intent.category.DEFAULT" />
  41. </intent-filter>
  42. </activity>
  43. <!-- 應用授權 activity-->
  44. <activity
  45. android:name="cn.bidaround.ytcore.login.AuthActivity"
  46. android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  47. <!-- 友推積分activity -->
  48. <activity
  49. android:name="cn.bidaround.point.PointActivity" />
  50. <!-- 截圖編輯activity -->
  51. <activity
  52. android:name="cn.bidaround.youtui_template.ScreenCapEditActivity" 
  53. android:screenOrientation="portrait" 
  54. android:theme="@android:style/Theme.Black.NoTitleBar" />
  55. <!-- 友推渠道號,應用名(英文或拼音)+"_yt",如:“jd_yt”,用於識別通過友推下載的應用,請正確填寫否則無法正確統計 -->
  56. <meta-data
  57. android:name="YOUTUI_CHANNEL"
  58. android:value="yourappname_yt" >
  59. </meta-data>
複製程式碼
5.信和朋友圈回撥設定

如果需要分享微信和朋友圈,必需建一個 應用包名+.wxapi的包,在該包下建WXEntryActivity.java,將該類繼cn.bidaround.ytcore.wxapi.WXEntryActivity即可(裡面不用寫程式碼)


public class WXEntryActivity extends cn.bidaround.ytcore.wxapi.WXEntryActivity {}

如圖:(將com.xingxinglangtuoche替換成你應用的package名,微信回撥會使用到)



6.初始化友推

開發者請在自己的程式開始,最好是在MainActivity的onCreate方法呼叫YtTemplate.init(this)初始化友推sdk,這樣友推sdk才能進行後續呼叫(否則分享等操作會出現空指標異常),例如:

  1. protected void onCreate(Bundle savedInstanceState) {
  2.     super.onCreate(savedInstanceState);
  3.     setContentView(R.layout.activity_main);
  4.     YtTemplate.init(this);/*初始化友推*/
  5.     initView();
  6. }
複製程式碼
應用退出時:

在您專案的出口Activity的 onDestroy 方法的第一行插入下面的程式碼 YtTemplate.release(this); 此方法用於釋放記憶體,統計使用者使用情況,一旦呼叫了release,就必須重新呼叫init才能使用友推的功能,否則會出現空指標異常;


4.6建立 ShareData 例項,呼叫該例項的set方法設定需要分享的資料:

建立ShareData例項,呼叫該例項的set方法設定自己需要分享的資料,關於該例項具體內容見下文,如果只是分享應用則只需要設定setIsAppShare(true) 就可以分享應用在友推後臺填寫的資訊和下載連結。

ShareData 包含的欄位:

  • isAppShare
  • shareType
  • text
  • imagePath
  • imageUrl
  • description
  • title
  • target_url
  • videoUrl
  • musicUrl
  • image
  • 判斷是否為分享應用
  • 分享格式,支援圖文連結、視訊、音樂、圖片
  • 待分享的文字,簡訊要小於70個字元,微博要小於140個字元,如果需要分享連結,最好將連結url放在最後
  • 待分享的本地圖片地址,分享圖片的話需要在本地和網路圖片中選一,如果都有則優先分享本地圖片
  • 待分享網路圖片url,分享圖片的話需要在本地和網路圖片中選一,如果都有則優先分享本地圖片
  • 待分享內容的描述
  • 待分享內容的標題
  • 待分享內容的跳轉連結
  • 待分享視訊的地址
  • 待分享音樂的地址
  • 待分享圖片

1. 通過建立該類例項,呼叫例項的set方法設定這些引數,例如:

  1. ShareData shareData = new ShareData();
  2. shareData.isAppShare = false;//設定為true則分享的資訊從友推後臺填寫的應用資訊中讀取,可動態更新,後面的值不用設定。
  3. shareData.setDescription("友推積分元件");
  4. shareData.setTitle("友推分享");
  5. shareData.setText("通過友推積分元件,開發者幾行程式碼就可以為應用新增分享送積分功能,並提供詳盡的後臺統計資料,除了本身具備的分享功能外,開發者也可將積分功能單獨整合在已有分享元件的app上,快來試試吧 http://youtui.mobi");
  6. shareData.setTarget_url("http://youtui.mobi");
  7. shareData.setImageUrl("http://youtui.mobi/media/image/youtui.png");
複製程式碼

上面的設定為分享圖文連結,如果只分享圖片、視訊或音樂,請設定:

shareData.setShareType(ShareData.SHARETYPE_IMAGE);//設定分享圖片 
shareData.setShareType(ShareData.SHARETYPE_VIDEO);//設定分享視訊(僅微信,朋友圈,新浪微博支援) 
shareData.setShareType(ShareData.SHARETYPE_MUSIC);//設定分享音樂(僅微信,朋友圈,新浪微博支援)

2. 設定分享內容

  1. //為各平臺設定統一的預設分享資料
  2. blackTemp.setShareData(shareData);
  3. //**如果要為某個平臺設定不一樣的分享資訊(如需要在微信分享視訊,而QQ不支援分享視訊,則需要單獨為QQ設定圖文連結分享,否則點分享到QQ時會沒反應)則單獨設定*/
  4. //blackTemp.addData(YtPlatform.PLATFORM_QQ, shareData);
複製程式碼

//為各平臺設定統一的預設分享資料blackTemp.setShareData(shareData);//**如果要為某個平臺設定不一樣的分享資訊(如需要在微信分享視訊,而QQ不支援分享視訊,則需要單獨為QQ設定圖文連結分享,否則點分享到QQ時會沒反應)則單獨設定*///blackTemp.addData(YtPlatform.PLATFORM_QQ, shareData);

4.8呼叫友推分享推薦元件

為應用新增一個分享推薦按鈕,如:

圖:分享推薦按鈕放置位置示例

在分享按鈕事件中呼叫youtui的元件即可,示例程式碼:

public void onClick(View v) {
    if(v.getId()==R.id.popup_bt){
        /*呼叫友推分享推薦元件,YouTuiViewType類的常量為分享樣式引數,目前支援白色列表和黑色網格兩種*/
        /*建立分享的模板,第一個引數為activity,第二個引數為分享視窗樣式,第三個引數為是否需要積分*/
        YtTemplate blackTemp = new YtTemplate(this, YouTuiViewType.WHITE_GRID,false);  //白色網格樣式不需要積分活動
        /*YtTemplate blackTemp = new YtTemplate(this, YouTuiViewType.WHITE_LIST,ture);*/ //白色列表樣式需要積分活動
        
	ShareData shareData = new ShareData();
	shareData.isAppShare = false;//設定為true則分享的資訊從友推後臺填寫的應用資訊中讀取,可動態更新後面的值不用設定。
	shareData.setDescription("友推積分元件");
	shareData.setTitle("友推分享");
	shareData.setText("通過友推積分元件,開發者幾行程式碼就可以為應用新增分享送積分功能,並提供詳盡的後臺統計資料,除了本身具備的分享功能外,開發者也可將積分功能單獨整合在已有分享元件的app上,快來試試吧 http://youtui.mobi");
	shareData.setTarget_url("http://youtui.mobi");
	shareData.setImageUrl("http://youtui.mobi/media/image/youtui.png");
	
	blackTemp.setShareData(shareData);//設定預設的分享資料;shareData 設定參看4.6
	//**如果要為某個平臺設定不一樣的分享資訊。則單獨設定*/
	//blackTemp.addData(YtPlatform.PLATFORM_QQ, shareData);
	//調出分享視窗
	blackTemp.show();
	//如果需要自定義分享事件,可以建立監聽事件,然後在回撥中處理
	YtShareListener listener1 = new YtShareListener() {			
		@Override
		public void onSuccess(ErrorInfo arg0) {
				
		}
			
		@Override
		public void onPreShare() {
				
		}
			
		@Override
		public void onError(ErrorInfo arg0) {
				
		}
			
		@Override
		public void onCancel() {
				
		}
	};
	//給新浪微博新增分享監聽
	blackTemp.addListener(YtPlatform.PLATFORM_SINAWEIBO, listener1);
	//給QQ新增分享監聽
	//blackTemp.addListener(YtPlatform.PLATFORM_QQ, listener2);
	
	}
}

直接呼叫截圖分享的方法:

ytTemplate.showScreenCap();//不用設定shareData

這樣就成功集成了友推的分享推薦功能了,使用者點選推薦分享按鈕後,介面如下:

應用可以在後臺設定分享送積分、積分兌換禮品活動,激勵使用者跟主動向好友分享您的應用,以及檢視使用者分享推薦的資料明細。


如果沒有設定分享送積分活動則不會提示分享送積分活動資訊,返回到基本的分享元件功能。

案例:兼職貓整合後,使用者通過QQ分享給好友,點選連結進入應用簡介下載頁面

應用可以在後臺設定推廣活動及檢視使用者分享的明細報表。

圖:推廣活動管理頁面

圖:後臺積分分享資料統計報表頁面

4.9常見整合錯誤

1) v4包版本衝突,解決方法在lib工程和應用工程使用同一個版本的v4包

2) 社交平臺jar包衝突,如果開發者前面引入過分享平臺的開發包,並且和友推sdk使用的開發包衝突,請刪除原先匯入的包

3) youtui_sdk.xml填寫錯誤,導致解析異常,無法讀取開發者註冊資訊,請務必正確填寫

4) 新浪微博分享時顯示出錯了或sso package or sign error,請檢查在新浪申請的應用Android簽名設定是否正確,當使用的keystore變化時,注意到新浪開發平臺修改應用簽名

4.10避免程式碼混淆造成錯誤

//微信:
-keep class com.tencent.mm.sdk.openapi.WXMediaMessage { *;}
-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}
-keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage { *;}
-keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}

//qq和qq空間:
-keep class com.tencent.open.TDialog$*
-keep class com.tencent.open.TDialog$* {*;}
-keep class com.tencent.open.PKDialog
-keep class com.tencent.open.PKDialog {*;}
-keep class com.tencent.open.PKDialog$*
-keep class com.tencent.open.PKDialog$* {*;}

5.第三方登入

5.1初始化友推

開發者請在自己的程式開始,最好是在MainActivity的onCreate方法呼叫YtTemplate.init(this)初始化友推sdk,這樣友推sdk才能進行後續呼叫:

如果此前呼叫友推分享元件已初始化則不用重複。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    YtTemplate.init(this);/*初始化友推*/
    initView();
}

5.2註冊Activity

<!-- 呼叫友推第三方登入需要註冊該activity -->
<activity android:name="cn.bidaround.ytcore.login.AuthActivity"
	  android:theme="@android:style/Theme.Translucent.NoTitleBar" />

5.3建立授權類例項

建立一個AuthLogin例項,並建立監聽器listener,授權完成後的頁面跳轉等操作請放在這裡,例如:

AuthLogin auth  = new AuthLogin();
	  
AuthListener listener = new AuthListener() {
	@Override
	public void onAuthSucess(Activity act, AuthUserInfo userInfo) {
		Log.i("sinaGender:", userInfo.getSinaGender());
		Log.i("sinaName:", userInfo.getSinaName());
		//獲取新浪使用者頭像url
		Log.i("sinaProfileImageUrl:", userInfo.getSinaProfileImageUrl());
		//獲取新浪使用者暱稱
		Log.i("sinaScreenname:", userInfo.getSinaScreenname());
		Log.i("sinaUid:", userInfo.getSinaUid());
		// 模擬授權成功後跳轉到使用者介面
		Intent sinaIt = new Intent(MainActivity.this, UserActivity.class);
		sinaIt.putExtra("from", "sina");
		sinaIt.putExtra("sinaGender", "sinaGender:" + userInfo.getSinaGender());
		sinaIt.putExtra("sinaName", "sinaName:" + userInfo.getSinaName());
		sinaIt.putExtra("sinaProfileImageUrl", userInfo.getSinaProfileImageUrl());
		sinaIt.putExtra("sinaScreenname", "sinaScreenname:" + userInfo.getSinaScreenname());
		sinaIt.putExtra("sinaUid", "sinaUid:" + userInfo.getSinaUid());
		act.startActivityForResult(sinaIt, 0);
	}

	@Override
	public void onAuthFail(Activity act) {
	}

	@Override
	public void onAuthCancel(Activity act) {
	}

};
auth.sinaAuth(this, listener);//呼叫新浪微博授權登入
//auth.qqAuth(this, qqListener);//呼叫QQ授權登入

5.4呼叫授權類的授權方法

例如:auth.sinaAuth(this, listener);//使用新浪微博授權登入

平臺 方法
新浪微博授權登入 auth.sinaAuth(this, listener);
qq授權登入 auth.qqAuth(this, qqListener);
騰訊微博授權登入