美文网首页中转站
友盟多平台分享(有用的实战工具)

友盟多平台分享(有用的实战工具)

作者: 唠嗑008 | 来源:发表于2017-02-15 12:25 被阅读0次

    友盟官方文档
    http://dev.umeng.com/social/android/quick-integration?spm=0.0.0.0.pG0caE

    1. 产品概述

    关于分享和授权的sdk接口,我们在v5.0做出了巨大的改变,精简了接口调用的代码。并将分享授权,与评论等功能做出了隔离,使结构更加清晰。所以本版本的功能也只有分享与授权并无其他功能,请开发者注意。
    注意:本文示例代码只有分享与授权功能,并对接口进行了调整,如需要原功能的开发者,请继续使用v4.3.0版本。

    2. 获取友盟Appkey

    如果你之前已经在友盟注册了应用,并获取到了Appkey,可以继续使用它.
    如果你尚未在友盟注册开发者账号,需要先注册,注册之后登录你的账号,点击添加新应用,填写完应用基本信息后,将进入"下载SDK并添加代码"页面,此页面即可得到Appkey。

    3. 下载官方SDK

    关于这一步,自行到官网下载即可,无非就是把下载好的jar包拷贝到项目中(按友盟官方文档来即可)

    4、AndroidManifest配置

    在AndroidManifest.xml中的 <application></<application>中设置

    (1)友盟Appkey(注意value需要设置成你自己的值,否则会失败)

    <meta-data
               android:name="UMENG_APPKEY"
               android:value="561cae6ae0f55abd990035bf">
            </meta-data>
    

    (2)增加权限

    
    <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.INTERNET" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.SET_DEBUG_APP" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    
    

    (3)针对不平台所需要添加的数据,按照自己需要的平台添加对应的配置
    微信:

    <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.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" />
    
                <data android:scheme="tencent100424468" />
                </intent-filter>
                </activity>
                <activity
            android:name="com.umeng.qq.tencent.AssistActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="orientation|keyboardHidden|screenSize"/>
    

    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:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="orientation|keyboardHidden|screenSize"/>
    

    分享编辑页

    <activity
            android:name="com.umeng.socialize.editorpage.ShareActivity"
            android:theme="@style/Theme.UMDefault"
            android:excludeFromRecents="true"/>
    

    5、建立一个application文件,随便起一个名字,比如叫App,别忘了在AndroidManifest文件中配置(如果本身已有,不需要重新建立):

    在application类中配置第三方分享平台的appkey以及友盟的初始化:

    public class MyApplication extends Application {
    
        {
            PlatformConfig.setWeixin("wx7db093453016ae52", "d0d9e6d67b85b128261d4131515d3a97");
            PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
    
            //初始化友盟sdk
            UMShareAPI.get(this);
        }
    

    关于各个平台的配置,各个平台的配置,建议放在全局Application或者程序入口(需要到各个平台去注册申请)

    
    
    PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");
           //微信 appid appsecret
    PlatformConfig.setSinaWeibo("3921700954","04b48b094faeb16683c32669824ebdad");
           //新浪微博 appkey appsecret
    PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba"); 
            // QQ和Qzone appid appkey     
    PlatformConfig.setAlipay("2015111700822536");
            //支付宝 appid
    PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
            //易信 appkey      
    PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");
            //Twitter appid appkey
    PlatformConfig.setPinterest("1439206");
            //Pinterest appid 
    PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");
            //来往 appid appkey
    
    

    ---------------------至此友盟分享的配置已经完成---------------------------------

    接下来就是分享的完整代码了

    public class ShareUtils {
    
        private Activity activity;
        private String targetUrl; //分享的链接
    
        public ShareUtils(Activity activity, String targetUrl){
            this.activity = activity;
            this.targetUrl = targetUrl;
        }
    
        //多平台分享(qq、qq空间、微信、微信朋友圈)
        public  void shareMorePlatform() {
            new ShareAction(activity).setDisplayList(
                    SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.WEIXIN,
                    SHARE_MEDIA.WEIXIN_CIRCLE)
                    .setShareboardclickCallback(shareBoardlistener).open();
        }
    
        private  ShareBoardlistener shareBoardlistener = new ShareBoardlistener() {
    
            @Override
            public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
                if (share_media == null) {
                    if (snsPlatform.mKeyword.equals("umeng_sharebutton_custom")) {
                        Toast.makeText(activity, "add button success", Toast.LENGTH_SHORT).show();
                    }
    
                } else {
                    new ShareAction(activity)
                            .setPlatform(share_media)
                            .setCallback(umShareListener)
                            .withText("来自知么网络的分享")
                            //分享图片
                            .withMedia(new UMImage(activity, R.drawable.applogo120))
                            //分享网络链接
                            .withTargetUrl(targetUrl)
                            .share();
                }
            }
        };
    
        private  UMShareListener umShareListener = new UMShareListener() {
            @Override
            public void onResult(SHARE_MEDIA platform) {
                Log.i("plat", "---->分享成功了");
                Log.i("plat", "platform" + platform);
                Toast.makeText(activity, "分享成功啦", Toast.LENGTH_SHORT).show();
            }
    
            @Override
            public void onError(SHARE_MEDIA platform, Throwable t) {
                Toast.makeText(activity, "分享失败啦", Toast.LENGTH_SHORT).show();
                if (t != null) {
                    Log.i("plat", "---->分享失败了");
                    Log.i("throw", "throw:" + t.getMessage() + t.getCause());
                }
            }
    
            @Override
            public void onCancel(SHARE_MEDIA platform) {
                Toast.makeText(activity, "分享取消了", Toast.LENGTH_SHORT).show();
            }
        };
    
    }
    
    

    6、关于微信分享

    在你的项目的包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。这里注意一定是包名路径下,例如我的包名是com.umeng.soexample,则配置如下:(需要注意,如果使用精简版WXCallbackActivity的路径为com.umeng.weixin.callback.WXCallbackActivity,如果使用完整版路径是com.umeng.socialize.weixin.view.WXCallbackActivity)

    关于微信平台申请对应的appkey需要的注意事项,(我的项目一开始就是没有在微信平台设置好这个签名,就一直打不开微信分享)

    1)签名
    2)包名(必须是你的项目的包名)
    签名的获取可以参考这篇博客
    <a href="http://blog.csdn.net/liupengcheng201/article/details/51681419"> 微信开放平台中android 应用签名的获取</a>

    微信签名说明
    由于微信的签名过程跟验证流程较多,出错的可能性较大,这里将对微信的签名过程跟验证做详细的说明。
    首先必须确保正确设置微信AppID及secret 工程的包名必须同申请应用的包名一致。 在微信开放平台填写你App的的签名,测试、发布时要保证App的签名跟微信开放平台的签名一致。 开发者的应用需要通过审核。开发者在申请应用必须要通过微信官网的审核才能进行调试,可以使用签名工具自行检查比对
    8.3.1 获取签名
    获取应用签名方式有两种
    8.3.1.1 方式一:
    用eclipse导出 带签名 的apk文件,注意此时选择的签名文件是你发布app时的签名文件。在导出的最后一步,eclipse会显示一个Certificate fingerprints(证书指纹),如下图。此时找到MD5值,将该MD5值复制出来,按照“ 去掉冒号(:),大写转小写 ”的规则装换,此时字符串就是签名。


    8.3.1.2 方式二:
    导出 带签名 的apk文件,将该apk文件安装至手机中。安装微信的签名工具,打开应用程序,即可得到签名。
    将获取到的签名和下图进行比对

    注意如果修改了微信平台的包名和签名,需要重装微信客户端后才可以测试,否则本地会保留之前的签名缓存

    7、QQ及Qzone登录

    实现方法同样如上,注意下面几点:
    QQ及Qzone登录都必须安装QQ客户端,并且只能跳转QQ客户端实现登录,无法跳转到Qzone客户端
    QQ及Qzone登录需要确保在腾讯平台通过审核或添加测试账号,否则会报错110406
    QQ及Qzone登录必须确保apk签名与腾讯平台上传的apk签名匹配,否则会报错100044,出现此错误请联系腾讯平台人员(QQ:800013811 )修改apk签名

    注意将Android manifest xml里的 腾讯平台APPID替换为自己申请的APPID,注意tencent前缀不要修改,否则无法正常实现QQ及Qzone登录
    平台授权,是需要安装对应的客户端的。新浪微博,豆瓣网,人人网除外,新浪和人人如果本地安装了对应平台是走本地授权,如果没有安装,需要走网络授权

    相关文章

      网友评论

        本文标题:友盟多平台分享(有用的实战工具)

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