【Python成长之路】教你在1分钟内,打造属于你自己的手机应用入口

哈喽大家好,我是鹏哥。

今天是圣诞节,无心加班,也无心游戏。那就把之前欠大家的博客给补上 —— 基于Pythonista3,打造属于你自己的iphone入口

~~~上课铃~~

1

写在前面

之前我第一篇关于pythonista 3的文章就提到过,该app的作者是个大神,开发了很多有意思的样例。今天我就教大家,如何站在大神的肩膀上,快速打造一套属于你自己又简便易用的应用入口。

2

效果展示

在Pythonista的组件中,点击对应按钮即可实现软件入口,如:

支付宝/淘宝/微信:可以打开对应应用;

Pythonista:可运行对应脚本;

支付宝付款码:直接显示付款码;

鹏哥贼优秀:点击直接拨打对应人的电话;

短信:新建消息进行发送;微信扫码:直接打开微信至扫码界面 ;

3

知识串讲(敲黑板啦)

(1)app应用如何跳转

在实现我们应用入口之前,我们先了解下iphone中app是如何跳转的。每个app本身之间其实是相互隔离的,这样才会防止app之间相互窃取信息。但是每个app有个 info.plist文件,在这个文件中会记录url_scheme,而这个url_scheme字段就会记录这个app被调用起来的方式。如微信对应的是“weixin://”,支付宝是“alipay://”,这就有点像每个网站都有其对应的url地址。同样的,每个手机应用也有它特有的url_scheme。

因此,到这里,我们至少可以知道url_scheme是app的唯一标识(如果冲突,那就无法识别了)。

另外,我在这里补充下题外话。其实在调用应用时直接通过手机短信也能实现应用跳转,如下图

当对方点击你的链接,就可以实现相应的功能。因此,为什么说陌生人短信的链接不要随便点击,因为很有可能它的链接可以打开你的某些应用进行操作。

(2)如何查找一个app应用对应的url_scheme呢?

关于这个方法,网上有很多方法,我就引用一段。(当然有些app可能仍然会找不到,这个要看运气了。)

1、用itools查看iOS设备的应用程序 

2、浏览(打开)‘微博’app 

3、打开Weibo.app文件夹,找到info.plist文件 

4、打开info.plist文件,找到<key>CFBundleURLSchemes</key>一行,下面一行<string>…</string>中间的都是‘微博’app的URL Scheme。

5、找到URL后复制粘贴到Launcher的自定义启动器的URL中…并在你粘贴过来的英文后面添加一个冒号两个斜杠, 比如   weibo://

(3)基于pythonista3 实现ui界面代码。

要打造属于自己的应用入口,图标的选择自然也是要讲究的。

刚开始时为了添加各种图标,我一直在查每种图标对应的字符串是怎么样的,比如感叹号是alert,电池是battery,但是在pythonista中要怎么添加呢?

其实很简单,当你随便添加一个图标后,轻点下图标字符串会弹出小图显示。

然后如果你再点下图标你就会打开新世界了!如下图,都是自带的各类图标、颜色、声音,以及其对应的定义。而且你选择点击后,程序会自动将图标设置成新的款式,贼好用!

不得不说,这个功能是个隐藏彩蛋,我也是在很偶尔的情况下才发现的。再补充下,一般像手机屏幕相对较小,图标选择24就够大了(alert_24中的24表示图标大小)。

控件颜色的设置,就相对简单对了 ,因为用的都是RGB。当然也可以在刚才的“新世界”里选择。

(4)将运行结果中,点击“Use in Today”,就会在iphone首页的窗口出现各应用入口了。

4

示例代码

其实下面这段代码在pythonista sample/Widget/Launcher.py中也有,只是我基于自己的使用习惯,修改了实现的功能。

import appex, uiimport osfrom math import ceil, floor
# 默认显示2行3列,在点击more后可显示shortcuts所有内容COLS = 3ROWS = 2
# 只需要修改shortcuts内容,其中title和url必填,其他字段会有默认值SHORTCUTS = [{'title': '支付宝', 'url': 'alipay://', 'color': '#4dd19d','icon':'iow:social_bitcoin_24'},{'title': '淘宝', 'url': 'taobao://', 'color': '#a9de31','icon':'iow:ios7_cart_24'},{'title': '微信', 'url': 'weixin:', 'color': '#ffd026','icon':'iow:chatbubbles_24'},{'title': 'Pythonista', 'url': 'pythonista3://', 'color': '#45d3e8','icon': 'iob:chevron_right_24'},{'title': '百度', 'url': 'http://baidu.com', 'color': '#ff8e13','icon':'iow:ios7_world_outline_24'},{'title': '支付宝付款码', 'url': 'alipay://platformapi/startapp?appId=20000056', 'color': '#ff4a09','icon':'iow:ios7_keypad_32'},{'title': '鹏哥贼优秀', 'url': 'tel://12345678', 'color': '#5e96ff', 'icon': 'iow:ios7_telephone_24'},{'title': '短信', 'url': 'sms://', 'color': '#5ec0ff', 'icon': 'iow:email_32'},{'title': '微信扫码', 'url': 'weixin://scanqrcode', 'color': '#5ec0ff', 'icon': 'iow:ios7_camera_32'},]
class LauncherView (ui.View):  def __init__(self, shortcuts, *args, **kwargs):    row_height = 110 / ROWS    super().__init__(self, frame=(0, 0, 300, ceil(len(shortcuts) / COLS) * row_height), *args, **kwargs)    self.buttons = []    # 将每个按钮功能进行添加至UI控件中    # 如果之前icon不设置,那默认采用有compass_24图标;color字段也一样    for s in shortcuts:      btn = ui.Button(title=' ' + s['title'], image=ui.Image(s.get('icon', 'iow:compass_24')), name=s['url'], action=self.button_action, bg_color=s.get('color', '#55bcff'), tint_color='#fff', corner_radius=9)      self.add_subview(btn)      self.buttons.append(btn)
  # 界面按钮大小布局  def layout(self):    bw = self.width / COLS    bh = floor(self.height / ROWS) if self.height <= 130 else floor(110 / ROWS)    for i, btn in enumerate(self.buttons):      btn.frame = ui.Rect(i%COLS * bw, i//COLS * bh, bw, bh).inset(2, 2)      btn.alpha = 1 if btn.frame.max_y < self.height else 0
  # 按钮点击关联的功能  def button_action(self, sender):    import webbrowser    webbrowser.open(sender.name)    def main():  widget_name = __file__ + str(os.stat(__file__).st_mtime)  v = appex.get_widget_view()  # Optimization: Don't create a new view if the widget already shows the launcher.  if v is None or v.name != widget_name:    v = LauncherView(SHORTCUTS)    v.name = widget_name    appex.set_widget_view(v)    if __name__ == '__main__':  main()

最后再说点关于pythonista脚本的调用方式。上述示例代码中我只是打开pythonista应用,但如何想调用test.py脚本并且带参数a=123,对应的url_scheme如下

pythonista3://test.py?a=123

5

常用URL_Scheme补充

为 了方便大家快速实现自己的应用入口,我把常见的一些应用url共享给大家(其实也是从网上收集的)

以下url_scheme转自https://blog.csdn.net/wm9028/article/details/49995329

淘宝宝贝搜索 taobao://http://s.taobao.com/?q=[prompt]

淘宝店铺搜索

taobao://http://shopsearch.taobao.com/browse/shop_search.htm?q=[prompt]

QQ的url是 mqq://

微信是weixin://

淘宝taobao://

点评dianping:// dianping://search

微博 sinaweibo://

名片全能王camcard://

weico微博weico://

支付宝alipay://

豆瓣fm:doubanradio://

微盘 sinavdisk://

网易公开课ntesopen://

美团 imeituan://

京东openapp.jdmoble://

人人renren://

我查查 wcc://

1号店wccbyihaodian://

有道词典yddictproapp://

知乎zhihu://

优酷 youku://

ZAKER :【zakeripad://】

mdict:【mdict://】

京东hd:【openApp.jdiPad://】

易迅:【wx6964eb0b10aa369b://】;【icson://】;【wap2app://】;【com51buyiPad://】;【sinaweibosso.2217266362://】;【yixunipad://】;

wunderlist:【fb208559595824260://】;【wunderlist://】;

1password:【db-0bcm217bz8olcxj://】;

支付宝:【alipay://】;

亚马逊:【fb115829135094686://】;

查找朋友:【grenada://】;【findmyfriends://】;【fmf1://】;

查找iphone:【fmip1://】;

homestyler:【fb110202249127916://】;

百度旅游hd:【sinaweibosso.3772466956://】;

百度视频hd:【BaiduVideoiPad://】;【baiduvideoipadapp://】;

百度相册hd:【BaiDuCloudAlbumHD://】;

百度音乐hd:【tencent100518384://】;【QQ05FDC9F0://】;【wxdeda8b7428c87b0b://】;【sinaweibosso.4257500584://】;【BaiduMusicHD://】;

百度浏览器hd:【bdbrowser://】;

百度文库hd:【bdwenku://】;

百度地图hd:【sinaweibosso.675661989://】;

百度云:【tencent100312028://】;

扇贝炼句:【wx6cf98af31a47ba29://】;

百词斩:[wxce5d9e837051d623://】;

一个one:【clover-one://】;

launchpro:【launch://】;【launchpro://】;【launchpro-light://】;【launchpro-dial://】;【launchpro-tweet://】;【launchpro-brightness://】;【launchpro-messaging://】;【launchpro-email://】;【launchpro-dropbox://】;【launchpro-clipboard://】;【launchpro-facebook://】;【launchpro-sinaweibo://】;【launch-textexpander://】;【db-23algz5zbfx3ocs://】;【launchipad://】;

当当hd:【dangdanghd://】;【ddhd://】;

大众点评hd:【dianpinghd://】;

多看阅读:【duokan-reader://】;

艺龙旅行hd:【elongiPad://】;

圈点hd:【skitch://】;

食记hd:【wxb9a9141190826bd8://】;

印象笔记hd:【enx://】;

popAgraph:【popagraphtumblr://】;

dropbox:【db-auth://】;【dbapi-1://】;【dbapi-2://】;【dbapi-3://】;【fb210019893730://】;

goodreader:【ghttp://】;【ghttps://】;【grhttp://】;【grhttps://】;【giwhttp://】;【giwhttps://】;【gropen://】;【com.goodreader.sendtogr://】;

houzz:【fb166981393359376://】;

ifttt:【ifttt://】;

名片全能王hd:【camcard://】;【fb444471182246461hdfull://】;【CamCardHDOpenAPI://】;

万年历:【wx5f3a0d4653cd3485://】;

拉手团购hd:【LaShouGroupHDPay://】;

美团hd:【iMeituan://】;

evermemo:【evermemo://】;

网易云课堂:【wangyiyunketang://】;

网易公开课:【ntesopen://】;

订票助手2:【trainassistfree://】;

pcalc lite:【pcalc://】;

爱奇艺视频:【QIYIHD-iPad://】;

documents:【fb435446596521711://】;

三国kill:【sgk://】;

知乎日报hd:【wb2812384762://】;【wb801442902://】;【wx81bd672c6e11bad0://】;【QQ05FE6368://】;【tencent100557672://】;【pocketapp89757://】;

扇贝新闻:【shanbaynews://】;

扇贝单词:【shanbay://】;

扇贝单词hd:【shanbaywordshd://】;

微盘:【sinaweibosso.2938478327://】;【sinavdisksso.2938478327://】;

新浪公开课:【wxa376b1970423b610://】;

skype:【skype://】;

什么值得买hd:【wxed08b6c4003b1fd5://】;

搜狐视频hd:【sohu-SViPad://】;【sohuvideohd://】;【wx91d741cfa16379bc://】;

teamviewer:【teamviewer8://】;

格志:【griddiary://】;【sumi-interactive://】;【db-d7wn1aiwz2ck3tj://】;

淘宝hd:【taobao://】;【itaobao://】;【taobaohd://】;【wx25e5e60c1e9fcd97://】;【sinaweibosso.346252009://】;【zhuzhancaipiao4ipad://】;【laiwangc6e34c6bf://】;

天猫:【tmall://】;

腾讯视频hd:【tenvideohd://】;【tenvideo2://】;

qq通讯录:【tencentappqqpim://】;

qq:【mqqflyticket://】;

微信:【weixin://】;【fb290293790992170://】;【wechat://】;

同步推正版HD:【tbtui://】;【tuihd://】;

航旅纵横pro:【sinaweibosso.umetrip://】;【umetrippro://】;

mathpad:【myscriptmathpad://】;

下厨房:【wxd80665a1fc1bf282://】;

无忌论坛:【wb801384327://】;【wxe932dc78276c3c24://】;【wb1315970163://】;

雅虎天气!:【yweather://】;

一号店:【ipadstore://】;

优酷hd:【youkuhd://】;

知乎日报:【wx841a6aace4a1dca4://】;

知乎:【zhihu://】;

dieselfacts:【dk.publishonline.dieselfacts.china://】;【dps.9aebe5a79fb04d9abddf77d97c6794dc://】;

欧陆词典pro:【eudic://】;

拓词:【towordsp://】;

瘦身旅程:【sina.5253876156240b2daf015c9d://】;

词ci:【wx599b00cd734bd4a9://】;

 newsapp:// 新闻首页

 newsapp://vote 每日一投

网易公开课: ntesopen://

网易应用: apper://

网易彩票: ntescaipiao://

网易微博: microblogging://

有道词典: yddictProapp:// 

一淘火眼比价:QQ05FDCA9D://

支付宝信用卡还款页面:alipays://platformapi/startapp?appId=09999999

Evernote[evernote://]

SimpleMind+[simplemind://]

MindMeister [mindmeist://]

Daybox[daybox://]

QQ同步助手[qqpim://]

福晰PDF[ boxsdk-srnspz7etrtko4y9u2tqcj8i8gzzqzm6://]

izip[db-2vxl8w8i8zibqzc://]

wps office[kingsoftofficeapp://]

CAD快速看图:没找到

有道[yddict://]

随手记[fdmoney://]

全国违章查询[mianfeijiaotongweizhang://](木仓科技出品的)

Black Tower![blacktower1://]

Stick Hero英雄难过棍子关[com.ketchapp.stickhero:/    

如果以上url还不能满足你的诉求,可以到下面的这些博客里查找。

(1)常用 url:

https://blog.csdn.net/qq_39714355/article/details/95320267

(2)支付宝内部功能调用APP的said说明:

https://blog.csdn.net/ytd7777/article/details/85240926

(3)微信常用url_scheme参数:

https://www.jianshu.com/p/8ea8d22e3d12

最后今天圣诞节,大家圣诞快乐呀!88,下周见!

~~~下课铃~~~

点击下方诗句,可以留言互动喔  

林深时见鹿,海蓝时见鲸,梦醒时见你

【关注“鹏哥贼优秀”公众号,回复“python学习材料”,将会有python基础学习、机器学习、数据挖掘、高级编程教程等100G视频资料,及100+份python相关电子书免费赠送!】

扫描二维码

    与鹏哥一起

学python吧!

猜你喜欢

转载自blog.csdn.net/yuzipeng/article/details/103774639