精华内容
下载资源
问答
  • iOS 开发之实现 App 消息推送(最新)

    万次阅读 多人点赞 2014-11-19 21:13:10
    今天就由本菜鸟给大家做一个简单的IOSApp消息推送教程吧!...(ps:网上看了一下虽然有很多讲述推送的好教程,我也是看着一步步学会的,但是这些教程的时间是去年或者更早时期的,对引导新手来说不是很合适)

    好久没有写过博客啦,今天就由本菜鸟给大家做一个简单的IOSApp消息推送教程吧!一切从0开始,包括XCode6, IOS8, 以及苹果开发者中心最新如何注册应用,申请证书以及下载配置概要文件,相信很多刚开始接触ios的人会很想了解一下。(ps:网上看了一下虽然有很多讲述推送的好教程,我也是看着一步步学会的,但是这些教程的时间都是去年或者更早时期的,对引导新手来说不是很合适)

    第一部分

    首先第一步当然是介绍一下苹果的推送机制(APNS)咯(ps:其实每一篇教程都有),先来看一张苹果官方对其推送做出解释的概要图。

    Provider是给你手机应用发出推送消息的服务器,而APNS(Apple Push Notification Service)则是苹果消息推送服务器。你本地的服务器当需要给应用推送一条消息的时候,先要将消息发出到苹果推送服务器,然后再由苹果推送服务器将消息发到安装了该应用的手机。

    接下来再看一张解释图:

     

    根据上图的逻辑我来给大家解释一下:

    1.你的IOS应用需要去注册APNS消息推送功能。

    2.当苹果APNS推送服收到来自你应用的注册消息就会返回一串device token给你(很重要)

    3.将应用收到的device Token传给你本地的Push服务器。

    4.当你需要为应用推送消息的时候,你本地的推送服务器会将消息,以及Device Token打包发送到苹果的APNS服

    5.APNS再将消息推送给目的iphone

     

    第二部分

    1.从证书颁发机构颁发证书

    打开你mac的钥匙串访问: 然后点击钥匙串访问

     

    随后它会弹出一个窗口用户电子邮件信息就填写你苹果开发者账号的名称即可(应该是一个邮件名称),点击保存到磁盘的选

    项,点击继续,显示如下:

     

    点击存储,文件名为:CertificateSigningRequest.certSigningRequest 随后将他放在一个文件夹中我们取名push吧!

     

    第三部分

    访问苹果开发者网址:https://developer.apple.com/

     

    选中MemberCenter选项,进入登陆页面,用你的苹果开发者账号登陆,过一会网页就会自动跳转到下图。

    点击红色所选部分内容进行下一步的操作。

    选择Certificates选项,设置证书,如图所示先解释一下:

     

     

    Development选项的作用顾名思义就是用来作为开发使用的证书,Production选项则是用来发布产品使用的,名称很陌生是不是,之

    前的开发者网页是没有这一选项的,可能是苹果把他修改了,用这个名称更加能让人理解吧(字面上解释就是产品么)。两个选项生

    成证书的步骤是一样的,现在我们使用开发者的选项进行证书的制作,步骤如下:选择Development选项:

     

    点击上面的加号选项,

     

    选择APNS选项(开发么当然是在沙盒环境下了,模拟真实情况),然后Continue

     

    这个AppID我们在下一部分讲如何生成,现在我用的是已经生成好的一个应用ID,继续Continue

     

    这边就要选择在钥匙串访问环节下载下来的CertificateSigningRequest.certSigningRequest文件了,选择并生成:

    点击下载,得到aps_development .cer,保存到push文件中去。

     

    第四部分

    新建一个AppID,选择网页上的AppIDs,然后点击右上角的 “加号”

     

    App的取名只要按照苹果要求的就可以了

     

    然后BundleID是比较重要的,在提交审核以及测试(苹果的TestFlight)和付费环节都需要用到,也只需按照苹果要求来写就好了。

     

    接下来就是对你的应用需要使用苹果的哪些服务进行选择就行了,例如广告,游戏中心,推送,付费等等情况。

    最后选择“Submit”选项,在下一个界面中选择“done”选项,这样我们设置AppID的步骤我们就完成了。


    第五部分:生成Provisioning Profiles

    这个配置概要文件分为两种,一种是为开发使用的,还有一种则是为发布到appStore上面。

    创建发布版的ProvisioningProfile与开发版的流程相同,点击Development然后点击右上角的加号

     

    会进入选择何种配置概要文件的界面:

     

    我们现在时测试,所以选择“IOS App Development”的选项,在下面的Distribution发布选项中有两个选择,“App Store”以及

    “Ad hoc”,你可以根据下面的描述选择你发布所需的选项。点击Continue进入下一步。

    选择你上一步创建的AppID,点击Continue 进行下一步

    选择你的开发者账号,Continue进行下一步

    在这一步上选择你的设备(你只有在这一步上勾选了你的设备,你才能在设备上用这个签名进行调试)。关于如何将你的设备号添加

    进去也是非常简单的,选择左侧的"Devices",然后点击右上角的加号,在随后出来的页面上添加你设备的UUID(在XCode中可以查

    看到)以及name( 可以随便取,自己看的懂就行)然后Register一下,照着流程走到最后一步就完成了。

    好咱们继续回到上面的Provisioning Profile配置环节,当你选好了你的设备后点击“Continue”进入下一页,

     

    输入一个文件名(最好是起的能看懂是干嘛的,当然也可以随便起),点击“Generate”进入下一个页面,在这个页面中就会有一个下

    载按钮让你下载这个文件,我们把它下载下来放在Push文件夹中。

     

    第六部分

    好了,前期的准备工作都已经做完了,现在让我们开始推送吧!(吼吼)

    首先双击我们生成的 “aps_development .cer” 文件,进入钥匙串访问,找到我们的专用秘钥(根据在第二部分中从证书机构颁发证书操作中填写的常用名)

     

    我在第二部分填写的是“silicon”,由于换了一台mac之前安装的没有了,之前没有截图,所以随便找了个图给大家看一下,凭大家的聪明才智应该不难理解吧。

    然后右击导出,会弹出如下所示的图。

     

    将他存储到push文件夹中,命名为“push.p12”,在这一步中导出会让你输入密码并验证,你可以自定义一个密码,例如abc123

    现在push文件夹中应该有几个文件“aps_development .cer” ,"push.p12",“CertificateSigningRequest.certSigningRequest”以及

    刚才下下来的配置概要文件。

     

    接下来我们打开终端将他们生成.pem文件

    1.把aps_development .cer文件生成.pcm文件,cd到push文件夹下

     

    2.把push.p12文件生成为.pem文件

    上边输入的密码则是你导出证书所设的密码,即abc123.接着还会让你输入.pem文件的密码,还是使用abc123好了,防止混淆。

    这样我们在push文件夹中就又得到了两个文件,PushChatCert.pem和PushChatKey.pem。

     

    3.把PushChatCert.pem和PushChatKey.pem合并为一个pem文件,

     

    在push文件夹中又多了一个ck.pem文件,以上我们把需要使用的文件都准备好了

     

    接下来就要测试一下啦,是不是很激动~

    为了测试证书工作的状况,我们可以使用“telnet gateway.sandbox.push.apple.com 2195”来检测一下,如果显示下图则表示成功了。

     

    然后,我们使用我们生成的证书和私钥来设置一个安全的链接去链接苹果服务器

    在终端输入如下命令:openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem

    需要输入密码(abc123 我们刚才所设置的)。

    然后他会返回一系列的数据,这里我就粘贴一部分啦:

     

    CONNECTED(00000003)

    depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C

    verify error:num=20:unable to get local issuer certificate

    verify return:0

    ---

    Certificate chain

    。。。。。(省略)

    。。。。。(省略)

    。。。。。(省略)

     

        Start Time: 1416389389

        Timeout   : 300 (sec)

        Verify return code: 0 (ok)

    ---

    测试就到这里啦。。。

     

    第七部分

    1.建立推送项目

     

    //
    //  AppDelegate.m
    //  TestPushNotifiy
    //
    //  Created by silicon on 14-10-30.
    //  Copyright (c) 2014年 silicon. All rights reserved.
    //
    
    #import "AppDelegate.h"
    
    @implementation AppDelegate
    @synthesize mainView = _mainView;
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)])
        {
            //IOS8
            //创建UIUserNotificationSettings,并设置消息的显示类类型
            UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIRemoteNotificationTypeSound) categories:nil];
            
            [application registerUserNotificationSettings:notiSettings];
            
        } else{ // ios7
            [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge										 |UIRemoteNotificationTypeSound										 |UIRemoteNotificationTypeAlert)];
        }
        
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];
        
        self.mainView = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
        self.window.rootViewController = self.mainView;
        return YES;
    }
    
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken{
        NSLog(@"---Token--%@", pToken);
    }
    
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
        
        NSLog(@"userInfo == %@",userInfo);
        NSString *message = [[userInfo objectForKey:@"aps"]objectForKey:@"alert"];
        
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:message delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
        
        [alert show];
    }
    
    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
    
        NSLog(@"Regist fail%@",error);
    }
    
    - (void)applicationWillResignActive:(UIApplication *)application
    {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
    }
    
    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }
    
    - (void)applicationWillEnterForeground:(UIApplication *)application
    {
        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
    }
    
    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }
    
    - (void)applicationWillTerminate:(UIApplication *)application
    {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }
    
    @end
    

     

    在appdelegate.m中加入以上代码,

     

     

     

    if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)])
        {
            //IOS8
            //创建UIUserNotificationSettings,并设置消息的显示类类型
            UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIRemoteNotificationTypeSound) categories:nil];
            
            [application registerUserNotificationSettings:notiSettings];
            
        } else{ // ios7
            [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge										 |UIRemoteNotificationTypeSound										 |UIRemoteNotificationTypeAlert)];
        }

    由于ios8的推送跟ios7及以下的不一样,所以需要加判断来注册消息推送。

    函数:

     

    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken{
        NSLog(@"---Token--%@", pToken);
    }

     

    会接收来自苹果服务器给你返回的deviceToken,然后你需要将它添加到你本地的推送服务器上。(很重要,决定你的设备能不能接收到推送消息)。

     

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
        
        NSLog(@"userInfo == %@",userInfo);
        NSString *message = [[userInfo objectForKey:@"aps"]objectForKey:@"alert"];
        
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:message delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
        
        [alert show];
    }

     

    这个函数则是当设备接收到来自苹果推送服务器的消息时触发的,用来显示推送消息。

     

     

    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
    
        NSLog(@"Regist fail%@",error);
    }

    当注册失败时,触发此函数。

     

     

    2.PHP服务端

    将simplepush.php这个推送脚本也放在push文件夹中

     

    <?php
    
    // ??????????deviceToken???????????????
    $deviceToken = 'c95f661371b085e2517b4c12cc76293522775e5fd9bb1dea17dd80fe85583b41';
    
    // Put your private key's passphrase here:
    $passphrase = 'abc123';
    
    // Put your alert message here:
    $message = 'My first push test!';
    
    
    
    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
    
    // Open a connection to the APNS server
    //??????????
     //$fp = stream_socket_client(?ssl://gateway.push.apple.com:2195?, $err, $errstr, 60, //STREAM_CLIENT_CONNECT, $ctx);
    //?????????????appstore??????
    $fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err,
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
    
    if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);
    
    echo 'Connected to APNS' . PHP_EOL;
    
    // Create the payload body
    $body['aps'] = array(
    'alert' => $message,
    'sound' => 'default'
    );
    
    // Encode the payload as JSON
    $payload = json_encode($body);
    
    // Build the binary notification
    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
    
    // Send it to the server
    $result = fwrite($fp, $msg, strlen($msg));
    
    if (!$result)
    echo 'Message not delivered' . PHP_EOL;
    else
    echo 'Message successfully delivered' . PHP_EOL;
    
    // Close the connection to the server
    fclose($fp);
    ?>

    deviceToken填写你接收到的token,passPhrase则填写你的ck.pem设置的密码。

    此刻就是见证奇迹的时候了,使用终端进入到push文件夹,在终端输入 php simplepush.php

     

    若显示以上提示则表示推送成功了。附上一张成功图。

     

    推送就到这边吧!

    感谢这篇博客的指导:http://blog.csdn.net/showhilllee/article/details/8631734

     

    simplepush.php以及XCode工程我会上传到我的资源里去,大家可以去那边下载。有什么不明白的地方大家可以留言或者私信我,我会第一之间回复的~

     

     

    大家可以关注我的微信公众号与我互动,相关问题也可以直接用公众号联系我:

     

     

     

     

     

     

     

     

     

     

    展开全文
  • Windows系统下上架iOSAPP

    千次阅读 2018-04-13 09:37:49
    2018最新整理iOS app上架app详细教程上架iOS需要一个付费688的开发者账号,还没有的话申请一个...仔细看这个流程,少走很多弯路,不用一步步去试错,节省时间。1、创建APP身份证(App IDs)2、申请iOS发布证书3、申...



    2018最新整理iOS app上架app详细教程


    上架iOS需要一个付费688的开发者账号,还没有的话申请一个或者借用。

    申请苹果开发者账号教程

    上架App Store之前是先安装到苹果手机测试调试好,app能正常运行再上架

    iOS真机调试测试教程


    上架过程分七个步骤,按步骤一步步来。


    仔细看这个流程,少走很多弯路,不用一步步去试错,节省时间。


    1、创建APP身份证(App IDs)

    2、申请iOS发布证书

    3、申请iOS发布描述文件

    4、上传ios证书编译打包IPA

    5、在iTunes Connect创建App

    6、Windows下上传IPA到App Store

    7、上传好IPA回到iTunes Connect填写APP信息并提交审核


    一、创建唯一标示符BundleID   (App IDs)


    APP IDs在后面创建发布文件,创建APP时都要用到。(appid非常重要,整个上架流程就是用appid关联在一起)

    如果之前iOS真机调试时创建过了,就不用重新创建了,还是用那个appid。

    首先打开开发者中心https://developer.apple.com/account,进入证书页面。


    1.1点击证书、ID及配件文件,进入设置。


    很多伙伴登录开发者中心没有这个界面出来,那是因为没有付费成为开发者。


    可以看 免开发者账号申请ios证书真机调试的教程



    1.2选择App IDs –>点击+创建一个新的App ID



    其中有两项需要你自己填:


    第一项Name,用来描述你的App ID,这个随便填,没有什么限制,最好是项目名称,这样方便自己辨识(不允许中文)


    第二项Bundle ID (App ID Suffix),这是你App ID的后缀,需要仔细填写。用来标示我们的 app,使它有一个固定的身份,和你的程序直接相关。填写  Explicit App ID 的格式为:com.company.appName(要有两个点.)照着格式写,写个方便记的.


    像这串com.yesgame.tianbiao就是appid了,后面申请ios证书、打包ipa和在itunesconnect创建APP就是用这个格式的appid。


    整个app上架流程就是靠这个appid关联在一起。


    第三项配置服务权限,默认会选择2项,不能修改,其它常用的苹果支付,APP推送通知,根据自己需要的服务选择上,然后点击Continue确认,下一步。


    选择苹果支付和推送通知,还需要创建对应的iOS苹果支付证书和iOS推送证书。

    一般没什么要求默认就好。




    检查下没有错的话直接点击Register后点击Done完成App ID的创建。


    二、申请发布证书


    iOS各类证书申请教程、各种证书用法不同。


    iOS开发证书申请(xcode开发手机测试)

    iOS发布证书申请(发布上架App Store)

    iOS推送证书申请(APP推送通知)

    iOS真机调试证书申请(安装到非越狱手机测试)

    iOS企业证书申请(免上架App Store安装手机使用)


    这里是上架App Store所以申请iOS发布证书


    2.1打开Appuploader,输入苹果开发者中心账号,登录。


    如果还没安装Appuploader先安装好


    Appuploader安装教程


    打开Appuploader,用苹果开发者账号登录。



    2.2、选择证书选项



    2.3、点击右下角+ADD选择,下拉选择发布证书,输入证书名称(不要中文、随意设置),邮箱(随意),密码(证书的密码、比如设置123这样,不用很复杂,记好、打包时要用、很重要)、点击ok创建。


    注意:iOS发布证书最多能申请3个,如果账号已经有3个发布证书了,将申请报错。



    一个发布证书可以用于多个APP上架,不是说只能申请3个发布证书就只能上架3个app,完全不用每个app都申请个发布证书p12,区分开下面步骤申请的的描述文件就行了。

    也可以删掉之前的发布证书,重新创建,不会影响已上架的app。


    2.4、创建成功后,找到刚创建的发布证书,点击p12 文件,下载保存.p12证书文件到电脑。



    三、创建iOS发布描述文件


    3.1、返回Appuploader首页,选择描述文件。



    3.2、点击+ ADD,选择发布版描述文件,选择应用id(第一步骤申请的那个appid),勾选上个步骤申请的发布证书p12(如果申请了多个发布证书,这里会显示多个,直接选中全部就行了)

    输入名称,点击ok创建。



    3.3、选择刚创建的发布版描述文件,点击Download下载,保存到电脑


    现在发布证书,发布描述文件都有了,就可以去打包ipa了。


    四、上传证书编译打包


    各平台打包教程、根据自己使用的开发平台去打包,使用的证书都是一样的。


    xcode打包教程

    HBuilder打包教程

    APICloud打包教程

    phonegap打包教程

    AppCan打包iOS

    变色龙打包ipa教程


    这里以HBuilder平台为例


    4.1、打开HBuilder工具,选择完工的项目,点击发行,选择发行为原生安装包。



    4.2、选择iOS打包,支持的设备类型,选择使用苹果证书,填写AppID(第一步申请的com.yesgame.tianbiao这个格式的appid),

    上传之前创建的iOS发布证书.p12及配置文件.mobileprovision并输入创建证书时设置的密码,点击打包。



    4.3、打包成功后,下载保存ipa,这个ipa包就能进行测试或上传App Store了。



    五、在iTunes Connect创建App


    5.1回到软件,点击ItunerConnect,进入iTunes Connect进入创建APP。



    5.2选择我的APP点击左上角+号选择新建APP,输入你的应用名称,语言,套装ID,之前在开发者中心创建的对应APP IDs

    sku不能写中文,自己用拼音随便编一个,直接用appid也行,点击创建。

    (与刚才创建iOS发布描述文件时所选的appid要一致,这样用iOS证书打包的IPA,上传就能对应识别到)





    创建了APP然后就可以回到Appuploader上传ipa


    六、Windows环境下上传IPA到App Store


    6.1返回Appuploader程序,点击提交



    6.2选择刚生成的iap包



    6.3Appuploader将自动上传你的IPA,此时可以进行下一个步骤,ipa文件等它继续上传,包如果很大需要上传一段时间,当出现以下提示时(packages were  uploaded successfully 进度条蓝色),说明上传成功。

    如果进度条红色说明失败,复制最下面的错误提示,翻译下查看具体问题。



    七、回到iTunes Connect提交审核


    7.1上传了IPA,回到iTunes Connect,进入这个APP填写信息的页面,点击活动,这里会显示上传成功的构建版本,刚上传会显示正在处理。


    根据包的大小处理时间不一,10多M的几分钟,可以先去设置app的其他信息,看下面的步骤。


    特别注意:很多伙伴用Appuploader上传ipa成功了,但上去iTunes Connects在活动那里查看还没出现构建版本,或者构建版本消失了。

    出现这种情况,一般是证书没用对,或者ipa包有问题,苹果会发送具体原因到邮箱(开发者账号就是邮箱地址),登录邮箱查看,修改错误重新打包上传。


     


    如果这包不行需要重新修改打包上传,打包的时候一定要增加下版本号,要不上传不了,报错。
     
    之前上传的ipa是不能删除的,你只需要打包构建ipa的时候增加下版本号,就能上传了。
     
    比如你之前上传的是1.0版本,你打包可以改成1.1或者2.0都行,
     
    不需要对应修改网页那 1.0准备提交那的版本选项,打包的版本跟这里不相干的。


    到时上架成功了,App Store商店显示版本号还是会1.0




    接下来设置APP的各项信息。


    7.2先选择第一项APP信息、选择APP的类别、次要类别可以不填、选择好点击储存。



    7.3、选择左边的第二项、免费APP就设置为免费、销售范围如果只是中国就选中国、设置好储存。



    7.4、选择左边第三项、准备提交、这个页面需要设置几项信息、一步一步来。

    先设置app截图、打开上架前测试安装的app,截图你想展示的app页面,一定要用苹果手机截图,不能用安卓或者浏览器截图,5.8寸是iPhoneX截图的不是必须设置的,没有可以不设置,5.5寸的图片大小为1242*2208、用5.5寸的苹果手机截图的就是这个尺寸了,如果小屏苹果手机截图的用ps调整为1242*2208就行了。

    最少上传1张最多5张截图。如果你的app支持ipad也要上传ipad的截图,尺寸为2048 x 2732。




    7.5、往下拉、设置app的宣传语、描述、关键词(搜索你app的关键词、可以设置多个,多个关键词用英文状态下的逗号隔开,)

    技术支持网址可以设置为公司网站个人网站。

    没网站直接设置我们的官网也行 http://www.applicationloader.net



    7.6、选择构建版本、上传了ipa构建版本,活动那里处理完了,旁边会出现+号、点击+号选择你的构建版本

    如果之前选择过版本了,要选新上传的包、移动鼠标到app那里,点击红色删除键,重新点击+号选择版本。



    7.7、设置app图标、1024*1024规格的jpg或png格式图片,版权按照格式设置

    每个网站下面都有版权信息‘可以参考格式写。© Appuploader 这样

    然后点击分级的编辑进入下一步设置



    7.8、分级选项根据自己的app情况选择。



    7.9、如果app有登录的提供个账号给苹果审核测试。填写联系信息电话格式+86后面再写手机号。



    7.10、各项信息如此就设置好了,存储好、点击提交以供审核、进去下一步。



    7.11、这里出现的信息根据app的类型不同、有不同的选项、根据自己的app的情况选择

    一般选择否。

    然后提交、显示为正在等待审核、耐心的等苹果公司那边审核了,初次提交1到2天出结果。



    7.12提交审核回到我的APP查看会提示正在等待审核,审核有时很快一两天,或要几天时间,常登陆看看审核情况,或看邮件提示。

    如果变成可供销售,恭喜你~上架成功了,如果显示被拒绝,点击查看问题,根据反馈修改再重新打包上传提交审核。


    如果被拒,看下面教程重新提交审核


    iOS APP上架被拒重新提交审核教程


    展开全文
  • 导 语为了让iOS 14的用户娱乐体验有更加舒适、便捷,爱奇艺APP全面适配iOS 14,不仅是首批支持iOS 14一屏任务画中画功能的平台,同时支持Widget小组件实现桌面个性化...

    导  语

    为了让iOS 14的用户娱乐体验有更加舒适、便捷,爱奇艺APP全面适配iOS 14,不仅是首批支持iOS 14一屏多任务画中画功能的平台,同时支持Widget小组件实现桌面个性化推荐一键点击即刻播放,并且在保护用户隐私方面也做了很多努力,以此减少用户隐私泄露的风险。

    近日,苹果iOS 14正式版的发布,用户关注度比较高的话题就是那些巧妙的全新体验,比如重新设计的小组件和 APP 资源库等,让大家这两天玩的不亦乐乎。为了让用户在通过iOS 14时观影体验更加舒适、便捷,爱奇艺APP也全面适配了iOS 14。

    在iOS 14更新后支持Widget小组件,即爱奇艺APP适配后,无需打开APP,在手机桌面就能看到自己感兴趣的内容更新与上线情况,一键点击即可播放;对于近期暂时没有追剧的用户,Widget小组件也会根据用户的观影历史习惯自动生成一些内容,并推荐在桌面上供用户选择,这个功能降低了用户对信息获取、内容更新与播放的操作成本,在结合iOS 14更新特性后更加方便用户使用。

    为了让用户拥有更好的追剧体验,不错过剧集的更新,爱奇艺APP 新增了Siri预约功能,用户在爱奇艺APP上成功预约想看的电视剧或电影后,iOS系统就可以自动识别预约行为,并且在内容上线前会向用户发出即将上线的提醒,能够让用户第一时间获取预约内容的上线信息,不轻易错过想看的内容。

    同时,爱奇艺是首批支持iOS 14一屏多任务画中画功能的平台,用户在打开另一个APP时不需要暂停当前的播放,可以实现边看视频边与朋友聊天或处理其他事务的功能,观影体验更加完整,不会被轻易打断。

    在隐私保护方面,爱奇艺APP采用了模糊定位的方式,并且剪贴板默认关闭读取权限,用户可以自行选择是否开启。此外,通讯录、麦克风、照片仅在必要场景申请权限,最大程度保护用户的隐私安全,这些背后的努力可以看出爱奇艺对维护用户隐私的尊重和保护用户隐私方面的决心。

    在听觉的体验上,爱奇艺的部分内容已支持AirPods Pro空间音频,通过爱奇艺APP的适配,音质更加饱满,立体环绕感更强,为用户带来更加立体环绕的听觉享受,提升临场感。

    目前,已经更新iOS 14的用户可以体验全新的爱奇艺APP功能了,可以看到爱奇艺在为提升用户体验方面一直努力着。

    也许你还想看

    《中国新说唱2020》推出“蹦迪模式” 爱奇艺从视觉、听觉到体感升维视听体验

    Google版 “AirDrop” 姗姗来迟,万能联播缘何超越Nearby Sharing?

    扫一扫下方二维码,更多精彩内容陪伴你!

    展开全文
  • IOS由于系统机制问题不支持版本...随着软硬件的不断更新,一般网站也只提供最新版本的软件下载,但由于旧版 iOS 系统的限制,很多老设备用户有下载微信等常用应用旧版本的需求,哪里能下载旧版本应用呢?为了满足...

    如何给未越狱的ios下载历史版本的app?未越狱IOS系统安装历史版本软件的方法,iPhone未越狱的手机如何安装旧版本APP?

    IOS由于系统机制问题不支持版本回退 某些更新可能导致闪退 卡顿等未知bug

    https://jingyan.baidu.com/article/0eb457e5c9379203f1a905f2.html  未越狱IOS系统安装历史版本软件

    但上述操作比较麻烦,下载爱思助手可以自动下载安装旧版本app

     

    旧版本应用下载

     

    随着软硬件的不断更新,一般网站也只提供最新版本的软件下载,但由于旧版 iOS 系统的限制,很多老设备用户都有下载微信等常用应用旧版本的需求,哪里能下载旧版本应用呢?为了满足大家的需求,爱思助手在最新的 V7.98.15版本中新增了旧版本应用下载通道。

     

    设备通过数据线连接到电脑,在“应用游戏”中搜索您需要的应用,以“微信”为例,点击“微信图标”进入详情页,下拉滚动条即可看到旧版本应用。

     

     

    如何给未越狱的ios下载历史版本的app?未越狱IOS系统安装历史版本软件的方法,iPhone未越狱的手机如何安装旧版本APP?

    再试试爱彼迎airbnb

     

    展开全文
  • iOS多语言,支持app内部设置

    千次阅读 2014-10-28 10:13:58
    上周做了语言,发现网上方法接本是关于
  • IOS APP IDs

    万次阅读 多人点赞 2013-01-14 16:54:01
    说下 APP ID 的组成为 APP ID Prefix + APP ID suffix APP ID Prefix 为10个字符 你不用管它 APP ID Suffix 这个有点讲究 如果你的app不用push等功能 你可以把App ID Suffix 写成 1---- * 2---- ...
  • 最近公司的项目准备着手宣传工作了,宣传手册上要印制App的下载地址二维码,但是客户端应用还未上线,需要一种临时的方案解决应用分发下载问题,通常ios应用必须通过苹果应用商店才能下载安装,但是也可以看到一些...
  • 在户外做app地推的时候,app下载速度慢,费流量是一大难点. 通过iptables+squid的方案,将以往用在cdn上的技术用在app地推上,实现了手机app的离线下载. 节省了流量成本,也大幅度的提高了下载速度.
  • iOS 打开系统文件APP,从文件中读取

    千次阅读 2020-02-22 21:50:59
    公司是做文件工具类的 App,因此在 Apple 发布新的 iOS 11 后,我司加入了需求,需要允许 App 沙盒内的文件使用 Files 管理,现找到的资料不多,除了苹果的官方文档外,这篇是一个简单入门的博客来了解如何接入 ...
  • 高德地图iOS SDK V2.5.0版本提供后台持续定位的能力,即便你的app退到后台,且位置变动时,也不会被系统挂起,可持久记录位置信息。该功能适用于记轨迹录或者出行类App司机端。只需要您的做以下几步操作:1.添加...
  • windows打包ios app

    千次阅读 2019-05-27 10:33:54
    1.创建App IDs 2.申请发布证书 3.申请发布描述文件 4.打包APP 工具:苹果开发者账号、appuploader、Hbuilder 1.创建App IDs (1)进入https://developer.apple.com/account/ios/device/landing,选择APP IDs,...
  • 我的stackoverflowiOS 9 出的新特性,使用起来简单粗暴,对于很多想要展示URL,但是却想或者没必要自己定制webview(UIWebview或者WKWebview)的时候。代码 引入import SafariServices调用 let safari =
  • APP内嵌H5页面开发中,有遇到很多坑,大部分问题还是安卓和IOS 之间的兼容性问题,下面介绍一下遇到的一个很典型问题; 问题:H5页面在IOS系统APP中滚动时没有惯性 特征:长页面在划动时,手指离开屏幕页面就...
  • Appuploader是一个IOS开发助手,可以快速,轻松地生成ios开发证书,需要钥匙串助手; appuploader可以批量上传屏幕截图并将ipa文件上传到Apple商店,在windows,linux或mac上,需要应用程序加载器和mac计算机。
  • ios APP 制作流程

    千次阅读 2018-01-21 15:23:48
    下载补丁自查网上很多(要与VWmare版本匹配),下完之后放在VWmare虚拟机同目录下 在任务管理器里停止VWmare的所有进程,右键点win-install.cmd 以管理员身份运行,等待结束后重启虚拟机
  • 这个功能早就有,主要功能是在IOS9系统界面下拉会出现搜索功能界面,在这里可以搜索关键信息,来展示应用内的内容,并且点击信息打开应用跳转具体页面等操作。这个功能还是有用的,面对这越来越的应用霸占你...
  • iOS 保持app在后台被kill

    千次阅读 2019-04-29 16:02:50
    由于iOS在高版本之后很多保持后台的代码失效之后 在特殊情况下又要保持app长时间持有的问题,就可以用到后台音乐播放,但是这种容易被拒,所以最好是企业开发模式下使用 1、在xcode中开启后台模式 2、插入代码...
  • iOS App Extension 介绍

    万次阅读 2018-01-08 19:53:47
    App Extension (应用扩展)
  • iOSAPP跳转到系统的各种设置界面

    千次阅读 2016-05-26 14:19:16
     在很多APP中需要设置系统的内容的时候,APP内部会通过某种跳转的方式跳转到系统的setting的功能,但是iOS5.1以后就能正常调用了,下面写出转到系统setting的两种方式: 方式一: 跳到WiFi设置界面、定位服务...
  • 每个iOS程序有一个独立的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒。应用必须待在自己的沙盒里,其他应用能访问该沙盒。所有的非代码文件要保存在此,例如属性文件plist、...
  • App Store分发iOS应用

    千次阅读 2015-03-21 01:36:11
    Author:EricTang众所周知的原因因为苹果对iOS应用限制比较,而且严格,所以一般情况下用户下载软件是要从App Store上下载,或者说干脆像我之前那样儿,直接用公司的测试证书跑各种有源码的iO
  • iOS App 闪退监测

    千次阅读 2018-04-22 18:02:49
    为保障线上 App 的用户体验,我们一般都会对线上 App 的 crash 率做实时监控,一旦检测到 spike,可以即刻调查原因,但这一切的前提是 crash 日志能够准确上报。crash 日志上报有两个难点:crash handler 安装之前的...
  • 深入理解iOS App的启动过程

    万次阅读 多人点赞 2017-10-23 13:28:28
    本文首先会从原理上出发,讲解iOS系统是如何启动App的,然后从main函数之前和main函数之后两个角度去分析如何优化启动时间。准备知识Mach-O哪些名词指的是Mach-o Executable 可执行文件 Dylib 动态库 Bundle 无法被...
  • iOS App清除缓存

    千次阅读 2019-07-23 14:19:57
    典型的例子,我们的App很多都用到了SDWebImage来进行图片的加载.自然SDWebImage做了缓存清除的功能,但是有时候需要我们的用户手动的来清除自己应用程序的缓存,那我们就需要满足这个需求! 获取App缓存 - (CGFloat)...
  • 对此本人在网上查了好多资料也做了好多测试,大多数说的是升级系统(这纯属废话,要是升级系统还用问你啊),终于皇天负有心人,经过次测试,我找到了一个解决办法,其实真的是非常简单,废话也不多说了,方法...
  • iOS app安全技术总结

    万次阅读 2018-02-14 09:54:33
    iOS app安全技术总结 很多开发者认为,iOS系统的封闭性使APP更加安全。事实上,根据国外某安全服务商的最新调查显示:iOS前100名的付费应用中有87%均遭黑客破解。内购破解、源代码破解、本地数据窃取等,为iOS应用...
  • 现在,我们总能在手机上发现很多有趣好玩的手机APP,自己也有一些不错的想法,想通过手机APP实现。网站、论坛的访问量越来越小,APP越来越重要。那么如何不用学习安卓APP开发入门教程就能开发一款APP呢?通过咨询APP...
  • iOS App 唤醒另一个App

    千次阅读 2016-08-21 17:55:23
    iOS App 唤醒另一个App 网上也有讲这块的,感觉讲得不是好。而且有一些细节根本没有讲清楚。这里重写整理一下相关知识点。 主要内容 URL Scheme 是什么?项目中关键的配置注意事项 URL Scheme 是什么? iOS...
  • iOS 8 之 App Group

    千次阅读 2014-07-14 16:59:50
    App Sandbox),但明确写明不支持iOSiOS 8又一重大好消息是其宣布即将支持App Group,尽管写这篇文章时,还没有见到苹果官方的iOS App Group文档,但已经成功在程序中测试通过,功能强大,必须和大家分享 :) ...
  • iOSAPP开发FPS的测试技巧

    千次阅读 2018-01-20 13:20:16
    所以iOSAPP用起来一般不会感觉到卡顿的情况.除非你UI的某些地方写的有问题导致严重掉帧.但是,我们如何来看FPS的数值呢. 在安卓里面我们可以去系统的设置那里去调.可以看渲染效率什么的.但是在iOS中却没有这种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 160,144
精华内容 64,057
关键字:

很多app都不支持ios9系统了