Push集成文档
<h3>总述</h3>
<ol>
<li>MSSDK的极光推送,采用封装极光推送的方案。可以通过极光的后台进行推送操作。集成过程也需要有极光的相关账号以及一些配置。</li>
<li>对于苹果的远程推送,都是走的APN。因此需要设置相应的签名和证书。xcode工程中也需要做一些设置。</li>
</ol>
<h3>证书和签名</h3>
<ol>
<li>开发者账号中,需要为当前的应用开通push功能。</li>
</ol>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/1840248919edf32e26b925c092d67562?showdoc=.jpg" alt="" /></p>
<ol>
<li>苹果提供两种鉴权。一种是推送证书方式,一种是Auth Key的方式。建议采用AuthKey的方式。获取方式可参考<a href="https://docs.jiguang.cn//jpush/client/iOS/ios_cer_guide/">这里</a></li>
</ol>
<h3>极光后台配置</h3>
<ol>
<li>创建极光应用,如果已创建配置,可忽略此步骤。</li>
<li>将从苹果后台获取的AuthKey配置到极光推送配置中。
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/412131e9da21ee9732b8375d8b961be0?showdoc=.jpg" alt="" /></li>
</ol>
<h3>xcode工程配置</h3>
<ol>
<li>
<p>添加UserNotificationn.Framework到工程中。
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/2951be091b9a8102547ae56c4c8efea7?showdoc=.jpg" alt="" /></p>
</li>
<li>添加Capability中添加Push能力。并在background model中勾上remote notification.</li>
</ol>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/aa52af8d0bb6506a6d12fdf77fa93b1e?showdoc=.jpg" alt="" /></p>
<h3>SDK配置</h3>
<p>将获取极光应用的appId,配置在msConfig.json中。如已配置,可忽略。
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/03226b87602acd5370c4daace8bf2dc2?showdoc=.jpg" alt="" /></p>
<h3>代码集成</h3>
<ol>
<li>
<p>在AppDelegate中
<code>#import <UserNotifications/UserNotifications.h></code></p>
</li>
<li>
<p>上传device token</p>
<pre><code class="language-objc"> - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
[MSLDLog logInfo:@"mspush didRegisterForRemoteNotificationsWithDeviceToken"];
[[MSLDSDK sharedInstance] msld_application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
</code></pre>
</li>
<li>处理收到的远程通知</li>
</ol>
<pre><code>
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
NSLog(@"mspush application didReceiveRemoteNotification fetchCompletionHandler");
if (application.applicationState == UIApplicationStateActive)
{
// 程序当前正处于前台
NSLog(@"mspush application didReceiveRemoteNotification fetchCompletionHandler 前台");
}
else if (application.applicationState == UIApplicationStateInactive)
{
// 程序处于后台进入前台
NSLog(@"mspush application didReceiveRemoteNotification fetchCompletionHandler 后台");
}
// Required, iOS 7 Support
NSDictionary * param = nil;
if (userInfo) {
param = @{@"userInfo":userInfo};
}
[[MSLDSDK sharedInstance] actionWithLDUrl:ROUTE_PUSH_HANDLE_REMOTE_NOTIFICATION param:param success:nil fail:nil];
completionHandler(UIBackgroundFetchResultNewData);
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
[MSLDLog logDebug:@"mspush application didReceiveRemoteNotification"];
// Required, For systems with less than or equal to iOS 6
NSDictionary * param = nil;
if (userInfo) {
param = @{@"userInfo":userInfo};
}
[[MSLDSDK sharedInstance] actionWithLDUrl:ROUTE_PUSH_HANDLE_REMOTE_NOTIFICATION param:param success:nil fail:nil];
}
</code></pre>
<h3>其他功能</h3>
<h4>1. 设置badge Number</h4>
<p>大部分情况下,切到前台之后,会去掉小红点。</p>
<pre><code>
-(void)applicationWillEnterForeground:(UIApplication *)application {
// 清除小红点,一般已读消息后,清除小红点
NSDictionary * param = @{@"number":@0};
[[MSLDSDK sharedInstance] actionWithLDUrl:ROUTE_PUSH_SET_APP_BADGE_NUMBER param:param success:nil fail:nil];
}</code></pre>
<h4>2. 设置别名</h4>
<pre><code>NSMutableDictionary * params = [NSMutableDictionary dictionary];
[params setObject:@"abcAlias" forKey:@"alias"];
[params setObject:@(1) forKey:@"seq"];
[[MSLDSDK sharedInstance] actionWithLDUrl:ROUTE_PUSH_SET_ALIAS param:params success:^(NSString *msg, id data) {
[MSLDLog logDebug:@"设置Alias成功! msg:%@, data:[%@]", msg,data];
} fail:^(MSLDErrorCode code, NSString *msg, id errorData) {
[MSLDLog logDebug:@"设置Alias失败! msg:%@, errorData:%@", msg,errorData];
}];
</code></pre>