轉(zhuǎn)載請注明出處:http://www.reibang.com/p/80d6f399f75b
前言
最近項(xiàng)目需要加入第三方分享和登錄功能淋纲,之前其他項(xiàng)目的第三方分享和登錄一直都使用ShareSDK實(shí)現(xiàn)的劳闹。為了統(tǒng)一使用友盟的全家桶,所以三方分享和登錄也就選擇了友盟洽瞬。這里記錄一下完整的集成與使用流程本涕。
1、申請友盟Appkey
直接到友盟官網(wǎng)申請即可伙窃。一般都不用自己去申請菩颖,跟項(xiàng)目經(jīng)理要即可。
(我這里的Demo為了方便就直接用友盟Demo里面提供的Appkey为障,但是創(chuàng)建的項(xiàng)目包名也要和友盟一樣晦闰。真實(shí)項(xiàng)目要自己另外申請)
2、下載SDK
下載地址:http://dev.umeng.com/social/android/sdk-download
下載的時(shí)候根據(jù)自己需求進(jìn)行選擇产场,我這里選擇選擇的是精簡版(包含常用的分享與登錄功能)鹅髓,只測試微信,QQ京景,新浪微博窿冯。
下載后解壓出來是這樣的:
3、準(zhǔn)備資源
使用友盟的集成工具快速集成友盟的分享SDK:雙擊 友盟集成工具.jar-->選擇使用的平臺(tái)和IDE确徙,如圖:
點(diǎn)擊OK鍵醒串,會(huì)在當(dāng)前目錄生成名為umeng_integratetool_result的文件夾执桌,如圖:
4、開始集成
1芜赌、將上面的文件夾依次粘貼到工程相應(yīng)的文件夾即可仰挣,如圖:
2、將debug.keystore文件拷貝到項(xiàng)目的app目錄下(對(duì)應(yīng)app build中相應(yīng)的位置)缠沈,目的是為了使用友盟的簽名膘壶,如圖:
3、添加回調(diào)Activity
1洲愤,微信回調(diào):
其實(shí)在第一步拷貝的時(shí)候已經(jīng)添加了颓芭。即在包名目錄下創(chuàng)建wxapi文件夾,新建一個(gè)名為WXEntryActivity的activity繼承WXCallbackActivity
2柬赐,QQ與新浪微博的回調(diào):
QQ與新浪不需要添加Activity亡问,但需要在使用QQ分享或者授權(quán)的Activity中添加如下代碼:
(注意onActivityResult不可在fragment中實(shí)現(xiàn),如果在fragment中調(diào)用登錄或分享肛宋,需要在fragment依賴的Activity中實(shí)現(xiàn))
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
4州藕、配置清單文件Android Manifest
1,添加權(quán)限:
<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.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
2酝陈,添加sdk中需要的Activity
<!--微信-->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<!--新浪微博-->
<activity
android:name=".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>
<!--qq精簡版-->
<activity
android:name="com.umeng.qq.tencent.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"/>
<!--這里的scheme是qq分享要用的床玻,100424468為自己申請的appid,真實(shí)項(xiàng)目中需要替換-->
<data android:scheme="tencent100424468"/>
</intent-filter>
</activity>
<activity
android:name="com.umeng.qq.tencent.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<!--分享編輯頁-->
<activity
android:name="com.umeng.socialize.editorpage.ShareActivity"
android:excludeFromRecents="true"
android:theme="@style/Theme.UMDefault"
/>
3沉帮,添加友盟appkey
<meta-data
android:name="UMENG_APPKEY"
android:value="561cae6ae0f55abd990035bf">
</meta-data>
5笨枯、配置三方appkey
新建MyApplication繼承Application(注意:需要在清單文件中配置該MyApplication),在MyApplication文件中配置三方平臺(tái)的appkey和初始化sdk遇西。如下:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
UMShareAPI.get(this);//初始化sdk
//開啟debug模式,方便定位錯(cuò)誤严嗜,具體錯(cuò)誤檢查方式可以查看http://dev.umeng.com/social/android/quick-integration的報(bào)錯(cuò)必看粱檀,正式發(fā)布,請關(guān)閉該模式
Config.DEBUG = true;
}
//各個(gè)平臺(tái)的配置
{
//微信
PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
//新浪微博(第三個(gè)參數(shù)為回調(diào)地址)
PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com/sina2/callback");
//QQ
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
}
}
6漫玄、登錄代碼MainActivity.java:
public class MainActivity extends AppCompatActivity {
private String TAG = this.getClass().getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void qqLogin(View view) {
authorization(SHARE_MEDIA.QQ);
}
public void weiXinLogin(View view) {
authorization(SHARE_MEDIA.WEIXIN);
}
public void sinaLogin(View view) {
authorization(SHARE_MEDIA.SINA);
}
//授權(quán)
private void authorization(SHARE_MEDIA share_media) {
UMShareAPI.get(this).getPlatformInfo(this, share_media, new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA share_media) {
Log.d(TAG, "onStart " + "授權(quán)開始");
}
@Override
public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
Log.d(TAG, "onComplete " + "授權(quán)完成");
//sdk是6.4.4的,但是獲取值的時(shí)候用的是6.2以前的(access_token)才能獲取到值,未知原因
String uid = map.get("uid");
String openid = map.get("openid");//微博沒有
String unionid = map.get("unionid");//微博沒有
String access_token = map.get("access_token");
String refresh_token = map.get("refresh_token");//微信,qq,微博都沒有獲取到
String expires_in = map.get("expires_in");
String name = map.get("name");
String gender = map.get("gender");
String iconurl = map.get("iconurl");
Toast.makeText(getApplicationContext(), "name=" + name + ",gender=" + gender, Toast.LENGTH_SHORT).show();
//拿到信息去請求登錄接口茄蚯。。睦优。
}
@Override
public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
Log.d(TAG, "onError " + "授權(quán)失敗");
}
@Override
public void onCancel(SHARE_MEDIA share_media, int i) {
Log.d(TAG, "onCancel " + "授權(quán)取消");
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
}
效果如下:
Demo下載地址:https://github.com/wildma/UMengThirdPartyShareLogin