Android友盟第三方登錄被碗、分享和統(tǒng)計(jì)自動集成

登錄與分享自動集成的方式現(xiàn)只支持微信,QQ福压,新浪三個(gè)平臺掏秩,如果需要使用其它平臺請選擇手動集成。

1:添加依賴

latest.integration即最新版本號

//友盟統(tǒng)計(jì)
compile 'com.umeng.sdk:common:latest.integration'
compile 'com.umeng.sdk:analytics:latest.integration'
//友盟分享
compile 'com.umeng.sdk:share-core:latest.integration'
compile 'com.umeng.sdk:share-qq:latest.integration'
compile 'com.umeng.sdk:share-wechat:latest.integration'
compile 'com.umeng.sdk:share-sina:latest.integration'
//分享面板
compile 'com.umeng.sdk:shareboard-widget:latest.integration'

如果無法正常集成荆姆,則需要在項(xiàng)目的builde.gradle中添加如下配置:

allprojects {
    repositories {
        mavenCentral()     
    }
}
2:添加權(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" />
3:登錄與分享相關(guān)配置

QQ相關(guān)配置:

在app級別 build.gradle中的 defaultConfig下添加manifestPlaceholders = [qqappid: "你的qq appid"]
不配置會出現(xiàn)下面的錯(cuò)誤:

1544497325(1).png

微信相關(guān)配置:

在包名目錄下創(chuàng)建wxapi文件夾蒙幻,新建一個(gè)名為WXEntryActivity的activity繼承WXCallbackActivity,里面不用做操作胆筒。

public class WXEntryActivity extends WXCallbackActivity {

}

在AndroidManifest中注冊WXEntryActivity

<activity
    android:name=".wxapi.WXEntryActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:exported="true"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />
4:統(tǒng)計(jì)相關(guān)配置:

在app的builde.gradle中配置需要的渠道邮破,對應(yīng)上面的渠道名稱變量。

配置Appkey

 <!--value的值填寫你在友盟后臺申請的應(yīng)用Appkey-->
 <meta-data android:value="5ac6e5a2b27b0a7200000082" android:name="UMENG_APPKEY"/>
 <!--value的值填寫渠道名稱仆救,例如yingyongbao抒和。這里設(shè)置動態(tài)渠道變量-->
 <meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/>

配置多渠道打包

productFlavors {
    Alpha {//自己打包測試使用
    // manifestPlaceholders = [UMENG_CHANNEL_VALUE: Alpha]
    }
    Tencent {//投放應(yīng)用寶市場
    // manifestPlaceholders = [UMENG_CHANNEL_VALUE: Tencent]
    }
    Baidu {//投放百度市場
    // manifestPlaceholders = [UMENG_CHANNEL_VALUE: Baidu]
    }
    Qihoo {//投放360市場
    // manifestPlaceholders = [UMENG_CHANNEL_VALUE: Qihoo]
    }
    Alibaba {//投放阿里巴巴
    // manifestPlaceholders = [UMENG_CHANNEL_VALUE: Alibaba]
    }
    Vivo {//投放vivo市場
    // manifestPlaceholders = [UMENG_CHANNEL_VALUE: Vivo]
    }
    Oppo {//投放oppo市場
    // manifestPlaceholders = [UMENG_CHANNEL_VALUE: Oppo]
    }
    Xiaomi {//投放小米市場
    // manifestPlaceholders = [UMENG_CHANNEL_VALUE: Xiaomi]
    }
    Huawei {//投放華為應(yīng)用市場
    // manifestPlaceholders = [UMENG_CHANNEL_VALUE: Huawei]
    }

    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }
}

在AndroidManifest中注冊WXEntryActivity

5:在applicatio的onCreate()中添加各平臺的第三方key并初始化

第三方賬號申請地址:http://dev.umeng.com/social/android/operation

@Override
public void onCreate() {
    super.onCreate();
    /**
     * 初始化common庫
     * 參數(shù)1:上下文,必須的參數(shù)彤蔽,不能為空
     * 參數(shù)2:友盟 app key摧莽,非必須參數(shù),如果Manifest文件中已配置app key铆惑,該參數(shù)可以傳空范嘱,則使用Manifest中配置的app key送膳,否則該參數(shù)必須傳入
     * 參數(shù)3:友盟 channel,非必須參數(shù)丑蛤,如果Manifest文件中已配置channel叠聋,該參數(shù)可以傳空,則使用Manifest中配置的channel受裹,否則該參數(shù)必須傳入碌补,channel命名請?jiān)斠奵hannel渠道命名規(guī)范
     * 參數(shù)4:設(shè)備類型,必須參數(shù)棉饶,傳參數(shù)為UMConfigure.DEVICE_TYPE_PHONE則表示手機(jī)厦章;傳參數(shù)為UMConfigure.DEVICE_TYPE_BOX則表示盒子;默認(rèn)為手機(jī)
     * 參數(shù)5:Push推送業(yè)務(wù)的secret照藻,需要集成Push功能時(shí)必須傳入Push的secret袜啃,否則傳空
     */
    UMConfigure.init(this,"你的應(yīng)用在友盟上的APPKEY","umeng",UMConfigure.DEVICE_TYPE_PHONE,"");
    /**
     * 友盟相關(guān)平臺配置。注意友盟官方新文檔中沒有這項(xiàng)配置幸缕,但是如果不配置會吊不起來相關(guān)平臺的授權(quán)界面
     */
    PlatformConfig.setWeixin("你的微信APPID", "你的微信AppSecret");//微信APPID和AppSecret
    PlatformConfig.setQQZone("你的QQAPPID", "你的QQAppSecret");//QQAPPID和AppSecret
    PlatformConfig.setSinaWeibo("你的微博APPID", "你的微博APPSecret","微博的后臺配置回調(diào)地址");//微博
}
6:友盟第三方登錄:

發(fā)起登錄

private UMShareAPI umShareAPI;
private UMAuthListener umAuthListener;

mShareAPI = UMShareAPI.get(this);
mShareAPI.getPlatformInfo(this, SHARE_MEDIA.QQ, umAuthListener);//QQ登錄
mShareAPI.deleteOauth(this, SHARE_MEDIA.QQ, umAuthListener);//撤銷QQ授權(quán)

登錄回調(diào)

umAuthListener = new UMAuthListener() {
        @Override
        public void onStart(SHARE_MEDIA platform) {}
        @Override
        public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
        // Logger.e("openid: " + data.get("uid"));
        // Logger.e("昵稱: " + data.get("name"));
        // Logger.e("頭像: " + data.get("iconurl"));
        // Logger.e("性別: " + data.get("gender"));
        }

        @Override
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {

        }

        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {

        }
    };

在使用界面中要添加onActivityResult方法群发,否則授權(quán)回調(diào)不成功,獲取不到第三方信息发乔。(如果在fragment中使用第三方登錄熟妓,則在依附的activity中重寫此方法)

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
7:友盟社會化分享

發(fā)起分享

private UMShareListener umShareListener ;

UMImage image = new UMImage(this, R.mipmap.logo);//分享圖標(biāo)
final UMWeb web = new UMWeb("你要分享的地址"); //切記切記 這里分享的鏈接必須是http開頭
web.setTitle("你要分享內(nèi)容的標(biāo)題");//標(biāo)題
web.setThumb(image);  //縮略圖
web.setDescription("你要分享內(nèi)容的描述");//描述

分享面板

new ShareAction(activity)
    .setDisplayList(SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE)
    .setShareboardclickCallback(new ShareBoardlistener() {
        @Override
        public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
            if (share_media == SHARE_MEDIA.QQ) {
                KLog.e("點(diǎn)擊QQ");
                new ShareAction(activity).setPlatform(SHARE_MEDIA.QQ)
                        .withMedia(web)
                        .setCallback(umShareListener)
                        .share();
            } else if (share_media == SHARE_MEDIA.WEIXIN) {
                KLog.e("點(diǎn)擊微信");
                new ShareAction(activity).setPlatform(SHARE_MEDIA.WEIXIN)
                        .withMedia(web)
                        .setCallback(umShareListener)
                        .share();
            } else if (share_media == SHARE_MEDIA.QZONE) {
                new ShareAction(activity).setPlatform(SHARE_MEDIA.QZONE)
                        .withMedia(web)
                        .setCallback(umShareListener)
                        .share();
            } else if (share_media == SHARE_MEDIA.WEIXIN_CIRCLE) {
                new ShareAction(activity).setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE)
                        .withMedia(web)
                        .setCallback(umShareListener)
                        .share();
            }
        }
    }).open();

分享回調(diào)

umShareListener = new UMShareListener() {
        @Override
        public void onStart(SHARE_MEDIA platform) {
        // 分享開始的回調(diào)
        }

        @Override
        public void onResult(SHARE_MEDIA platform) {
        Toast.makeText(ShareActivity.this, platform + " 分享成功啦", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
        Toast.makeText(ShareActivity.this,platform + " 分享失敗啦", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel(SHARE_MEDIA platform) {
        Toast.makeText(ShareActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show();
        }
    };

在使用界面中要添加onActivityResult方法,否則授權(quán)回調(diào)不成功栏尚,獲取不到第三方信息(如果在fragment中使用第三方登錄起愈,則在依附的activity中重寫此方法)

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
8:在調(diào)用界面添加動態(tài)申請權(quán)限:
if(Build.VERSION.SDK_INT>=23){
   String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.CALL_PHONE,Manifest.permission.READ_LOGS,Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,Manifest.permission.WRITE_APN_SETTINGS};
   ActivityCompat.requestPermissions(this,mPermissionList,123);
}
9:友盟Session統(tǒng)計(jì):

即啟動數(shù)據(jù)的統(tǒng)計(jì)(包括新增用戶、活躍用戶译仗、啟動次數(shù)抬虽、使用時(shí)長等基本數(shù)據(jù))

需要在每個(gè)Activity的onResume方法中調(diào)用 MobclickAgent.onResume(Context),
onPause方法中調(diào)用 MobclickAgent.onPause(Context),如下:

protected void onResume() {
    super.onResume();
    MobclickAgent.onResume(this);
}

protected void onPause() {
    super.onPause();
    MobclickAgent.onPause(this);
}

確保在所有的Activity中都調(diào)用 MobclickAgent.onResume() 和onPause()方法古劲。

如果Activity之間有繼承或者控制關(guān)系請不要同時(shí)在父和子Activity中重復(fù)添加nPause和nResume方法斥赋,否則會造成重復(fù)統(tǒng)計(jì)缰猴。例如在BaseActivity中添加過产艾,則它的子類就不需要添加了。

當(dāng)應(yīng)用在后臺運(yùn)行超過30秒(默認(rèn))再回到前端滑绒,將被認(rèn)為是兩個(gè)獨(dú)立的session(啟動)闷堡,例如用戶回到home,或進(jìn)入其他程序疑故,經(jīng)過一段時(shí)間后再返回之前的應(yīng)用杠览。可通過接口:setSessionContinueMillis(long interval) 來自定義這個(gè)間隔(參數(shù)單位為毫秒)纵势。

如果開發(fā)者調(diào)用kill或者exit之類的方法殺死進(jìn)程踱阿,請務(wù)必在此之前調(diào)用onKillProcess(Context context)方法管钳,用來保存統(tǒng)計(jì)數(shù)據(jù)。

Session統(tǒng)計(jì)是比較常用的統(tǒng)計(jì)软舌,友盟還提供了很多統(tǒng)計(jì)方法才漆,例如自定義統(tǒng)計(jì)、錯(cuò)誤統(tǒng)計(jì)佛点、賬號統(tǒng)計(jì)等醇滥,在這就不一一列舉了。有需求的可以參考友盟統(tǒng)計(jì)集成文檔:https://link.jianshu.com/?t=http%3A%2F%2Fdev.umeng.com%2Fsdk_integate%2Fandroid_sdk%2Fanalytics_doc%231

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末超营,一起剝皮案震驚了整個(gè)濱河市鸳玩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌演闭,老刑警劉巖不跟,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異米碰,居然都是意外死亡躬拢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門见间,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聊闯,“玉大人,你說我怎么就攤上這事米诉×馐撸” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵史侣,是天一觀的道長拴泌。 經(jīng)常有香客問我,道長惊橱,這世上最難降的妖魔是什么蚪腐? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮税朴,結(jié)果婚禮上回季,老公的妹妹穿的比我還像新娘。我一直安慰自己正林,他們只是感情好驶忌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布罢猪。 她就那樣靜靜地躺著通惫,像睡著了一般服鹅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上杈绸,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天帖蔓,我揣著相機(jī)與錄音矮瘟,去河邊找鬼。 笑死塑娇,一個(gè)胖子當(dāng)著我的面吹牛芥永,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钝吮,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼埋涧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奇瘦?” 一聲冷哼從身側(cè)響起棘催,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耳标,沒想到半個(gè)月后醇坝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡次坡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年呼猪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砸琅。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宋距,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出症脂,到底是詐尸還是另有隱情谚赎,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布诱篷,位于F島的核電站壶唤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏棕所。R本人自食惡果不足惜闸盔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望琳省。 院中可真熱鬧迎吵,春花似錦、人聲如沸岛啸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坚踩。三九已至,卻和暖如春瓤狐,著一層夾襖步出監(jiān)牢的瞬間瞬铸,已是汗流浹背批幌。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嗓节,地道東北人荧缘。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像拦宣,于是被迫代替她去往敵國和親截粗。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容