安卓学习笔记---友盟分享的坑

这几天需要做分享,一开始使用的是ShsreSDK分享,基本也已加入项目中,但是老板说使用友盟分享,那就改呗,从此在坑的道路上越走越远

1.首先是进入友盟官网去申请账号:http://mobile.umeng.com/social

2.当然是要去第三方的网站去申请了,微信,QQ,新浪

然后我再微信的应用签名那里就遇到了坑,需要上传一个应用签名和包名,签名我以为是SHA1,其实是MD5啊!!!怪不得老板告诉我已经申请好了,但是我这里还是不能调起微信分享,是自己理解错了!!!

我使用的是AndroidStudio,如果要生成签名,可以看一下这篇文章:

安卓学习笔记---Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值

http://blog.csdn.net/juhua2012/article/details/74943519

还有就是当你重新修改了签名在微信平台上之后,是可以立即生效的,但是你或许应该先把微信卸载,在重新安装一下,因为可能会有缓存,导致新的签名不能生效,可以看一下这篇文章

微信支付应用签名写错修改会立即生效和后面的坑

http://jingyan.baidu.com/article/03b2f78c0f8fec5ea237aeb6.html

3.下面就是去官网下载sdk以及需要的一些文件了

http://dev.umeng.com/social/android/quick-integration#3_2  这个是步骤,可以一步一步跟着做

现在的友盟进行了更新,和原来的不太一样了

下载sdk之后,解压出现的目录如下


记得要把标注的文件夹里面的所有内容都复制到项目中去,按照官网说的,但是运行之后,发现少了一些jar包或者文件,全部复制进去之后就好,在这部分也遇到了坑,全部复制进去之后,项目的目录基本如下:



4. AndroidManifest.xml里面的内容基本是这样

<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" />

<application
   android:name=".BaseApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    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>

    <!--分享相关-->
    <meta-data
        android:name="UMENG_APPKEY"
        android:value="在友盟官网创建应用获得的appkey" >
    </meta-data>
    <!--新浪-->
    <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="com.sina.weibo.sdk.component.WeiboSdkBrowser"
        android:configChanges="keyboardHidden|orientation"
        android:windowSoftInputMode="adjustResize"
        android:exported="false" >
    </activity>
    <service android:name="com.sina.weibo.sdk.net.DownloadService"
        android:exported="false"></service>

    <!--微信-->
    <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="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"/>
</application>

5.里面有一句

 android:name=".BaseApplication",创建这个BaseApplication,基本内容如下
public class BaseApplication extends Application {
    static {
        PlatformConfig.setWeixin("wx555cfv6666fgtgfvdfc1577cd", "axasxasxhjasx6u67i78q223237i89a9f51638");
        PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
        PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad", "http://sns.whalecloud.com");
    }

    @Override
    public void onCreate() {
        super.onCreate();
        UMShareAPI.get(this);
    }
}

根据从不同的平台得到的,进行替换即可

6.下面附上自己写的

/**
 * 友盟分享接入
 * http://dev.umeng.com/social/android/share-detail
 */
public class MainActivity extends AppCompatActivity {

    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context=MainActivity.this;
        //Config.DEBUG = true;


        findViewById(R.id.btn_share).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

               // UmengTool.checkWx(MainActivity.this);
                
                //设置分享图片
                UMImage image = new UMImage(MainActivity.this, "imageurl");//网络图片
                //推荐使用网络图片和资源文件的方式,平台兼容性更高。 对于微信QQ的那个平台,分享的图片需要设置缩略图,缩略图的设置规则为:
                UMImage thumb =  new UMImage(MainActivity.this, R.drawable.thumb);
                image.setThumb(thumb);
                //用户设置的图片大小最好不要超过250k,缩略图不要超过18k,如果超过太多(最好不要分享1M以上的图片,压缩效率会很低),图片会被压缩。 用户可以设置压缩的方式:
                // 压缩格式设置:
                image.compressStyle = UMImage.CompressStyle.SCALE;//大小压缩,默认为大小压缩,适合普通很大的图
               // image.compressStyle = UMImage.CompressStyle.QUALITY;//质量压缩,适合长图的分享

               // image.compressFormat = Bitmap.CompressFormat.PNG;//用户分享透明背景的图片可以设置这种方式,但是qq好友,微信朋友圈,不支持透明背景图片,会变成黑色


                //设置分享链接
                //分享链接可以使用UMWeb进行分享:
                //注意在新浪平台,缩略图属于必传参数,否则会报错
                UMWeb web = new UMWeb("http://www.baidu.com");
                web.setTitle("连接标题");//标题
                web.setThumb(thumb);  //缩略图
                web.setDescription("描述");//描述

                new ShareAction(MainActivity.this).withText("分享内容")//分享内容
                        .withMedia(image)//分享图片
                        .withMedia(web) //分享链接
                        .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.QZONE,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE)
                        .setCallback(umShareListener).open();
            }
        });
    }



    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);

    }

    private UMShareListener umShareListener = new UMShareListener() {
        @Override
        public void onStart(SHARE_MEDIA platform) {
            //分享开始的回调
        }
        @Override
        public void onResult(SHARE_MEDIA platform) {
            Log.d("plat","platform"+platform);

            if(SHARE_MEDIA.SINA.equals(platform))
            {
                Toast.makeText(context, " 新浪微博分享成功啦", Toast.LENGTH_SHORT).show();
            }else if(SHARE_MEDIA.QQ.equals(platform))
            {
                Toast.makeText(context," QQ分享成功啦", Toast.LENGTH_SHORT).show();
            }else if(SHARE_MEDIA.QZONE.equals(platform))
            {
                Toast.makeText(context," QQ空间分享成功啦", Toast.LENGTH_SHORT).show();
            }else if(SHARE_MEDIA.WEIXIN.equals(platform))
            {
                Toast.makeText(context," 微信分享成功啦", Toast.LENGTH_SHORT).show();
            }else if(SHARE_MEDIA.WEIXIN_CIRCLE.equals(platform))
            {
                Toast.makeText(context," 朋友圈分享成功啦", Toast.LENGTH_SHORT).show();
            }

        }

        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            if(SHARE_MEDIA.SINA.equals(platform))
            {
                Toast.makeText(context," 新浪微博分享失败啦", Toast.LENGTH_SHORT).show();
            }else if(SHARE_MEDIA.QQ.equals(platform))
            {
                Toast.makeText(context," QQ分享失败啦", Toast.LENGTH_SHORT).show();
            }else if(SHARE_MEDIA.QZONE.equals(platform))
            {
                Toast.makeText(context," QQ空间分享失败啦", Toast.LENGTH_SHORT).show();
            }else if(SHARE_MEDIA.WEIXIN.equals(platform))
            {
                Toast.makeText(context," 微信分享失败啦", Toast.LENGTH_SHORT).show();
            }else if(SHARE_MEDIA.WEIXIN_CIRCLE.equals(platform))
            {
                Toast.makeText(context," 朋友圈分享失败啦", Toast.LENGTH_SHORT).show();
            }
            if(t!=null){
                Log.d("throw","throw:"+t.getMessage());
            }
        }

        @Override
        public void onCancel(SHARE_MEDIA platform) {
            if(SHARE_MEDIA.SINA.equals(platform))
            {
                Toast.makeText(context," 新浪微博分享取消了", Toast.LENGTH_SHORT).show();
            }else if(SHARE_MEDIA.QQ.equals(platform))
            {
                Toast.makeText(context," QQ分享取消了", Toast.LENGTH_SHORT).show();
            }else if(SHARE_MEDIA.QZONE.equals(platform))
            {
                Toast.makeText(context," QQ空间分享取消了", Toast.LENGTH_SHORT).show();
            }else if(SHARE_MEDIA.WEIXIN.equals(platform))
            {
                Toast.makeText(context," 微信分享取消了", Toast.LENGTH_SHORT).show();
            }else if(SHARE_MEDIA.WEIXIN_CIRCLE.equals(platform))
            {
                Toast.makeText(context," 朋友圈分享取消了", Toast.LENGTH_SHORT).show();
            }
        }
    };

    @Override
    protected void onDestroy() {
        super.onDestroy();
        UMShareAPI.get(this).release();//防止内存泄漏
    }
}
注意:
 Config.DEBUG = true;这个是可以在DEBUG下可以看到一些分享的输出,便于查看
UmengTool.checkWx(MainActivity.this);这一句是我的微信一直调不出来,加上的,可以查看你的签名和包名是否正确
我也是这样查看之后才知道自己的签名出现了问题的
在这里记录下来,以后少走弯路吧,毕竟时间真的耗不起啊!!!
最后运行之后显示的效果



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值