推送-個推的使用總結

gt.png

1、注冊個推平臺賬號。http://www.getui.com/cn/index.html
2、創(chuàng)建推送消息應用,填寫應用信息,android填寫包名,iOS平臺分開發(fā)環(huán)境和正式環(huán)境,可以分別創(chuàng)建應用,上傳相應的APNs的p12證書和密碼 或者等項目上線時替換成正式環(huán)境證書,10分鐘生效。
3、項目集成GTSDK,配置AppID、AppSecret、AppKey。
4、在didFinishLaunchingWithOptions中開啟個推。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   [GeTuiSdk startSdkWithAppId:kGtAppId appKey:kGtAppKey appSecret:kGtAppSecret delegate:self];
}

然后注冊遠程推送,順序不能反!

//進行用戶權限的申請
if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
    [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:UNAuthorizationOptionBadge|UNAuthorizationOptionSound|UNAuthorizationOptionAlert|UNAuthorizationOptionCarPlay completionHandler:^(BOOL granted, NSError * _Nullable error) {
        //在block中會傳入布爾值granted,表示用戶是否同意
        if (granted) {
            //如果用戶權限申請成功,設置通知中心的代理
            dispatch_async(dispatch_get_main_queue(), ^{
                [[UIApplication sharedApplication] registerForRemoteNotifications];
            });
        }
    }];
}else{
    UIApplication *app = [UIApplication sharedApplication];
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
    
    if ([app respondsToSelector:@selector(registerUserNotificationSettings:)]) {
        NSLog(@"8.0注冊通知");
        [app registerUserNotificationSettings:settings];
    } else {
        NSLog(@"7.0及以下 注冊通知");
        [app registerForRemoteNotificationTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound];
    }
}

5、在注冊成功的方法中處理一下蘋果返回的deviceToken,去掉兩端的尖括號和中間的空格

  - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
      token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
      // 向個推服務器注冊deviceToken
      [GeTuiSdk registerDeviceToken:token];
}

6、注冊clientId 綁定別名功能:后臺可以根據別名進行推送

  - (void)GeTuiSdkDidRegisterClient:(NSString *)clientId {
      [GeTuiSdk bindAlias:alias andSequenceNum:clientId];
  }

7、收到遠程通知消息

  #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
  //  iOS 10: App在前臺獲取到通知
  - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {

      MyLog(@"willPresentNotification:%@", notification.request.content.userInfo);
// 根據APP需要,判斷是否要提示用戶Badge、Sound、Alert
      completionHandler(UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);
  }

  //  iOS 10: 點擊通知進入App時觸發(fā)
  - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {

      MyLog(@"didReceiveNotification:%@", response.notification.request.content.userInfo);
      // [ GTSdk ]:將收到的APNs信息傳給個推統(tǒng)計
      [GeTuiSdk handleRemoteNotification:response.notification.request.content.userInfo];
      completionHandler(UIBackgroundFetchResultNewData);
  }
  #endif


  - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
      // 將收到的APNs信息傳給個推統(tǒng)計
      [GeTuiSdk handleRemoteNotification:userInfo];
      completionHandler(UIBackgroundFetchResultNewData);
  }

8、收到透傳消息,個推iOS推送,若app在前臺運行,消息走透傳,若在后臺運行,消息走通知,development環(huán)境測試推送,只能走透傳消息,通知消息僅支持Android。且收到透傳消息,沒有通知欄提示。

  - (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {
         NSDictionary *dict = nil;
          if (payloadData) {
              dict = [NSJSONSerialization JSONObjectWithData:payloadData options:NSJSONReadingAllowFragments error:nil];
              NSLog(@"************接收到透傳消息*************************%@",dict);
          }
  }

最后若是收不到消息,問題排查:

(1)檢查一下AppId 、AppKey、AppSecret是否配置正確
(2)檢查一下deviceToken是否與上傳證書的環(huán)境一致。


檢測deviceToken.png

(3)檢查一下開啟個推和注冊遠程通知的順序
(4)注意測試的時候是沒有通知欄的,可以在接收透傳消息的代理中檢測是否接收到推送消息。

======================================================
我是有底線的======================================================

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 許多集成的步驟個推官網都有了,這里只寫關于推送的遠程推送和本地通知的步驟和代碼。APP在后臺時:走蘋果的APNS通...
    AllureJM閱讀 2,967評論 1 9
  • 為應用創(chuàng)建 APNs 推送證書,可以按照個推說明的去配置證書和描述文件 證書配置 描述文件配置 到個推注冊應用取得...
    放肆的灑脫閱讀 4,205評論 1 0
  • 極光推送: 1.JPush當前版本是1.8.2,其SDK的開發(fā)除了正常的功能完善和擴展外也緊隨蘋果官方的步伐,SD...
    Isspace閱讀 6,884評論 10 16
  • 不同版本極光推送SDK集成各有差異,集成時一定要注意版本號,樓主已將博文更新成最新的SDK JPush v3.0....
    i順頌時宜閱讀 8,019評論 37 170
  • 所有的風景里,只有努力結果的最美。 我們一生會喜歡很多事情,不可能只會喜歡一個,也不可能永遠喜歡很多。但是最后留下...
    九里歸一閱讀 447評論 4 3

友情鏈接更多精彩內容