iOS和安卓如何打开第三方APP?

1 篇文章 0 订阅
1 篇文章 0 订阅

自己平时喜欢在某些应用里签到领取奖励,但是之前总是忘记签到,为了解决掉自己这个问题,于是乎最近就做了一款集中签到应用管理的APP【天天爱签到】(好记性不如烂笔头😄),每天打开【天天爱签到】后在签到列表里点一点进行签到就可以了。由于里面需要打开第三方APP,下面记录一下应用中的相关实现方案。

iOS:

因为iOS无法获取当前设备已安装的应用,所以只能让用户自己手动添加需要签到的应用,用户需要填写AppStore URL链接或URL Scheme。由于Bundle ID跳转属于私有API,所以在【天天爱签到】中,采用了方式1 和 方式2 结合的方案,如果填写了URL Scheme则优先通过URL Scheme进行跳转,如果跳转失败或者未填写,则通过AppStore URL方式跳转。

打开应用可通过以下三种方式:

1、URL Scheme,知道目标APP的URL Scheme后可通过以下代码进行跳转。如果你不知道目标应用的URL Scheme,那么你可以在一个叫捷径社区的网站里查找。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:model.url_scheme] options:@{} completionHandler:^(BOOL success) {
            
}];

2、AppStore URL,根据用户填写的AppStore URL链接,可通过openURL跳转到AppStore,如果已安装该应用,则AppStore会显示打开,此时再点击打开就可以挑战到目标APP了。(相比第一种方式,这种方式多一步操作,需要用户手动点击打开)。

那么如何获取AppStore URL链接呢?首先打开AppStore,搜索目标应用,然后点击打开详情,再点击右上角分享按钮,在弹出菜单中点击拷贝链接,然后返回【天天爱签到】粘贴完成即可。

3、Bundle ID跳转,属于私有API(无法上架,本人已被拒绝过两次了😭)。

if (model.bundle_id.length > 0){
        Class lsawsc = NSClassFromString([NSString stringWithFormat:@"LSAppli%@",@"cationWorkspace"]);
        NSObject* workspace = [lsawsc performSelector:NSSelectorFromString([NSString stringWithFormat:@"defaultW%@",@"orkspace"])];
        SEL sel = NSSelectorFromString([NSString stringWithFormat:@"openApp%@",@"licationWithBundleID:"]);
        if ([workspace respondsToSelector:sel]) {
            BOOL result = [workspace performSelector:sel withObject:model.bundle_id];
            if (!result) {
                [self showAlertWithText:@"无法打开应用,请检查应用是否安装。"];
            } else {
                //跳转成功
            }
        }
    }

安卓:

安卓采用获取当前设备已安装的应用列表方式(注意:应用过多,获取应用列表时会特别的慢,需要处理),让用户选择要进行管理的应用。相比iOS的实现方案来说,安卓端不需要用户填写应用信息,只需要选择当前设备已安装的应用即可。跳转方式也直接通过包名进行跳转,相比安卓的AppStore URL方式体验会更好一些。

1、获取已安装的应用列表:

获取本设备已安装的应用列表需要添加权限:

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
    public static ArrayList<AppInfo> getAllAppInfo(Context context,boolean isFilterSystem) {
        ArrayList<AppInfo> appBeanList = new ArrayList<>();
        AppInfo bean =  null;
        PackageManager packageManager = context.getPackageManager();
        List<PackageInfo> list = packageManager.getInstalledPackages(0);
        for (PackageInfo p : list) {
            bean = new AppInfo();
            Drawable drawable = p.applicationInfo.loadIcon(packageManager);
            bean.setIcon(drawable);
            bean.setLabel(packageManager.getApplicationLabel(p.applicationInfo).toString());
            bean.setPackage_name(p.applicationInfo.packageName);
            int flags = p.applicationInfo.flags;
            if ((flags & ApplicationInfo.FLAG_SYSTEM) != 0 && isFilterSystem) {
                //判断是否是系统的应用

            } else {
                appBeanList.add(bean);
            }
        }

        return appBeanList;
    }

2、打开第三方APP

    public static void launchApp(Context context,String packageName,String id) {
        try {
            PackageManager packageManager = context.getPackageManager();
            Intent intent = packageManager.getLaunchIntentForPackage(packageName);
            if (null != intent) {
                context.startActivity(intent);
            } else {
                Log.e("Sign","打开失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

想体验交互效果的可以在AppStore搜【天天爱签到】,安卓只上了Play。

在uniapp开发中,如果需要打开第三方平台的应用程序,可以使用plus.runtime.launchApplication方法。具体的代码示例如下: ```javascript console.log("打开第三方APP"); let _this = this; // 判断平台 if (plus.os.name == 'Android') { plus.runtime.launchApplication({ pname: data.vo //app包名 }, function(e) { console.log('APP打开成功: ' + e.message); }); } else if (plus.os.name == 'iOS') { plus.runtime.launchApplication({ action: 'taobao://' //填写第三方应用的scheme }, function(e) { console.log('打开成功: ' + e.message); }); } ``` 请注意,Android平台需要传入第三方应用的包名(pname),而iOS平台需要传入第三方应用的scheme(action)。具体的包名和scheme需要根据实际情况进行填写。\[2\] 另外,在使用uni.login方法进行谷歌登录之前,需要先在谷歌开发者控制台上创建一个项目,并将项目的客户端ID配置到应用程序中。具体的配置方法可以参考谷歌开发者控制台的文档。\[3\] #### 引用[.reference_title] - *1* [uniapp 打开第三方APP](https://blog.csdn.net/weixin_38946164/article/details/119735200)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [UNI-APP 打开第三方APP方法](https://blog.csdn.net/weixin_38483239/article/details/119782143)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [uniappAPP项目第三方登录之谷歌登录](https://blog.csdn.net/liu0218/article/details/130684259)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值