友盟

作者: 沈溺_16e5 | 来源:发表于2019-04-24 21:16 被阅读0次

    https://www.umeng.com/analytics
    友盟集成总得来说可以分为:
    1.友盟官方账号申请 + SDK集成
    2.第三方账号申请 + 应用创建
    3.将三方的 appId 和 appKey 配置到应用
    4.分享和登录 Api 调取实现分享和登录

    1、友盟官方注册账号,创建应用,生成对应的 appkey

    进入友盟,点击:产品|解决方案 ---> 移动统计(U-APP AI版) ---> 进入新版 --> 添加新应用,填写信息并获取 appkey,该 appKey 不和应用包名绑定


    0e5a5490-b47c-4101-9481-6a9a14082ea7.png

    2、将 sdk 里面的 jar 和资源拷贝到项目中:

    038d89d4-242c-4f49-b307-795425311eff.png

    3、签名配置

    签名的概念将文件夹中的签名文件放入到工程中,例如我的签名文件是debug.keystore(debug 运行都是使用这个系统自带的签名文件,在 .android 下,以后开发用自己 keystore)


    0.09858922614457644.png

    在项目的 build.gradle(module)

    android {
        ...
        signingConfigs {
            debug {
                storeFile file('debug.keystore')
                storePassword "android"
                keyAlias "androiddebugkey"
                keyPassword "android"
            }
        }
    }
    

    4、添加回调 Activity

    微信需要添加如下类
    在包名目录下创建 wxapi 文件夹,新建一个名为 WXEntryActivity 的 activity 继承WXCallbackActivity


    2325fa9f-00c1-4c22-b34a-4a950890bbc5.png

    5、配置 Android Manifest XML

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.example.lenovo.youmeng">
    
        <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" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
        <application
            android:name=".MyApplication"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <!--新浪-->
            <activity
                android:name="com.umeng.socialize.media.WBShareCallBackActivity"
                android:configChanges="keyboardHidden|orientation"
                android:theme="@android:style/Theme.Translucent.NoTitleBar"
                android:exported="false"
                >
            </activity>
            <activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
                android:configChanges="keyboardHidden|orientation"
                android:exported="false"
                android:windowSoftInputMode="adjustResize"
                >
    
            </activity>
            <activity
                android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
                android:launchMode="singleTask"
                android:name="com.sina.weibo.sdk.share.WbShareTransActivity">
                <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: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="tencent100424468" />
                </intent-filter>
            </activity>
            <activity
                android:name="com.tencent.connect.common.AssistActivity"
                android:theme="@android:style/Theme.Translucent.NoTitleBar"
                android:configChanges="orientation|keyboardHidden|screenSize"/>
    
        </application>
    
    </manifest>
    

    6、MyApplication

    import android.app.Application;
    
    import com.umeng.commonsdk.UMConfigure;
    import com.umeng.socialize.PlatformConfig;
    
    public class MyApplication extends Application{
        @Override
        public void onCreate() {
            super.onCreate();
            // 5cc0459a4ca357ce9a00068d  AK
            UMConfigure.init(this,"5cc0459a4ca357ce9a00068d"
                    ,"umeng", UMConfigure.DEVICE_TYPE_PHONE,"");//58edcfeb310c93091c000be2 5965ee00734be40b580001a0
    
            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");*/
        }
    
    }
    
    注意:不要忘了同步,如果 Application 中的 UMConfigure 报红就重新同步

    7、Activity

    import android.Manifest;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v4.app.ActivityCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    import com.umeng.socialize.ShareAction;
    import com.umeng.socialize.UMAuthListener;
    import com.umeng.socialize.UMShareAPI;
    import com.umeng.socialize.UMShareListener;
    import com.umeng.socialize.bean.SHARE_MEDIA;
    import com.umeng.socialize.media.UMImage;
    
    import java.util.Map;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        private Button share;
        private Button login;
    
        // 5cc0459a4ca357ce9a00068d
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initView();
            // 权限
            initPermission();
        }
    
        private void initPermission() {
            String[] per = {Manifest.permission.READ_PHONE_STATE,
                    Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
    
            ActivityCompat.requestPermissions(this, per, 100);
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
        }
    
        private void initView() {
            share = (Button) findViewById(R.id.share);
    
            share.setOnClickListener(this);
            login = (Button) findViewById(R.id.login);
            login.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.share:
                    share();
    
                    break;
                case R.id.login:
                    login();
                    break;
            }
        }
        // 登录
        public void login() {
            UMShareAPI umShareAPI = UMShareAPI.get(this);
            umShareAPI.getPlatformInfo(MainActivity.this, SHARE_MEDIA.SINA, umAuthListener);
        }
    
        UMAuthListener umAuthListener = new UMAuthListener() {
            /**
             * @desc 授权开始的回调
             * @param platform 平台名称
             */
            @Override
            public void onStart(SHARE_MEDIA platform) {
    
            }
    
            /**
             * @desc 授权成功的回调
             * @param platform 平台名称
             * @param action 行为序号,开发者用不上
             * @param data 用户资料返回
             */
            @Override
            public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
    
                Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_LONG).show();
    
            }
    
            /**
             * @desc 授权失败的回调
             * @param platform 平台名称
             * @param action 行为序号,开发者用不上
             * @param t 错误原因
             */
            @Override
            public void onError(SHARE_MEDIA platform, int action, Throwable t) {
    
                Toast.makeText(MainActivity.this, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show();
            }
    
            /**
             * @desc 授权取消的回调
             * @param platform 平台名称
             * @param action 行为序号,开发者用不上
             */
            @Override
            public void onCancel(SHARE_MEDIA platform, int action) {
                Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();
            }
        };
        // 分享
        private void share() {
            UMImage image = new UMImage(MainActivity.this, "https://ws1.sinaimg.cn/large/0065oQSqly1fw8wzdua6rj30sg0yc7gp.jpg");//网络图片
            image.compressStyle = UMImage.CompressStyle.SCALE;//大小压缩,默认为大小压缩,适合普通很大的图
            new ShareAction(MainActivity.this)
                    .withText("hello")
                    .withMedia(image)
                    .setDisplayList(SHARE_MEDIA.SINA, SHARE_MEDIA.QQ, SHARE_MEDIA.WEIXIN)
                    .setCallback(shareListener).open();
        }
    
        private UMShareListener shareListener = new UMShareListener() {
            /**
             * @descrption 分享开始的回调
             * @param platform 平台类型
             */
            @Override
            public void onStart(SHARE_MEDIA platform) {
    
            }
    
            /**
             * @descrption 分享成功的回调
             * @param platform 平台类型
             */
            @Override
            public void onResult(SHARE_MEDIA platform) {
                Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_LONG).show();
            }
    
            /**
             * @descrption 分享失败的回调
             * @param platform 平台类型
             * @param t 错误原因
             */
            @Override
            public void onError(SHARE_MEDIA platform, Throwable t) {
                Toast.makeText(MainActivity.this, "失败" + t.getMessage(), Toast.LENGTH_LONG).show();
            }
    
            /**
             * @descrption 分享取消的回调
             * @param platform 平台类型
             */
            @Override
            public void onCancel(SHARE_MEDIA platform) {
                Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();
    
            }
        };
    }
    
    注意 onActivityResult 不可在 fragment 中实现,如果在 fragment 中调用登录或分享,需要在 fragment 依赖的 Activity 中实现,Activity 一定要找对,不要放到其他的 Activity 中
    注意 onActivityResult 不可在 fragment 中实现,如果在 fragment 中调用登录或分享,需要在 fragment 依赖的 Activity 中实现,Activity 一定要找对,不要放到其他的 Activity 中
    注意 onActivityResult 不可在 fragment 中实现,如果在 fragment 中调用登录或分享,需要在 fragment 依赖的 Activity 中实现,Activity 一定要找对,不要放到其他的 Activity 中

    8、分享(不带面板)

    public void share(SHARE_MEDIA share_media){
            //在使用ShareAction的时候,调用withMedia可以设置一个UMImage(图片分享),
            // UMImage的构建有如下几种形式
            /*UMImage image = new UMImage(ShareActivity.this, "imageurl");//网络图片
            UMImage image = new UMImage(ShareActivity.this, file);//本地文件
            UMImage image = new UMImage(ShareActivity.this, R.drawable.xxx);//资源文件
            UMImage image = new UMImage(ShareActivity.this, bitmap);//bitmap文件
            UMImage image = new UMImage(ShareActivity.this, byte[]);//字节流*/
            UMImage image = new UMImage(this, "https://ws1.sinaimg.cn/large/0065oQSqly1fw8wzdua6rj30sg0yc7gp.jpg");
            image.compressStyle = UMImage.CompressStyle.SCALE;//大小压缩,默认为大小压缩,适合普通很大的图
            new ShareAction(MainActivity.this)
                    .setPlatform(share_media)//传入平台
                    .withMedia(image)
                    .withText("hello")//分享内容
                    .setCallback(umShareListener)//回调监听器
                    .share();
    }
    
    //调用如下
        share(SHARE_MEDIA.QQ);
        share(SHARE_MEDIA.WEIXIN);
        share(SHARE_MEDIA.SINA);
    

    9、删除授权(对于退出登录,想要删除授权的用户可以使用如下接口:)

    UMShareAPI.get(mContext).deleteOauth(Activity, Platform, authListener);
    

    10、内存泄漏解决方案

    @Override
    protected void onDestroy() {
            super.onDestroy();
            UMShareAPI.get(this).release();
    }
    

    11、QQ

    https://connect.qq.com/index.html
    申请账号,进行认证(需要审核),完成之后创建应用
    需要绑定包名和签名(使用别的appid也可以,但开发用自己的)

    12、微信

    https://open.weixin.qq.com/
    微信开放平台,需要认证审核,每年300,认证通过可以创建应用,和包名+签名文件绑定

    72bedb4a-9c01-4721-acb3-ded0cd7f48d9.png f22fcdd0-e769-403f-99b8-e209f7982a1d.png

    13、新浪

    https://open.weibo.com/
    需要绑定包名和签名(使用别的 App Key 和 App Secret 不行),申请完应用需要去高级里面添加授权回调页:
    http://sns.whalecloud.com(把这个网址填到第 4 张图片划红线的位置)

    f62524fc-370f-4665-a5d6-20450e78f96f.jpg
    690420c6-2464-4621-95d3-6c2744b217a6.png
    c900c787-0fab-41e3-8300-4352e530d50e.png
    e336c14b-1f1a-45ba-a275-1f6fd8fbed50.jpg

    授权设置里填的内容是 http://sns.whalecloud.com,在 Application 中也有

    PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");
    

    相关文章

      网友评论

          本文标题:友盟

          本文链接:https://www.haomeiwen.com/subject/xvcngqtx.html