【第22期】观点:IT 行业加班,到底有没有价值?

小米推送服务iOS客户端SDK使用指南

转载 2015年11月20日 20:51:36

如果您在集成过程中遇到任何问题,都可以添加QQ群:385428920 ,群中会有工程师解答您的问题。

小米推送iOS版提供存量用户无缝迁移方案
小米推送现已支持批量导入DeviceToken的功能,可以帮助您将IOS推送无缝迁移到小米推送服务上。

迁移方法是给我们提供所有现有设备的DeviceToken列表(CSV或TXT格式,每行一个DeviceToken),我们会为这拨设备直接生成小米推送的设备标识(regid),这样即使这批用户不升级到包含小米推送SDK的应用新版本也依然能收到通过小米推送服务发出的消息。

如有迁移需求,请在集成小米推送的应用版本正式发布前联系我们进行导入
联系方式:
马一翔 mayixiang@xiaomi.com
赵宇斌 zhaoyubin@xiaomi.com

修订历史
  2014年3月 草稿
  2014年4月 正式版
  2014年9月 Add 常见问题
  2015年5月 Add 应用内长连接
  在集成过程中遇到任何问题,请联系我们:DevPush@xiaomi.com

1. 概要

iOS版本包括两部分。

1. 基于Apple的APNs(Apple Push Notification Service)

2.
应用内长连接(即在App启动并运行在前台时,SDK内部会运行一个Socket长连接连接到Server端,以接收消息推送。此长连接跟APNs时分开的,不经过APNs服务器)

SDK以.a动态链接库的形式提供, 开发者只需在原有编码基础上添加少许代码,来注册小米推送服务与绑定手机设备。

客户端在注册成功后,会得到服务器颁发的regId(终端唯一标示),服务端通过regId发消息给终端。
除此以外,客户端还可以通过订阅Topic、设置别名Alias、帐号Acount来收发推送消息。

2. 使用说明

这里介绍如何配置和使用小米推送服务,您也可以参照Demo来配置和使用小米推送服务。

在使用小米推送服务前,开发者需要先登录小米开发者网站http://developer.xiaomi.com。注册App,申请对应的AppID, AppKey,
AppSecret。

其中AppID和AppKey是客户端的应用标识,在客户端SDK初始化时使用;AppSecret是应用私钥,在使用服务器 SDK向客户端发送消息时使用。

2.1. 创建APNs证书

APNs证书是一种扩展名为p12的文件,它是我们发送消息给APNs的证明。在开发时我们分Development环境与Distribution环境。所以p12会有两个版本:Development
与 Distribution。NOTE: 创建证书时请携带密码。

1.在Mac中,开启Keychina Access
2.选中你对应bundleID 的证书,注意 Development/Distribution。右键Export

3.Save。注意文件格式

4.保存时需要你给证书设定密码

2.2. 搭建XCode运行环境

我们的libMiPushSDK库文件同时包含i386、x86_64、arm64、armv6和armv7的代码,所以libMiPushSDK将同时支持真机与模拟器。但由于Apple推送不支持模拟器,请使用真机测试功能。

  1. 小米推送服务IOS版支持的最低系统版本iOS5.0
  2. 添加libMiPushSDK.a , MiPushSDK.h 到工程
  3. 引入库 libresolv.dylib, libxml2.dylib, libz.dylib,
    SystemConfiguration.framework,MobileCoreServices.framework,CFNetwork.framework,CoreTelephony.framework
    (如果已经引入,请忽略)

2.3. 配置SDK运行参数

运行SDK注册小米推送服务的时候,需要使用AppID,AppKey,等参数来验证使用者的合法性。

  1. 打开工程下资源文件Info.plist
  2. 文件为源代码形式打开,添加以下信息
    <dict>
    	<key>MiSDKAppID</key>
    	<string>1000888</string>
    	<key>MiSDKAppKey</key>
    	<string>500088888888</string>
    	<key>MiSDKRun</key>
    	<string>Online</string>
    </dict>
  3. 如果开发版本较多,修改连接环境比较繁琐,提供以下方式。
    !--请注意MiSDKRun写法, 用buildSetting里面的宏替换--
    <dict>
    	<key>MiSDKAppID</key>
    	<string>1000888</string>
    	<key>MiSDKAppKey</key>
    	<string>500088888888</string>
    	<key>MiSDKRun</key>
    	<string>${MiSDKRun}</string>
    </dict>
  4. MiSDKAppID, MiSDKAppKey 为在小米开发者网站http://developer.xiaomi.com。注册App,申请的AppID,
    AppKeyMiSDKRun 是设定SDK是连接Development环境/Distribution环境 对应参数为Debug/Online

2.4. 注册推送服务,绑定手机设备

工作流程:

  1. 当客户端应用启动时,调用以下代码注册推送服务注册时需要设置MiPushSDKDelegate
    // 只启动APNs.
     [MiPushSDK registerMiPush:self];
    // 同时启用APNs跟应用内长连接
     [MiPushSDK registerMiPush:self type:0 connect:YES];
  2. 推送服务注册成功后,SDK会请求APNs建立连接并获得deviceToken,请求获得deviceToken成功后请调用以下代码来绑定手机设备
     #pragma mark UIApplicationDelegate
     - (void)application:(UIApplication *)app 
             didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
     {
        // 注册APNS成功, 注册deviceToken
        [MiPushSDK bindDeviceToken:deviceToken];
     }
    
     - (void)application:(UIApplication *)app 
             didFailToRegisterForRemoteNotificationsWithError:(NSError *)err
     {
        // 注册APNS失败
        // 自行处理
     }

2.5. 实现MiPushSDKDelegate回调

SDK中所有请求操作都是异步的。调用成功与失败都会通过MiPushSDKDelegate来通知。
其中包括:注册小米推送,绑定deviceToken,设置Alias,订阅Topic,帐号Account,App统计打点等。

  1. 在AppDelegate.h中加入MiPushDelegate协议
     #import "MiPushSDK.h"

     // <--
    
     @interface MPAppDelegate : UIResponder
     
<
        MiPushSDKDelegate,      // <--
        UIApplicationDelegate

     >
     @property (strong, nonatomic) UIWindow *window;
      
     @end
  2. 在AppDelegate.m中实现回调方法
     #pragma mark MiPushSDKDelegate
      
     - (void)miPushRequestSuccWithSelector:(NSString *)selector data:(NSDictionary *)data
     {
          // 请求成功
     }
      
     - (void)miPushRequestErrWithSelector:(NSString *)selector error:(int)error data:(NSDictionary *)data
     {
          // 请求失败
     }

2.6. 长连接消息处理

当App启动并运行在前台时,SDK内部会运行一个Socket长连接连接到Server端,以接收消息推送。收到消息时回通过MiPushSDKDelegate来通知

  1. 在AppDelegate.m中实现回调方法
     - ( void )miPushReceiveNotification:( NSDictionary *)data
     {
         // 长连接收到的消息。消息格式跟APNs格式一样
     }
  2. 同一条消息
    会通过APNs跟长连接分别收到。所以需要使用下面代码把APNs消息导入到SDK内部进行去重复。

     - ( void )application:( UIApplication *)application didReceiveRemoteNotification:( NSDictionary *)userInfo
     {
         [ MiPushSDK handleReceiveRemoteNotification :userInfo];
         // 使用此方法后,所有消息会进行去重,然后通过miPushReceiveNotification:回调返回给App
     }

2.7. 别名Alias / 订阅Topic / 帐号Account

注册推送服务,绑定手机设备成功后,即可调用以下方法

 // 设置别名           
 [MiPushSDK setAlias:@“alias”]
  
 // 订阅内容
 [MiPushSDK subscribe:@“topic”] 

 // 设置帐号
 [MiPushSDK setAccount:@“account”]

Alias可以理解为regId的别名,开发者可以将alias设置为自己应用帐号系统的帐号,或者设备标识等。然后在使用ServerSDK发送消息的时候,即可直接指定发送给特定的alias,而不是regId,避免存储regId。

主题用来做广播消息。不同手机上的同一个App可以订阅同一个主题。通过发送主题消息的API,即可同时向所有订阅该主题的客户端发送消息。比如,您有一个新闻类的App,可以自定义“财经”、“体育”、“科技“等主题;对于经常阅读财经新闻的用户,您可以帮用户订阅“财经”类主题,当有新的财经要闻发生时,直接通过主题推送该新闻给所有订阅该主题的用户。

帐号,多设备设置同一个帐号, 发送消息时多设备可以同时收到。一般在多点登陆时使用,多设备使用同一个帐号,他们可以同时收到消息。

2.8. 解析消息,并记录开启事件

注:当启用长连接时,不需要在进行此操作。

当App工作在前台或后台,收到推送消息后,请实现下面代码,已统计用户开启App事件。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ......
    [MiPushSDK registerMiPush:self type:0 connect:YES];
    NSString *messageId = [userInfo objectForKey:@"_id_"];
    if (messageId!=nil) {
      [MiPushSDK openAppNotify:messageId];
    }
    ......
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    NSString *messageId = [userInfo objectForKey:@"_id_"];
    [MiPushSDK openAppNotify:messageId];
}

当iOS7
你使用RemoteNotification时,请实现下面代码

- (void)application:(UIApplication *)application 
    didReceiveRemoteNotification:(NSDictionary *)userInfo 
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSString *messageId = [userInfo objectForKey:@"_id_"];
    [MiPushSDK openAppNotify:messageId];
}

2.9. iOS8推送消息快速回复

当用户收到消息的时候,提供一个快速回复的按钮。具体信息可参考

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html

#pragma mark MiPushSDKDelegate
- (void)miPushRequestSuccWithSelector:(NSString *)selector data:(NSDictionary *)data
{    
    ...
    if ([selector isEqualToString:@"bindDeviceToken:"]) {
        
        UIMutableUserNotificationAction *action = [[UIMutableUserNotificationAction alloc] init];
        action.identifier = @"action1"; //按钮的标示
        action.title=@"启动"; //按钮的标题
        action.activationMode = UIUserNotificationActivationModeForeground;//当点击的时候启动程序
        
        UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init];
        action2.identifier = @"action2";
        action2.title=@"忽略";
        action2.activationMode = UIUserNotificationActivationModeBackground;//当点击的时候不启动程序,在后台处理
        action.authenticationRequired = YES;//需要解锁才能处理
        action.destructive = YES;
        
        UIMutableUserNotificationCategory *categorys = [[UIMutableUserNotificationCategory alloc] init];
        categorys.identifier = @"category"; //这组动作的唯一标示
        [categorys setActions:@[action,action2] forContext:(UIUserNotificationActionContextMinimal)];
        
        UIUserNotificationSettings *uns = [UIUserNotificationSettings settingsForTypes:
                  (UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound)
                  categories:[NSSet setWithObjects:categorys, nil]];
        [[UIApplication sharedApplication] registerUserNotificationSettings:uns];
    }
}

2.10. 开发环境/生产环境之间的切换

为了方便开发调试,除了Distribution服务器外,我们还提供Development服务器。为了避免影响已发布的App,您可以在Development服务器上开发调试,开发完毕再切换到Distribution服务器。

Apple签名APNs证书也分Development/Distribution。并且终端应用在不同环境下获得的deviceToken也不同。

开启Info.plist文件,修改MiSDKRun参数。Debug:Development服务器。Online:Distribution服务器

3. API说明

MiPushSDK.h 分两部分 @interface MiPushSDK ,@protocol MiPushSDKDelegate

3.1. @interface MiPushSDK : NSObject

MiPushSDK是小米推送服务在iOS平台的接入类。单实例。并提供了一系列静态方法。

表 1. 

API 功能 使用场景
+ (void)registerMiPush:(id<MiPushSDKDelegate>)delegate 客户端注册设备 由开发者选择注册MiPushSDK时机。建议在程序启动时调用此方法
+ (void)registerMiPush:(id<MiPushSDKDelegate>)delegate type:(UIRemoteNotificationType)type 客户端注册设备,并设置消息类型 由开发者选择注册MiPushSDK时机。建议在程序启动时调用此方法
+ (void)registerMiPush:(id<MiPushSDKDelegate>)delegate type:(UIRemoteNotificationType)type connect:(BOOL)connect; 客户端注册设备,并设置消息类型与是否使用长连接 由开发者选择注册MiPushSDK时机。建议在程序启动时调用此方法
+ (void)unregisterMiPush 客户端设备注销 当App选择停止推送功能的时候调用此方法。
+ (void)bindDeviceToken:(NSData *)deviceToken 绑定 PushDeviceToken 代码必须写在如下方法里。 – (void)application:(UIApplication *)app
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
+ (void)setAlias:(NSString *)alias 为指定用户设置别名 在成功注册设备并绑定DeviceToken后调用
+ (void)unsetAlias:(NSString *)alias 取消指定用户的别名 在成功注册设备并绑定DeviceToken后调用
+ (void)setAccount:(NSString *)account 为指定用户设置帐号 在成功注册设备并绑定DeviceToken后调用
+ (void)unsetAccount:(NSString *)account 取消指定用户的帐号 在成功注册设备并绑定DeviceToken后调用
+ (void)subscribe:(NSString *)topic 为某个用户设置订阅主题 在成功注册设备并绑定DeviceToken后调用
+ (void)unsubscribe:(NSString *)topic 取消某个用户的订阅主题 在成功注册设备并绑定DeviceToken后调用
+ (void)getAllAliasAsync 获取客户端设置的别名。 在成功注册设备并绑定DeviceToken后调用
+ (void)getAllTopicAsync 获取客户端订阅的主题。 在成功注册设备并绑定DeviceToken后调用
+ (void)getAllAccountAsync 获取客户端订阅的帐号。 在成功注册设备并绑定DeviceToken后调用
+ (void)openAppNotify:(NSString *)messageId 统计客户端通过推送,而开启App的行为。 在成功注册设备并绑定DeviceToken后调用
+ (NSString*)getSDKVersion 获取SDK版本号。  

 

3.2. @protocol MiPushSDKDelegate <NSObject>

MiPushSDKDelegate SDK的所有请求都是异步操作,用户需监听此方法。

表 2. 

API 功能
- (void)miPushRequestSuccWithSelector:(NSString *)selector data:(NSDictionary
*)data
当请求成功时返回
- (void)miPushRequestErrWithSelector:(NSString *)selector error:(int)error
data:(NSDictionary *)data
当请求失败时返回

 

3.3. 方法详细说明

3.3.1. + (void)registerMiPush:(id<MiPushSDKDelegate>)delegate;

建议在程序启动时调用此方法,代码放到以下代码块中。这是因为,如果用户重装了iOS或者用户换了设备并且恢复程序备份到一个新的设备,都将导致这个token值不一样。

- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

表 3. 

参数列表 参数说明
(id<MiPushSDKDelegate>)delegate 加入请求成功与失败的监听

 

3.3.2. + (void)registerMiPush:(id<MiPushSDKDelegate>)delegate type:(UIRemoteNotificationType)type;

建议在程序启动时调用此方法,代码放到以下代码块中。这是因为,如果用户重装了iOS或者用户换了设备并且恢复程序备份到一个新的设备,都将导致这个token值不一样。

- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

表 4. 

参数列表 参数说明
(id<MiPushSDKDelegate>)delegate 加入请求成功与失败的监听
type:(UIRemoteNotificationType)type 消息类型:UIRemoteNotificationTypeBadge, UIRemoteNotificationTypeSound, UIRemoteNotificationTypeAlert, UIRemoteNotificationTypeNewsstandContentAvailability

 

3.3.3. + (void)registerMiPush:(id<MiPushSDKDelegate>)delegate type:(UIRemoteNotificationType)type connect:(BOOL)connect;

建议在程序启动时调用此方法,代码放到以下代码块中。这是因为,如果用户重装了iOS或者用户换了设备并且恢复程序备份到一个新的设备,都将导致这个token值不一样。

- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

表 5. 

参数列表 参数说明
(id<MiPushSDKDelegate>)delegate 加入请求成功与失败的监听
type:(UIRemoteNotificationType)type 消息类型:UIRemoteNotificationTypeBadge, UIRemoteNotificationTypeSound, UIRemoteNotificationTypeAlert, UIRemoteNotificationTypeNewsstandContentAvailability
connect:(BOOL)connect 是否启动应用内长连接

 

3.3.4. + (void)unregisterMiPush;

当客户端决定关闭推送功能的时候调用此方法。并且需要注意,在下次程序启动的时候不要调用registerMiPush:。否则推送又将被开启

小米推送服务关闭后,在调用其他功能性API都将提示错误。

3.3.5. + (void)bindDeviceToken:(NSData *)deviceToken

向MiPush注册deviceToken。为保证消息可达,必须在系统application:didRegisterForRemoteNotificationsWithDeviceToken:调用。SDK内部会处理是否重新同步上传

表 6. 

参数列表 参数说明
(NSData *)deviceToken 设备的唯一标示,有Apple分配。
application:didRegisterForRemoteNotificationsWithDeviceToken: 返回的内容.

 

3.3.6. + (void)setAlias:(NSString *)alias;

开发者可以为指定用户设置别名,然后给这个别名推送消息,效果等同于给regId推送消息。注:
一个regId可以被设置多个别名,如果设置的别名已经存在,会覆盖掉之前的别名。不要超过100个

在成功注册设备并绑定DeviceToken后调用,当关闭推送功能后再调用此方法将会失败

表 7. 

参数列表 参数说明
(NSString *)alias 为指定用户设置别名

 

3.3.7. + (void)unsetAlias:(NSString *)alias

开发者可以取消指定用户的某个别名,服务器就不会给这个别名推送消息了。

在成功注册设备并绑定DeviceToken后调用,当关闭推送功能后再调用此方法将会失败

表 8. 

参数列表 参数说明
(NSString *)alias 为指定用户设置别名

 

3.3.8. + (void)setAccount:(NSString *)account;

开发者可以为指定用户设置帐号,然后给这个帐号推送消息,效果等同于给regId推送消息。注: 一个regId可以被设置多个帐号。不要超过100个

在成功注册设备并绑定DeviceToken后调用,当关闭推送功能后再调用此方法将会失败

表 9. 

参数列表 参数说明
(NSString *)account 为指定用户设置帐号

 

3.3.9. + (void)unsetAccount:(NSString *)account;

开发者可以取消指定用户的某个帐号,服务器就不会给这个帐号推送消息了。

在成功注册设备并绑定DeviceToken后调用,当关闭推送功能后再调用此方法将会失败

表 10. 

参数列表 参数说明
(NSString *)account 为指定用户设置帐号

 

3.3.10. + (void)subscribe:(NSString *)topic

为某个用户设置订阅主题;根据用户订阅的不同主题,开发者可以根据订阅的主题实现分组群发。

支持同时设置多个topic, 中间使用”,”分隔

在成功注册设备并绑定DeviceToken后调用,当关闭推送功能后再调用此方法将会失败

表 11. 

参数列表 参数说明
(NSString *)topic 某个用户订阅的主题

 

3.3.11. + (void)unsubscribe:(NSString *)topic

为某个用户取消某个订阅主题。

支持同时设置多个topic, 中间使用”,”分隔

在成功注册设备并绑定DeviceToken后调用,当关闭推送功能后再调用此方法将会失败

表 12. 

参数列表 参数说明
(NSString *)topic 某个用户取消订阅的主题

 

3.3.12. + (void)openAppNotify:(NSString *)messageId

统计客户端,通过推送开启App行为。如果你想使用MiPush服务器帮你统计点击量 请自行调用此方法。然后登陆推送后台推送统计查看数据。

在成功注册设备并绑定DeviceToken后调用,当关闭推送功能后再调用此方法将会失败

表 13. 

参数列表 参数说明
(NSString *)messageId 每条通知都会有一条唯一索引, 保存在Payload里面的miid。统计时需要携带此参数。以作为消息跟踪

 

3.3.13. + (void)getAllAliasAsync

获取客户端设置的别名列表。

在成功注册设备并绑定DeviceToken后调用,当关闭推送功能后再调用此方法将会失败

3.3.14. + (void)getAllAccountAsync;

获取客户端设置的帐号列表。

在成功注册设备并绑定DeviceToken后调用,当关闭推送功能后再调用此方法将会失败

3.3.15. + (void)getAllTopicAsync;

获取客户端订阅的主题列表。

在成功注册设备并绑定DeviceToken后调用,当关闭推送功能后再调用此方法将会失败

3.3.16. + (NSString*)getSDKVersion

获取SDK版本号

3.3.17. - (void)miPushRequestSuccWithSelector:(NSString *)selector data:(NSDictionary
*)data

当请求成功后,会回调此方法

表 14. 

参数列表 参数说明
(NSString *)selector 请求调用方法的名称。例: “setAlias:”
(NSDictionary *)data 请求后下发的服务器信息。

 

3.3.18. - (void)miPushRequestErrWithSelector:(NSString *)selector error:(int)error
data:(NSDictionary *)data

当请求失败后,会回调此方法

表 15. 

参数列表 参数说明
(NSString *)selector 请求调用方法的名称。例: “setAlias:” NOTE: 最后参数后面的冒号
(int)error 错误码。参加“错误码说明”
(NSDictionary *)data 请求后下发的服务器信息。

 

3.4. 错误码说明

表 16. 

错误码 说明
-1 访问超时,网络信号不好
-2 无网络
-3 未知错误,通常意味着MiPush服务器的业务错误
-4 操作太频繁
-5 请求无效参数
-6 返回结果无效
-100 无效的UserID
-101 无效的RegID

 

4. 常见问题

4.1. 收不到推送消息?

请检查以下几点

  1. 开发者网站是否启用推送服务,并成功上传证书
  2. 用Appsecret自行推送的,请确认此secret是否为iOS版本,
  3. 工程里面plist中MiSDKRun环境参数是否设置妥当。debug为测试环境,online为线上环境
  4. 必须真机调试,IPA的profile是否与push证书匹配。
  5. 代码中监听MiPushSDKDelegate,看注册与绑定token是否正常,alias,topic是否设置成功

4.2. 接入时碰到如下提示

Error is Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的授权字符串"
        UserInfo=0x17dbf200 {NSLocalizedDescription=未找到应用程序的“aps-environment”的授权字符串}

检查事项 同4.1

4.3. 常见返回错误

  1. 调用SDK + (void)unregisterMiPush; 执行注销操作后,在执行其他方法就会导致报错-101
  2. 你的程序清除本地数据。NSUserDefaults导致本地保存的regID等丢失。就会导致报错-101
  3. 解决方法:当回调返回-101时,根据你程序需要,可以重新调用+ (void)registerMiPush
  4. code=10017; reason=’invalid package name’ 小米开发者网站 注册的bundleID 跟 你ipa的bundleID
    不是同一个

4.4. 脚标或通知栏无法清除?

清除方法:

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

如果无效请尝试,原因是,在推送时badge设置为0,这样你在app中再次设置就会失效

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

4.5. SetAlias Subscribe为什么有时成功,有时失败?

SDK中方法为异步操作,setAlias: subscribe:等操作必须在bindDeviceToken:返回成功后再调用。

因为bindDeviceToken成功请求后服务器才会分配账号给设备。如果setAlias操作在它前面执行,会找不到对应设备。

4.6. 接收到推送之后 如何取得里面的数据?

当App在后台,通过下面方法

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

当新App的时候,通过下面方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

4.7. registerMiPush 在没有网络下调用,为什么还会返回成功?

SDK中会检查,如果此操作已经完成过,就不会重复请求服务器。

4.8. Topic 最多可以设置多少个,支持汉字吗?

一个设备最多可以设置300个, 支持汉字。

4.9. 如何使用 iOS7 Background Remote Notification (消息透传)

App在后台,收到消息后,会在后台运行一段代码。并不会提示用户。比如,App内容升级,Email更新,订阅内容等等

在server端发送消息时extra加入content-available字段。同时xcode工程下激活BackgroundModes-Remote notifications。

4.10. 为什么要使用长连接

在App运行时 ,APNs会提示用户是否接收消息,很多时候,用户会禁止此功能。导致,推送消息无法送达到用户手机。所以使用长连接功能,可以在App运行时,获取消息推送。

4.11. 在现有版本MiPushSDK下,如何快速使用应用内长连接

操作步骤:

1. 添加libMiPushSDK.a , MiPushSDK.h 到工程
2. 引入库:libresolv.dylib, libxml2.dylib, libz.dylib, SystemConfiguration.framework,MobileCoreServices.framework,CFNetwork.framework,CoreTelephony.framework (如果已经引入,请忽略)
3. 加入如下代码, 启动长连接
+ (void)registerMiPush:(id<MiPushSDKDelegate>)delegate type:(UIRemoteNotificationType)type connect:(BOOL)connect;
4. 加入收到消息回调,当客户端收到MiPush推送时,此方法会被调用到,data格式同 application:didReceiveRemoteNotification:
- (void)miPushReceiveNotification:(NSDictionary*)data;
5. 去掉原有处理通知逻辑,使用下面代替
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    [MiPushSDK handleReceiveRemoteNotification:userInfo];
}
举报

相关文章推荐

IOS打包发布APP的所有详细流程

(不要觉得这篇文章有点多就静不下心来研究,本人也是花了一天的时间才网上找了大量的资料,遇到了各种的问题之后,又花了好长时间来写这篇博客的,希望对你们有所帮助!) 一、申请苹果开发者账号   首先需要申...

ipa多目标重签名流程

给公司做项目,之前因为企业证书被封闭,需要紧急发布ios应用,于是从网上找了个卖苹果企业证书的,对方只要了我的ipa安装包,然后一番倒腾,就可以将我原来的ipa包中的证书给替换掉,甚是惊奇,由此,知道...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

终于找到了,Xcode7下企业号发布app

原文http://www.bubuko.com/infodetail-1029678.html 一、通过企业账号申请证书   1 Certificate Signing Request...

Xcode打包项目(.xcodeproj=>.ipa)

1.相关知识ipa文件,即 iOS 应用的安装包文件,扩展名为 .ipa。能否正确的打包 ipa文件,是决定了 ipa文件上传到App Store后能否被正确安装的关键。应用的 ipa文件可以使用两种...

iOS证书申请和使用说明

iOS证书申请和使用说明 目录 苹果开发帐号说明 苹果证书和X5打包服务器的配合使用 iOS证书申请教程 苹果证书和极光推送的配合使用   苹果开发帐号说明 ...

iOS 给测试人员测试手机APP的四种方法:真机运行(略),打ipa包,(testFlighe)邮件,蒲公英(一)打ipa包

APP上线前测试,无外乎 1:用数据线真机调试(以前需要下载真机调试证书) 2:打.ipa包给测试人员(上限100人) 3:通过testFlight添加测试员。内部测试员(上限25人),外部测试员(2...

C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》

在上篇博客中,简单整理了一下Unity Native 2D功能:《C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D》. 本文开始学习2D商用比较广泛的2D Toolk...

Android集成“小米消息推送”详细教程

消息推送这个玩意,大部分APP都有的,你像QQ、淘宝、微博、支付宝、网易新闻等,他们的消息推送简直伤心病狂。 常见的第三方消息推送方案有这些: 极光推送 友盟推送 个推 小米推送 腾讯信鸽 百度云推...

Android消息推送:手把手教你集成小米推送

前言 在Android开发中,消息推送功能的使用非常常见。为了降低开发成本,使用第三方推送是现今较为流行的解决方案。 今天,我将手把手教大家如何在你的应用里集成小米推送 该文档基于小米推送官方De...

Android端小米推送Demo解析和实现方法

前言  最近这几个月都是在准备找工作和找工作中,付出了很多,总算是有点收获,所以都没有怎么整理笔记。到了最近才有空把自己的笔记整理一下发上来,分享一下我的学习经验。推送  由于最近项目要用到Andro...
  • totond
  • totond
  • 2016-10-22 23:13
  • 2965
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)