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

  我们在进行安卓开发的时候,并不能完成所有的功能。目前市场上有许多的服务商给我们提供了各种各样的服务。这里介绍友盟。用于统计,分享和推送的功能。

1.1 注册友盟账号

  在使用第三方服务商提供的服务时都需要先进行账号注册,登录http://www.umeng.com/ 友盟官网注册https://i.umeng.com/signup,如下图所示,注册完成之后进入友盟的官网,这时候我们就可以开始使用自己需要的功能了。我们主要是使用产品这块的功能,选择U-App ,然后点击立即使用,进入图三,因为我们没有应用在这里面,所以需要自己添加应用。

友盟统计账号注册
友盟统计
友盟统计
友盟统计添加应用

1.2 友盟统计

  1. 在上图的步骤完成之后,我们需要的是添加APP进来统计,在上图四中左下角有一个 添加新应用,,再添加完成应用信息之后,会直接返回一个AppKey的值,这个值保存好,然后在你的AndroidManifest.xml文件中添加。
添加应用名称
得到APPkey
  1. 在完成AppKey的申请操作之后,我们就可以下载SDK ,在下载SDK的时候,最好选择最新的版本。解压之后有三个包和一个text,我们需要的是libs包,这个包里面有两个jar包,一个是umeng的jar,这个包是我们需要的,两一个utdid4all包,这个包是阿里UTDID服务的补充包,如果需要请导入UTDID包。上次项目里面重新运行的时候,这个包会导致包冲突。
sdk下载
解压sdk
友盟包
  1. 配置AndroidManifest.xml 文件,添加必要的权限,一个都不能少,还有就是添加你申请的AppKey,name 值为UMENG_APPKEY,还需要添加对应的渠道的名称,UMENG_CHANNEL,不同的应用市场对应的不同的值,例如:豌豆荚 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. 友盟统计在代码中的使用
在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在统计Fragment时,需要关闭Activity自带的页面统计,然后在每个页面中重新集成页面统计的代码(包括调用了 onResume 和 onPause 的Activity)。
就这么简单。

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


友盟更新

记录时间: 2018年3月13日
  因为太久没有去看友盟的文档了,今天才发现友盟有了一个更新,这里再加上一个补充说明。
友盟文档: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"/> 

权限:别忘记了

<!-- 必须的权限 -->
<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" />

<!-- 推荐的权限 -->
<!-- 添加如下权限,以便使用更多的第三方SDK和更精准的统计数据 -->
<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()
 //设置LOG开关,默认为false
UMConfigure.setLogEnabled(false); 

//第二 ,三 个参数 是appkey  channel   manifest中有的话 传null,没有传具体的值
// 第四个参数是集成推送的 ,不集成直接传null
UMConfigure.init( context,null, null,  UMConfigure.DEVICE_TYPE_PHONE,null);
登录:
  //用户使用自有账号登录时
MobclickAgent.onProfileSignIn("userID");

//当用户使用第三方账号(如新浪微博)登录时
MobclickAgent.onProfileSignIn("WB","userID");

登出:
MobclickAgent.onProfileSignOff();

代码统计:
在你的BaseActivity 中添加代码

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

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

1.3 友盟分享

  友盟的分享和市场上的大多数分享一样,都是必须先在各大平台上注册,注册完成之后,得到各大平台的App Key 和App Id 这两个值,然后在集成友盟分享的时候再将这些需要分享的平台的值添加进去。我们这里是安卓的分享,点击sdk及文档,进行安卓的文档查看。下载sdk http://dev.umeng.com/social/android/sdk-download

友盟分享
下载sdk

  根据你需要的选择分享的第三方平台。这里选择QQ,微博,微信。根据你的需要你选择完整版还是精简版。选择完成之后,点击下载,解压,然后选择友盟集成工具,双击或者选择打开方式->Java Platform SE binary ,有些电脑双击是解压这个压缩包,有些不是所以选择图二解压。图三打开工具的界面,图四是生成一个umeng_integratetool_result包文件,然后将这个文件里面对应的子文件拷贝进工程中对应的包中。如下图所示:

友盟下载的sdk
解压工具
解压生成代码
解压完成

添加完成之后,外部的准备工作就基本完成了,接下来就是内部的代码工作。

  1. 添加权限
 <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的报错必看,正式发布,请关闭该模式
        Config.DEBUG = true;
        QueuedWork.isUseThreadPool = false;
        UMShareAPI.get(this);


    }

    //各个平台的配置,建议放在全局Application或者程序入口
//这里的信息都要自己注册,按照你的需要添加,我没有加上我自己的
    {
        PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
        //豆瓣RENREN平台目前只能在服务器端配置
        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. 从原来的项目中拿出来的,里面的部分内容按照你的要求更改,我这里面只有一个微信分享 SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE,如果需要的话,只需要在这里面继续添加。另外说一下,关于微信的appid和secret,如果不能分享的话,注意检查一下安卓的微信开放平台的申请是跟包名和签名相关的,统统换你自己的。这个很重要。还有微信的测试的时候要用打包签名的进行测试, 以打包签名的为准 别说为啥我之前就好使现在怎么就不行的事儿, 如果出现 一定先检查下签名。代码只能帮你到这里了。

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("分享的标题");
                                                    web.setDescription("分享的内容");
                                                    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);
    }

    /**
     * 屏幕横竖屏切换时避免出现window leak的问题
     */
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mShareAction.close();
    }


    //友盟统计代码;
    public void onResume() {
        super.onResume();
        MobclickAgent.onResume(this); //统计时长
    }
    public void onPause() {
        super.onPause();
        MobclickAgent.onPause(this);

    }

}

关于分享的代码就只有这些了,如果这些不能满足你的基本需要的话,你可以参考友盟的sdk文档。友盟问题查看文档:http://bbs.umeng.com/thread-17764-1-1.html
友盟集成推送文档:http://dev.umeng.com/social/android/quick-integration#2

1.4 友盟推送

  目前市场上有很多推送服务,极光,个推,友盟等。友盟集成推送是很简单。推送文档 http://dev.umeng.com/push/android/api-doc

  1. 在进行推送之前,我们必须创建应用,如果之前使用了统计的话就从已有应用中添加
注册应用
生成的key和secret值
  1. 然后按照下面的步骤,进行sdk的配置和进入后台。


    集成友盟推送
  2. 按照文档配置http://dev.umeng.com/push/android/integration#2_2_9,将下载sdk包解压,将PushSDK这个包作为model导入工程中(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,将这两个值添加进去,这里还有一个渠道,按照你的要求选择渠道,没有不改也可以。

        <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() 方法中注册推送服务。
  PushAgent mPushAgent = PushAgent.getInstance(this);
         //注册推送服务,每次调用register方法都会回调该接口
        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 方法或在应用的BaseActivity的onCreate方法中添加
PushAgent.getInstance(context).onAppStart();
  1. 最后一步,打包运行。记得要打包,不打包的话,推送貌似不行。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容

  • 产品概述 Android U-share 6.0sdk是在5.0+的基础上做了进一步的优化,降低了包的大小,对于三...
    AiPuff阅读 7,013评论 1 10
  • 时间:2016年5月10日21:28:50作者:JustDo23版本:友盟SDK v5.6.7 (2016-3-2...
    JustDo23阅读 15,783评论 14 32
  • 官方文档:http://dev.umeng.com/analytics/ios-doc/integration 1...
    张璠阅读 1,933评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,544评论 25 707
  • I WHEN Miss Emily Grierson died, our whole town went to h...
    小帅猪阅读 1,153评论 0 2