友盟的QQ分享相比较其他几个渠道更容易遇到问题,开发过程中遇到的问题一般主要为分享失败和分享后不执行回调方法两大类,下面逐一看一下各个问题的解决办法:
一.分享失败
分享失败主要有以下几个原因:
1.首先检查项目中Application中注册友盟时的APPID和AndroidManifest中所注册的APPID是否一致:
UMShareAPI.get(this);
PlatformConfig.setQQZone(APPID, APPKEY);
<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" />
<!-- APPID,如果你使用的公用账号,则不需要修改;否则修改成你在QQ开放平台申请的APPID -->
<data android:scheme="tencentAPPID" />
</intent-filter>
</activity>
2.QQ分享需要内存权限,这一点上QQ有点特殊~
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
所以在使用友盟QQ分享的时候,要先检查是否有内存读写权限:
//申请存储空间权限
private void requestPermissions() {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int permission = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE,}, PERMISSION_REQUEST_STOREAGE);
} else {
qqShare(SHARE_MEDIA.QQ);
}
} else {
qqShare(SHARE_MEDIA.QQ);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
try {
if (requestCode == PERMISSION_REQUEST_STOREAGE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
qqShare(SHARE_MEDIA.QQ);
}
return;
}
} catch (Exception e) {
e.printStackTrace();
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
3.如果分享的是链接则要注意链接地址
如果分享的链接是本地搭建的服务器地址,例如:"http://192.168.0.1:8000/xxx",这种链接有可能会造成分享失败。
所以分享链接最好用带域名的链接,不要使用带ip地址的链接.
二.分享后不执行回调方法:
1.在scheme中需要加上tencent
例如你申请的APPID为1110001111(应该都是11位数字~这里只是举个栗子),那么scheme="tencent1110001111"
<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" />
<!-- 1110001111,如果你使用的公用账号,则不需要修改;否则修改成你在QQ开放平台申请的 APP ID -->
<data android:scheme="tencent1110001111" />
</intent-filter>
</activity>
2.需要在使用QQ分享的对应Activity或者Fragment的onActivityResult()方法中加入友盟的回调方法,如下所示:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
经过以上两步,应该可以解决不执行回调方法的问题~
希望可以帮到大家~如文中有错误请留言指正:一同交流,一起进步。