RxReader / tencent_kit

Flutter版QQ登录/分享
MIT License
235 stars 63 forks source link

安卓的清单文件配置是有问题的吧 #22

Closed liyujiang-gzu closed 4 years ago

liyujiang-gzu commented 4 years ago
        <provider
            android:name=".content.TencentKitFileProvider"
            android:authorities="com.tencent.tauth.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">

            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/tencent_kit_file_paths" />
        </provider>

android:authorities="com.tencent.tauth.fileprovider"这句不是应该加上应用包名吗,不让同一个手机里就只能安装一个依赖这个的APP了:

build/app/outputs/apk/app.apk: Failure [INSTALL_FAILED_CONFLICTING_PROVIDER: Package couldn't be installed in /data/app/***-1: Can't install because provider name com.tencent.tauth.fileprovider (in package ***) is already used by com.tencent.sample]
droplet-js commented 4 years ago

这个是从腾讯sdk里弄出来的,我等会儿弄掉吧,腾讯sdk有点坑

droplet-js commented 4 years ago

你先用上个版本的插件吧

liyujiang-gzu commented 4 years ago

好的,谢谢你,回复这么及时。这个provider是由我想腾讯申明提供给第三方用的,第三方APP里无需在Manifest里加的吧:com.tencent.tauth.fileprovider

liyujiang-gzu commented 4 years ago

这个是从腾讯sdk里弄出来的,我等会儿弄掉吧,腾讯sdk有点坑

QQ SDK的确很坑,demo的技术太过时了,那个Android 10。0 的Apache HttpClient兼容问题他们文档都没说明一下。

droplet-js commented 4 years ago

这个涉及Android分享文件,是第三方向腾讯QQ提供文件内容的

droplet-js commented 4 years ago

这个是我疏忽了,被腾讯sdk里的固定值误导,忘记这个权限要随应用包名而不同 …

liyujiang-gzu commented 4 years ago

我现在是这样来覆盖你原来的值:

    <application>
        <provider
            android:name="io.github.v7lin.tencent_kit.content.TencentKitFileProvider"
            android:authorities="${applicationId}.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true"
            tools:replace="android:authorities">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/tencent_kit_file_paths" />
        </provider>
    </application>
droplet-js commented 4 years ago

{applicationId}.tauth.fileprovider 比较好,避免和其他library冲突

liyujiang-gzu commented 4 years ago

{applicationId}.tauth.fileprovider 比较好,避免和其他library冲突

好的,非常感谢!这个github还能跟聊天工具一样自动实时刷新消息啊,你一回复马上就看到

liyujiang-gzu commented 4 years ago

@v7lin

    //com.tencent.open.utils.h#b
    public static boolean b(Context context) {
        List installedPackages = context.getPackageManager().getInstalledPackages(0);
        if (installedPackages == null) {
            return false;
        }
        for (int i = 0; i < installedPackages.size(); i++) {
            if (((PackageInfo) installedPackages.get(i)).packageName.equals("com.tencent.mobileqq")) {
                return true;
            }
        }
        return false;
    }
    //io.github.v7lin.tencent_kit#TencentKitPlugin
     boolean isQQInstalled = false;
            try {
                final PackageManager packageManager = registrar.context().getPackageManager();
                PackageInfo info = packageManager.getPackageInfo("com.tencent.mobileqq", 0);
                isQQInstalled = info != null;
            } catch (PackageManager.NameNotFoundException ignore) {
            }

腾讯SDK和你的插件,这里判断QQ是否安装似乎不太严谨,实际上QQ授权及分享支持的手机QQ版本有这几个:大众版(com.tencent.mobileqq)、轻聊版(com.tencent.qqlite)、办公简洁版(com.tencent.tim)

droplet-js commented 4 years ago

👌

liyujiang-gzu commented 4 years ago

我测试了一下,同时安装了普通大众版、急速轻聊版、办公简洁版、多语言国际版等,则拉起授权的是大众版,卸载掉大众版则拉起的是办公版,卸载掉办公版则拉起的是急速版,大众版、急速版、办公版这三个版本都没安装的话就拉起了一个下载最新版QQ的页面,可见腾讯QQ已经不支持网页授权,国际版也不支持SSO授权。

droplet-js commented 4 years ago

👌,我等会儿一起改了