DeepLink(深度链接)

简介

深度链接是指当用户打开移动应用时向其提供个性化的内容,或将用户带到应用内特定位置的操作。通过这种操作,您可以为用户提供优质的用户体验,从而极大加强用户与应用的互动。
简言之可以通过web调起APP的行为(我是这么理解的)。

方法

  • URI Scheme
    描述:直接打开应用并重定向至URL 参数中指定的af_dp行为路径
    Android 所有版本(可以选择不包括 Android 6 及更高版本)
    iOS 8 及更低版本
    iOS 9 及更高版本(当使用的浏览器或移动应用不支持通用链接Universal Links时)
  • Universal Links(通用链接)
    描述:直接打开移动应用的特定页面。
    需要移动开发者建立一个逻辑,根据 OneLink URL 参数进行重定向或者提供定制内容,例如 af_dp 或 af_sub1。
    iOS 9 及更高版本
    App Links Android 6 及更高版本

URI Scheme

Apple 和 Google 对于应用Scheme都不强制实施唯一命名。 可以选择一个独特的Scheme名称,以避免不同应用之间的Scheme发生冲突。
为了使 OneLink 能够同时适用于 iOS 和 Android,必须为两个平台定义相同的Scheme。 请参阅 iOS 和 Android 的相关说明。

  • 安卓设置URI Scheme
    在应用的 Manifest 文件中,给相关的行为添加以下意图过滤器 (Intent-filter):




安卓测试:
新建一个HTML网页,在body之间添加如下标签,xrlmall 为自定义的URI,后面的可以随意写。也可以传递参数。

  • IOS设置URI Scheme
    1. 在 Xcode 中,打开应用信息 plist 文件。
    2. 添加 URL 类型条目
    3. 展开 URL 类型和“item 0”行,添加一个新行。
    4. 为应用添加一个唯一的标识符作为 URL 标识符。 最好选择一个不太可能被其他应用使用的独特标识符。
    5. 右键点击 URL 标识符,选择“添加行”,然后选择 URI Scheme并将 Item 0 的值设置为您特有的Scheme。

IOS测试
在您的设备上安装并运行应用。(或在iOS中使用iPhone 模拟器)
打开默认浏览器(iOS上的Safari),在地址栏中输入URL Scheme(例如,”xrlmall://”)。
移动应用按默认行为启动。

Cleartext HTTP traffic to … not permitted

Android下APP出现java.io.IOException: Cleartext HTTP traffic to dict.youdao.com not permitted,原因是Android高版本后限制了HTTP访问权限,如何解决?
==>1. 改用https访问;
==>2. targetSdkVersion降到27以下;
==>3. 更改网络安全配置。
前两种方法没什么好说的,看看方法三怎么处理吧!

1.在res下创建一个xml文件夹,然后创建一个network_security_config.xml文件,文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
2.在AndroidManifest.xml 的application  标签下增加如下属性:
<application ... android:networkSecurityConfig="@xml/network_security_config" ... />


switch python version

一、Python的安装

https://www.python.org/ftp/python/3.6.3/python-3.6.3-macosx10.6.pkg
https://www.python.org/ftp/python/2.7.14/python-2.7.14-macosx10.6.pkg
下载好这两款软件之后,按照提示安装

二、检查环境变量 (可不用设置)

新开一个terminal窗口,输入如下命令:
$ vi ~/.bash_profile
检查用户变量中是否存在如下设置:

Setting PATH for Python 2.7

The original version is saved in .bash_profile.pysave

PATH=”/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}”

Setting PATH for Python 3.7

The original version is saved in .bash_profile.pysave

PATH=”/Library/Frameworks/Python.framework/Versions/3.7/bin:${PATH}”

export PATH # 最终导出 PATH
保存:$ wq

三、编辑.bashrc文件

$ vi ~/.bashrc
或者 $ sudo vi ~/.bashrc
添加如下信息:
alias python2=’/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7′
alias python3=’/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6′
alias python=python2

保存:$ wq

四、让环境变量生效

$ source ~/.bash_profile (可不用设置)
$ source ~/.bashrc

五、检测当前python版本

$ python -V
输出如下:
Python 2.7.14

六、切换python版本

修改.bashrc文件中的刚添加的最后一行
将alias python=python2改为alias python=python3
保存:$ wq
再次让文件生效,执行:$ source ~/.bashrc
检测版本:$ python -V
输出信息:
Python 3.7.3

重要备注!!!

关于bash_profile的第二步可以不要!要注意第三步的路径就可以!
备注上述的python路径要填写自己Mac上的安装位置,如果不确定可以用命令 $which python 和 $which python3 得到自己电脑上的路径替换再上面,就好,位置也可能是 /usr/bin/python 或 /usr/local/bin/python3 本文如果在您电脑上不生效,根据自己电脑环境上来,此处只做演示说明
关于which命令和设置后不匹配的解释

执行 $ which python
输出信息:
/Library/Frameworks/Python.framework/Versions/2.7/bin/python

Install MongoDB-(4.0.9) for CentOS

下载地址:https://www.mongodb.com/download-center#community
参考文章:https://www.cnblogs.com/pfnie/articles/6759105.html

mongo -port 27017 -u “” -p “”

mongo

–logpath表示指定日志路径;–fork表示后台启动
mongod –logpath=/data/db/log/mongod.log –logappend –fork

环境变量:
将mongodb的二进制文件目录添加到PATH环境变量
打开文件 /etc/profile, 在文件尾加上下面一行
export PATH=$PATH:/usr/local/mongodb/bin
然后运行 source /etc/profile 以使环境变量立即生效


Cocos2dx ActionTimeline(如何播放cocosStudio编辑的动画 )

本文环境:cocos studio Version:3.10,cocos version:3.14.1


用cocos Studio编辑一个简单的动画,导出为csb文件(或者json)
这个csb文件里现在有两个动画,一个 jumpAmi(0-40) 另一个idleAmi(41-61)
如何用代码控制播放呢?下面直接上代码。

–传入Studio2.x的资源路径
local rootNode = cc.CSLoader:createNode(“ui/lobby_ui/inbox_btn_ui.csb”)
local action = cc.CSLoader:createTimeline(“ui/lobby_ui/inbox_btn_ui.csb”)

–注!!!:同一个文件创建的节点只能使用同一个文件创建的动画。
rootNode:runAction(action)
self:addChild(rootNode) –假定self为当前显示的scene

–第一个参数为起始帧,第二个参数为结束帧,第三个参数为是否循环播放
action:gotoFrameAndPlay(0,40,true)

还有其他播放方法,例如:action:play(“idleAmi”,true) 具体的去看API
帧事件监听可以调setFrameEventCallFunc()

action:setFrameEventCallFunc(function ( frame )
print(“event name:”,frame:getEvent())
end)


心得:刚开始做游戏的时候不习惯用编辑器,不管页面还是逻辑都用代码敲,觉得编辑器资源导来导去的很麻烦,但是做到后面发现编辑器可以省很多事,尤其是动画,要换做手写的话调试起来很麻烦,而且有一堆参数(数字)在哪里,看着就不顺眼。

IOS提审报 Guideline 4.3 – Design

We noticed that your app provides the same feature set as other apps submitted to the App Store; it simply varies in content or language, which is considered a form of spam.

The next submission of this app may require a longer review time, and this app will not be eligible for an expedited review until this issue is resolved.

最近提了三个包两个因为4.3被拒了,一个因为4.1被拒了,今天我说一下4.3的:
第一个包:之前提交了一次被拒了,然后我移除app换了个bundle ID重新提交,这时候就报4.3,原文只这样描述的:
We noticed that your app provides the same feature set as other apps submitted to the App Store; it simply varies in content or language, which is considered a form of spam.
到现在我也没解决,因为是个人项目就没理它了。

第二个包:是公司的项目,用的引擎是cocos2dx,我没去公司之前他们提交了好多次都被拒了,具体原因不太清楚,也有报4.3,我来之后我们就把所有代码都重写了,去掉了很多第三方库,然后换了开发者账号,换了全新的电脑,包括上传时用的WI-FI都换了,在重新提交。提交过后四五天没还是在审核中,没有任何反馈,于是我们就申请加急审核,大概又过了两三天,被拒了,原因就是4.3 。我们都很沮丧,准备把服务器客户端统统换协议换资源,重写代码再来一遍,服务器都开始着手做了,同时我这边也向提了申诉。两天后的一个早晨惊喜出现了,审核通过,状态变为:等待开发者发布。我们公司全体人员那个叫兴奋啊。。。。

申诉的内容是:

尊敬的审核官,你好!
我们的app提交已经5天了,至今还是等待审核状态;
1,本app为全新开发,采用cocos2dx-lua开源引擎,c++引擎代码占整体二进制代码量的50%以上,不知道是否会引起机审不过的状态,认为重复率很高;
2,本app通信模块采用Smartfox开源引擎c++代码占整体二进制代码量的9.9%以上,这可能是最糟糕的一部分,因为在2年前我们有使用smartfox通信模块的app上架app store!也会造成重复率很高,导致机审不过;
3,游戏内也包含boost开源库,c++代码占整体二进制代码量的40%以上,也会造成重复率很高,导致机审不过;
4,游戏主体部分都是采用lua脚本语言开发,全部重新编写;团队重新编写的c++代码量不足1%;
所以整个开发团队感觉很沮丧,我们完全重新编写的app迟迟得不到审核通过,团队面临解散的风险,望审核官体谅;
无论cocos2dx,smartfox,boost 三者都是开源的c++技术框架(占整体二进制代码量的99.9%以上),请审核官能给我们及时的反馈,团队也好决定下一步方向,谢谢!

说一些4.3出现的原因吧!
就是苹果认为你提交的APP和其他APP很相似,他们把它当作垃圾App来处理。在严重一点好像就变成4.1了哈哈哈

Cocos2dX-lua Commonly used functions

一些常用的函数,写出来主要是方便拷贝哈哈哈哈哈哈哈……

setPosition //设置坐标 setPosition(cc.p(x,y))
setAnchorPoint //设置锚点 setAnchorPoint(cc.p(0,0))
setContentSize //设置大小 setContentSize(cc.size(width, height))
setLocalZOrder //设置层级 setLocalZOrder(0)
setScale //设置缩放 (0-1)setScale(0.5)
setRotationSkewY //翻转 setRotationSkewY(180)
setFlippedX //镜像反转 setFlippedX(true)
setRotation //旋转 setRotation(90)
removeFromParent //从父物体上移除 removeFromParent()
removeAllChildren //移除所有子物体 removeAllChildren()
setOpacity //设置透明度(0-255)setOpacity(150)
setColor //设置颜色 setColor(cc.c3b(128, 128, 128)) 支持c4b
setTouchEnabled //是否可点 setTouchEnabled(true)
setVisible //是否可见 setVisible(true) 我习惯用show和hide
stopAllActions //停止所有Action stopAllActions()
getChildByTag //根据tag找控件 getChildByTag(99)
getChildByName //根据名字找控件 getChildByName(“login_btn”)

有set方法一般都会有get方法,所以不写两次

string.upper(argument) –字符串全部转为大写字母
string.lower(argument) –字符串全部转为小写字母
string.format(…) –格式化字符串(拼接)
string.len(arg) –计算字符串长度

local chips3 = math.max(unpack(rewards)) –求数组rewards中的最大值

performWithDelay(self,function ( … ) –延时调用

end,1.2)