第二十三章 Android中常用的第三方-友盟

??我們在進(jìn)行安卓開發(fā)的時候,并不能完成所有的功能。目前市場上有許多的服務(wù)商給我們提供了各種各樣的服務(wù)。這里介紹友盟。用于統(tǒng)計(jì),分享和推送的功能。

1.1 注冊友盟賬號

??在使用第三方服務(wù)商提供的服務(wù)時都需要先進(jìn)行賬號注冊,登錄http://www.umeng.com/ 友盟官網(wǎng)注冊https://i.umeng.com/signup,如下圖所示,注冊完成之后進(jìn)入友盟的官網(wǎng),這時候我們就可以開始使用自己需要的功能了。我們主要是使用產(chǎn)品這塊的功能,選擇U-App ,然后點(diǎn)擊立即使用,進(jìn)入圖三,因?yàn)槲覀儧]有應(yīng)用在這里面,所以需要自己添加應(yīng)用。

友盟統(tǒng)計(jì)賬號注冊
友盟統(tǒng)計(jì)
友盟統(tǒng)計(jì)
友盟統(tǒng)計(jì)添加應(yīng)用

1.2 友盟統(tǒng)計(jì)

  1. 在上圖的步驟完成之后,我們需要的是添加APP進(jìn)來統(tǒng)計(jì),在上圖四中左下角有一個 添加新應(yīng)用,,再添加完成應(yīng)用信息之后,會直接返回一個AppKey的值,這個值保存好,然后在你的AndroidManifest.xml文件中添加。
添加應(yīng)用名稱
得到APPkey
  1. 在完成AppKey的申請操作之后,我們就可以下載SDK ,在下載SDK的時候,最好選擇最新的版本。解壓之后有三個包和一個text,我們需要的是libs包,這個包里面有兩個jar包,一個是umeng的jar,這個包是我們需要的,兩一個utdid4all包,這個包是阿里UTDID服務(wù)的補(bǔ)充包,如果需要請導(dǎo)入U(xiǎn)TDID包。上次項(xiàng)目里面重新運(yùn)行的時候,這個包會導(dǎo)致包沖突。
sdk下載
解壓sdk
友盟包
  1. 配置AndroidManifest.xml 文件,添加必要的權(quán)限,一個都不能少,還有就是添加你申請的AppKey,name 值為UMENG_APPKEY,還需要添加對應(yīng)的渠道的名稱,UMENG_CHANNEL,不同的應(yīng)用市場對應(yīng)的不同的值,例如:豌豆莢 value=wdj 。
<manifest>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
···
  <meta-data android:value="YOUR_APP_KEY "
            android:name="UMENG_APPKEY"/>

   <meta-data android:value="Channel ID"
            android:name="UMENG_CHANNEL"/>

</manifest>
  1. 友盟統(tǒng)計(jì)在代碼中的使用
在Activity中,每個Activity都添加onResume和onPause方法
 @Override
    public void onResume() {
        super.onResume();
        MobclickAgent.onPageStart(mPageName);
        MobclickAgent.onResume(mContext);
    }

    @Override
    public void onPause() {
        super.onPause();
        MobclickAgent.onPageEnd(mPageName);
        MobclickAgent.onPause(mContext);
    }

Fragment

??SDK在統(tǒng)計(jì)Fragment時,需要關(guān)閉Activity自帶的頁面統(tǒng)計(jì),然后在每個頁面中重新集成頁面統(tǒng)計(jì)的代碼(包括調(diào)用了 onResume 和 onPause 的Activity)。
就這么簡單。

友盟的文檔:http://dev.umeng.com/analytics/android-doc/integration#2_5


友盟更新

記錄時間: 2018年3月13日
??因?yàn)樘脹]有去看友盟的文檔了,今天才發(fā)現(xiàn)友盟有了一個更新,這里再加上一個補(bǔ)充說明。
友盟文檔:http://dev.umeng.com/sdk_integate/android_sdk/android_common_guide#1_1_1

自動集成

使用方法很簡單:

  1. app build.gradle 文件添加依賴
   compile 'com.umeng.sdk:common:latest.integration'

project build.gradle 文件

allprojects {
    repositories {
            mavenCentral()     
    }
}
  1. AndroidMainifest.xml
   <meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"/> 
        <meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/> 

權(quán)限:別忘記了

<!-- 必須的權(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.INTERNET" />

<!-- 推薦的權(quán)限 -->
<!-- 添加如下權(quán)限,以便使用更多的第三方SDK和更精準(zhǔn)的統(tǒng)計(jì)數(shù)據(jù) -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  1. Application 中的onCreate()
 //設(shè)置LOG開關(guān),默認(rèn)為false
UMConfigure.setLogEnabled(false); 

//第二 ,三 個參數(shù) 是appkey  channel   manifest中有的話 傳null,沒有傳具體的值
// 第四個參數(shù)是集成推送的 ,不集成直接傳null
UMConfigure.init( context,null, null,  UMConfigure.DEVICE_TYPE_PHONE,null);
登錄:
  //用戶使用自有賬號登錄時
MobclickAgent.onProfileSignIn("userID");

//當(dāng)用戶使用第三方賬號(如新浪微博)登錄時
MobclickAgent.onProfileSignIn("WB","userID");

登出:
MobclickAgent.onProfileSignOff();

代碼統(tǒng)計(jì):
在你的BaseActivity 中添加代碼

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

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

1.3 友盟分享

??友盟的分享和市場上的大多數(shù)分享一樣,都是必須先在各大平臺上注冊,注冊完成之后,得到各大平臺的App Key 和App Id 這兩個值,然后在集成友盟分享的時候再將這些需要分享的平臺的值添加進(jìn)去。我們這里是安卓的分享,點(diǎn)擊sdk及文檔,進(jìn)行安卓的文檔查看。下載sdk http://dev.umeng.com/social/android/sdk-download,

友盟分享
下載sdk

??根據(jù)你需要的選擇分享的第三方平臺。這里選擇QQ,微博,微信。根據(jù)你的需要你選擇完整版還是精簡版。選擇完成之后,點(diǎn)擊下載,解壓,然后選擇友盟集成工具,雙擊或者選擇打開方式->Java Platform SE binary ,有些電腦雙擊是解壓這個壓縮包,有些不是所以選擇圖二解壓。圖三打開工具的界面,圖四是生成一個umeng_integratetool_result包文件,然后將這個文件里面對應(yīng)的子文件拷貝進(jìn)工程中對應(yīng)的包中。如下圖所示:

友盟下載的sdk
解壓工具
解壓生成代碼
解壓完成

添加完成之后,外部的準(zhǔn)備工作就基本完成了,接下來就是內(nèi)部的代碼工作。

  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.配置 AndroidManifest.xml文件

        <!--友盟分享-->
        <!--新浪-->
        <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>
  <!--微信-->
        <activity
            android:name=".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="tencent你申請的id" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="orientation|keyboardHidden|screenSize"/>

2.新建一個 類App 繼承Application,在這個類里面配置你的App Key值。

public class App extends Application {

    @Override
    public void onCreate() {

        super.onCreate();
        //開啟debug模式,方便定位錯誤,具體錯誤檢查方式可以查看http://dev.umeng.com/social/android/quick-integration的報(bào)錯必看,正式發(fā)布,請關(guān)閉該模式
        Config.DEBUG = true;
        QueuedWork.isUseThreadPool = false;
        UMShareAPI.get(this);


    }

    //各個平臺的配置,建議放在全局Application或者程序入口
//這里的信息都要自己注冊,按照你的需要添加,我沒有加上我自己的
    {
        PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
        //豆瓣RENREN平臺目前只能在服務(wù)器端配置
        PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");
        PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
        PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
        PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");
        PlatformConfig.setAlipay("2015111700822536");
        PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");
        PlatformConfig.setPinterest("1439206");
        PlatformConfig.setKakao("e4f60e065048eb031e235c806b31c70f");
        PlatformConfig.setDing("dingoalmlnohc0wggfedpk");
        PlatformConfig.setVKontakte("5764965","5My6SNliAaLxEm3Lyd9J");
        PlatformConfig.setDropbox("oz8v5apet3arcdy","h7p2pjbzkkxt02a");
       PlatformConfig.setYnote("9c82bf470cba7bd2f1819b0ee26f86c6ce670e9b");
    }
}

  1. 從原來的項(xiàng)目中拿出來的,里面的部分內(nèi)容按照你的要求更改,我這里面只有一個微信分享 SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE,如果需要的話,只需要在這里面繼續(xù)添加。另外說一下,關(guān)于微信的appid和secret,如果不能分享的話,注意檢查一下安卓的微信開放平臺的申請是跟包名和簽名相關(guān)的,統(tǒng)統(tǒng)換你自己的。這個很重要。還有微信的測試的時候要用打包簽名的進(jìn)行測試, 以打包簽名的為準(zhǔn) 別說為啥我之前就好使現(xiàn)在怎么就不行的事兒, 如果出現(xiàn) 一定先檢查下簽名。代碼只能幫你到這里了。

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private Button btn_share_um;
    private ShareAction mShareAction;
    private UMShareListener mShareListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
           window.setStatusBarColor(getResources().getColor(R.color.colorPrimary));
        }
        setContentView(R.layout.activity_main);
        btn_share_um = (Button) findViewById(R.id.btn_share_um);
        btn_share_um.setOnClickListener(this);
        initData();

    }


    private void initData() {
        mShareListener = new CustomShareListener(this);
        mShareAction = new ShareAction(MainActivity.this).setDisplayList(
                SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE
        ).setShareboardclickCallback(new ShareBoardlistener() {
                                                @Override
                                                public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
                                                    UMWeb web = new UMWeb("http://www.baidu.com");
                                                    web.setTitle("分享的標(biāo)題");
                                                    web.setDescription("分享的內(nèi)容");
                                                    web.setThumb(new UMImage(MainActivity.this, R.mipmap.ic_launcher));
                                                    new ShareAction(MainActivity.this).withMedia(web)
                                                            .setPlatform(share_media)
                                                            .setCallback(mShareListener)
                                                            .share();

                                                }
                                            }

                );

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn_share_um:
                ShareBoardConfig config = new ShareBoardConfig();
                config.setMenuItemBackgroundShape(ShareBoardConfig.BG_SHAPE_ROUNDED_SQUARE);
                mShareAction.open(config);
                break;
        }
    }


    public class CustomShareListener implements UMShareListener {

        private WeakReference<MainActivity> mActivity;

        private CustomShareListener(MainActivity activity) {
            mActivity = new WeakReference(activity);
        }

        @Override
        public void onStart(SHARE_MEDIA platform) {

        }

        @Override
        public void onResult(SHARE_MEDIA platform) {

            if (platform != SHARE_MEDIA.MORE && platform != SHARE_MEDIA.SMS
                    && platform != SHARE_MEDIA.EMAIL
                    && platform != SHARE_MEDIA.FLICKR
                    && platform != SHARE_MEDIA.FOURSQUARE
                    && platform != SHARE_MEDIA.TUMBLR
                    && platform != SHARE_MEDIA.POCKET
                    && platform != SHARE_MEDIA.PINTEREST
                    && platform != SHARE_MEDIA.INSTAGRAM
                    && platform != SHARE_MEDIA.GOOGLEPLUS
                    && platform != SHARE_MEDIA.YNOTE
                    && platform != SHARE_MEDIA.EVERNOTE) {
                Toast.makeText(mActivity.get(), " 分享成功", Toast.LENGTH_SHORT).show();
            }

        }

        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            if (platform != SHARE_MEDIA.MORE && platform != SHARE_MEDIA.SMS
                    && platform != SHARE_MEDIA.EMAIL
                    && platform != SHARE_MEDIA.FLICKR
                    && platform != SHARE_MEDIA.FOURSQUARE
                    && platform != SHARE_MEDIA.TUMBLR
                    && platform != SHARE_MEDIA.POCKET
                    && platform != SHARE_MEDIA.PINTEREST

                    && platform != SHARE_MEDIA.INSTAGRAM
                    && platform != SHARE_MEDIA.GOOGLEPLUS
                    && platform != SHARE_MEDIA.YNOTE
                    && platform != SHARE_MEDIA.EVERNOTE) {
                Toast.makeText(mActivity.get(), "分享失敗", Toast.LENGTH_SHORT).show();
                if (t != null) {
                    Log.d("throw", "throw:" + t.getMessage());
                }
            }

        }

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


    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        /** attention to this below ,must add this**/
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
    }

    /**
     * 屏幕橫豎屏切換時避免出現(xiàn)window leak的問題
     */
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mShareAction.close();
    }


    //友盟統(tǒng)計(jì)代碼;
    public void onResume() {
        super.onResume();
        MobclickAgent.onResume(this); //統(tǒng)計(jì)時長
    }
    public void onPause() {
        super.onPause();
        MobclickAgent.onPause(this);

    }

}

關(guān)于分享的代碼就只有這些了,如果這些不能滿足你的基本需要的話,你可以參考友盟的sdk文檔。友盟問題查看文檔:http://bbs.umeng.com/thread-17764-1-1.html
友盟集成推送文檔:http://dev.umeng.com/social/android/quick-integration#2

1.4 友盟推送

??目前市場上有很多推送服務(wù),極光,個推,友盟等。友盟集成推送是很簡單。推送文檔 http://dev.umeng.com/push/android/api-doc

  1. 在進(jìn)行推送之前,我們必須創(chuàng)建應(yīng)用,如果之前使用了統(tǒng)計(jì)的話就從已有應(yīng)用中添加
注冊應(yīng)用
生成的key和secret值
  1. 然后按照下面的步驟,進(jìn)行sdk的配置和進(jìn)入后臺。


    集成友盟推送
  2. 按照文檔配置http://dev.umeng.com/push/android/integration#2_2_9,將下載sdk包解壓,將PushSDK這個包作為model導(dǎo)入工程中(File->New->import Module),然后在build gradle 中的 dependencies{} 添加 compile project(':PushSDK') 或者選擇 File ->Project Structure->app-> Dependencies->右上角的+號->Model dependency->彈框中選擇 :PushSDK->OK->OK這樣就添加依賴完成了。

  3. 配置AndroidManifest.xml,在第一步的圖二中,我們有AppKey,和Umeng Message Secret,將這兩個值添加進(jìn)去,這里還有一個渠道,按照你的要求選擇渠道,沒有不改也可以。

        <meta-data
            android:value="59e032a43eae25098b000010"
            android:name="UMENG_APPKEY"/>

        <meta-data
            android:name="UMENG_MESSAGE_SECRET"
            android:value="0cb66cd0b897b2b6201461fc1be20c20" />
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="Umeng" />

  1. 在工程的Application類的 onCreate() 方法中注冊推送服務(wù)。
  PushAgent mPushAgent = PushAgent.getInstance(this);
         //注冊推送服務(wù),每次調(diào)用register方法都會回調(diào)該接口
        mPushAgent.register(new IUmengRegisterCallback() {

            @Override
            public void onSuccess(String deviceToken) {
                //注冊成功會返回device token
                Log.e("tag","deviceToken="+deviceToken);
            }

            @Override
            public void onFailure(String s, String s1) {

            }
        });

  1. 在所有的Activity 的onCreate 方法或在應(yīng)用的BaseActivity的onCreate方法中添加
PushAgent.getInstance(context).onAppStart();
  1. 最后一步,打包運(yùn)行。記得要打包,不打包的話,推送貌似不行。

github地址:https://github.com/wangxin3119/UMDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容