友推實現第三方登入、分享以及獲取使用者資料,截圖分享
三、編碼前的準備工作
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(屬性)
如下圖所示:(請檢查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 註冊許可權-
<!-- 檢測網路狀態 -->
-
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-
<!-- 獲取mac地址作為使用者的備用唯一標識 -->
-
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
-
<!-- 獲取使用者手機的IMEI,用來唯一的標識使用者。 -->
-
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
-
<!-- 寫入SDcard許可權 -->
-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-
<!--開啟關閉sd卡許可權--!>
-
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
-
<!--網路許可權--!>
-
<uses-permission android:name="android.permission.INTERNET" />
-
<!-- 用於讀取sd卡圖片 -->
-
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-
<!-- 用於人人SSO登陸 -->
-
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
-
<!-- 用於人人SSO登陸 -->
-
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
-
<!-- 用於人人SSO登陸 -->
- <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
-
<!-- 檢測網路狀態 -->
-
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-
<!-- 獲取mac地址作為使用者的備用唯一標識 -->
-
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
-
<!-- 獲取使用者手機的IMEI,用來唯一的標識使用者。 -->
-
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
-
<!-- 寫入SDcard許可權 -->
-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-
<!--開啟關閉sd卡許可權--!>
-
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
-
<!--網路許可權--!>
-
<uses-permission android:name="android.permission.INTERNET" />
-
<!-- 用於讀取sd卡圖片 -->
-
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-
<!-- 用於人人SSO登陸 -->
-
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
-
<!-- 用於人人SSO登陸 -->
-
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
-
<!-- 用於人人SSO登陸 -->
- <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
4.在 AndroidManifest.xml註冊需要的Activity
-
<!-- 微信分享需要註冊該activity -->
-
<activity
-
android:name=".wxapi.WXEntryActivity"
-
android:exported="true"
-
android:launchMode="singleTask"
-
android:theme="@android:style/Theme.Translucent" >
-
</activity>
-
<!-- qq回撥需要註冊該activity -->
-
<activity
-
android:name="com.tencent.connect.common.AssistActivity"
-
android:configChanges="orientation|keyboardHidden"
-
android:screenOrientation="portrait"
-
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
-
<!-- qq授權需要註冊該activity -->
-
<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" />
-
<!-- 請將1101255276換成開發者自己應用的騰訊開放平臺 Appid-->
-
<data android:scheme="tencent1101255276" />
-
</intent-filter>
-
</activity>
-
<!-- 人人授權需要註冊的activity -->
-
<activity
-
android:name="com.renn.rennsdk.oauth.OAuthActivity"
-
android:configChanges="orientation|navigation|keyboardHidden" />
-
<!-- 分享介面 -->
-
<activity
-
android:name="cn.bidaround.ytcore.activity.ShareActivity"
-
android:exported="true"
-
android:launchMode="singleTop"
-
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
-
<!-- 新浪微博分享回撥需要設定 -->
-
<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-->
-
<activity
-
android:name="cn.bidaround.ytcore.login.AuthActivity"
-
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
-
<!-- 友推積分activity -->
-
<activity
-
android:name="cn.bidaround.point.PointActivity" />
-
<!-- 截圖編輯activity -->
-
<activity
-
android:name="cn.bidaround.youtui_template.ScreenCapEditActivity"
-
android:screenOrientation="portrait"
-
android:theme="@android:style/Theme.Black.NoTitleBar" />
-
<!-- 友推渠道號,應用名(英文或拼音)+"_yt",如:“jd_yt”,用於識別通過友推下載的應用,請正確填寫否則無法正確統計 -->
-
<meta-data
-
android:name="YOUTUI_CHANNEL"
-
android:value="yourappname_yt" >
-
</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才能進行後續呼叫(否則分享等操作會出現空指標異常),例如:
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main);
-
YtTemplate.init(this);/*初始化友推*/
-
initView();
- }
應用退出時:
在您專案的出口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方法設定這些引數,例如:
-
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");
上面的設定為分享圖文連結,如果只分享圖片、視訊或音樂,請設定:
shareData.setShareType(ShareData.SHARETYPE_IMAGE);//設定分享圖片
shareData.setShareType(ShareData.SHARETYPE_VIDEO);//設定分享視訊(僅微信,朋友圈,新浪微博支援)
shareData.setShareType(ShareData.SHARETYPE_MUSIC);//設定分享音樂(僅微信,朋友圈,新浪微博支援)
2. 設定分享內容
-
//為各平臺設定統一的預設分享資料
-
blackTemp.setShareData(shareData);
-
//**如果要為某個平臺設定不一樣的分享資訊(如需要在微信分享視訊,而QQ不支援分享視訊,則需要單獨為QQ設定圖文連結分享,否則點分享到QQ時會沒反應)則單獨設定*/
- //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); |
騰訊微博授權登入 |